javaWeb(servlet,filter,Listenter)
上个月感觉没什么好总结的点,有点杂所以选了两个讲一下.
MVC(model view controller)思想
在讲之前先说一下MVC
1)什么是mvc?
目的:责任分离,把业务代码从视图层剥离出来
M:模型对象(封装业务操作,算法,可重复使用,Javabean),DAO,Domain
V:view,视图(界面)JSP,html
C:controller,控制层(接收请求,控制跳转)Servlet
Servlet
作用:处理请求和发送响应(实现动态页面)
Servlet开发步骤
1.创建一个类实现servlet接口
2.实现接口中的方法
3.在service方法处理请求和响应数据
4.配置Servlet的访问地址
-
web.xml配置
-
注解配置
http请求和响应

Tomcat是web应用服务器,是一个servlet/jsp的容器

1.Tomcat将http请求文本接收并解析,然后封装成HttpServletRequest类型的request对象,
所有的http头数据读可以通过request对象调用对应的方法查询
2.Tomcat同时会要响应的信息封装为HttpServletResponse类型的response对象,通过设置response属性就可以控制要输出到浏览器的内容,然后将response交给tomcat,tomcat就会将其变成响应文本的格式发送给浏览器
Tomcat配置常见错误
解决方法配置JAVA_HOME环境变量

2.端口号被占用
可以通过日志文件可以看到错误信息
["http-bio-8080"]
java.net.BindException:Address already in use:bind
一.中止占用端口程序
二.修改端口号
Servlet的生命周期
1)加载Servlet和创建实例
servlet容器部署并加载和创建servlet实例
2)调用init()方法
只有servlet的值>=0,web容器启动时立即调用init()方法
3)调用service()方法
每次web服务器收到servlet请求,都会产生一个service()方法
Servlet执行流程

web.xml配置
<servlet> <!--给servlet取一个名字--> <servlet-name>MyServlet</servlet-name> <!--servlet的全限定类名--> <servlet-class>com.beginnersbook.DemoServlet</servlet-class> <!-- 配置 Serlvet 的初始化参数。 且节点必须在 load-on-startup 节点的前面 --> <init-param> <!-- 参数名 --> <param-name>user</param-name> <!-- 参数值 --> <param-value>root</param-value> </init-param> <!--servlet加载顺序--> <load-on-startup>1</load-on-startup> </servlet> <!-- 1).同一个servlet可以被映射到多个URL上,即多个<servlet-mapping>元素</servlet-mapping>子元素可以使同一个Servlet注册名 2).在Servlet映射到的URL也可以使用通配符,但是只能有两种格式".扩展名",另一种格式以正斜杠(/)开头并以"/*"结尾 --> <servlet-mapping> <servlet-name>MySerlet</servlet-name> <!--浏览器通过地址找到servlet--> <url-pattern>/</url-pattern> </servlet-mapping>
通配符格式

2).在Servlet映射到的URL也可以使用通配符,但是只能有两种格式".扩展名",另一种格式以正斜杠(/)开头并以"/*"结尾
映射注意事项:
映射路径必须保证唯一性,除通配符结合扩展名使用,否则必须以/开头
servlet-name不能叫做default和jsp
Tomcat内部已有两个Servlet,一个default和jsp
DefaultServlet是用来处理静态资源
JSPServlet是用来将JSP文件翻译为Java文件

在实现时使用时直接继承HttpServlet
requset,response
1、获取请求的方式 getMethod() 2、目录的路径 getContextPath() 3、获取servlet路径 getServletString() 4、获得get请求参数 getQueryString() 5、获取请求的url getRequestURL() getRequestURI() 6、获得协议版本 getProtocol() 7、获取客户的ip getRemoteAddr() 8、获取请求参数的通用方式 1、getParameter(Sring name) 2、根据参数的名称获得参数的数组 getParameterValues(String name) 3、获取所有请求参数的名称 getParameterNames() 4、获得所有参数的集合 getParameterMap() 9、获取session 对象 getSession() 1、告诉浏览器数据类型 setContentType() 2、设置respon的编码格式 setCharacterEnconding() 3、返回服务器的预设错误网址并显示错误信息 sendError() 4、重定向页面 sendRedirect() 5、获取通向浏览器的字节流 getOutputStream() 6、获取通向浏览器的字符流 getWriter() 7、回传路径 encodeRedirectURL() 8、setHeader()设置消息头 9、setStatus()设置状态 10、addCookie()添加Cookie
Filter(过滤器)

过滤器就是一个可以对request和response预处理的地方
使用场景:
- 字符编码处理
- 登录校验
- 论坛敏感字校验
- 前端框架分发器
Filter开发步骤
public class HollerFilter implements Filter { /** * 初始化 tomcat创建这个filter对象 调用这个方法 * @param filterConfig * @throws ServletException */ @Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println("初始化创建"); } /** * 过滤方法,每次请求对应资源的时候都会执行,只有路径符合 * @param servletRequest * @param servletResponse * @param filterChain * @throws IOException * @throws ServletException */ @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { // 执行过滤操作 System.out.println(1); // 完成过滤放行 filterChain.doFilter(servletRequest, servletResponse); // System.out.println(2); } /** * 正常关闭调用这个方法 */ @Override public void destroy() { System.out.println("销毁filter"); } }
web.xml配置
<filter>
<filter-name>HollerFilter </filter-name>
<!--全限定指向XxxFilter-->
<filter-class>>cn.wolfcode.web.filter.HelloFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HollerFilter</filter-name>
<!--XxxFilter对那些资源进行过滤
1./hello 只对/hello做拦截
2./system/*只对以system/作为前缀的资源路径做拦截
3./* 对所有资源访问都会拦截
-->
<url-pattern>/hello</url-pattern>
</filter-mapping>
过滤路径细节
- url-pattern的文本内容时Filter对哪一些资源做过滤
- /hello.jsp:说明当前Filter只会对/hello.jsp拦截过滤
- /employee:说明当前Filter只会对/employee资源拦截过滤
- /system/*:说明当前Filter只会对/employee作为前缀的资源拦截过滤
- /* :对所有的访问资源都会被拦截
Listener(监听器)
pass:这个我也是用的少所以就简单讲一下用法:)
Listener 是 Java Web 组件之一,主要的作用是用于监听作用域对象的创建和销毁动作以及作用域属性 值的改变动作。若用户触发了这些动作,那么会立即执行相应的的监听器的操作
监听的对象:作用域对象,作用域属性。
监听的动作:作用域对象的创建和销毁,作用域属值的增删改。
监听器分类
按作用域对象:
- ServletRequestListener
- HttpSessionListener
- ServletContextListener
按作用域属性分:
- ServletRequestAttributeListener
- HttpSessionAttributeListener
- ServletContextAttributeListener
写个简单的统计游客数量的案例
package cn.wolfcode.web.listener; public class VisitorListener implements HttpSessionListener { private static long totalCount = 0; // Session 对象创建会执行下面的方法 @Override public void sessionCreated(HttpSessionEvent httpSessionEvent) { totalCount++; System.out.println("在线人数:" + totalCount); } // Session 对象销毁会执行下面的方法 @Override public void sessionDestroyed(HttpSessionEvent httpSessionEvent) { totalCount--; } }
配置web.xml或者贴注解
<listener> <listener-class>cn.wolfcode.web.listener.VisitorListener</listener-class> </listener>

浙公网安备 33010602011771号