码迷,mamicode.com
首页 > 其他好文 > 详细

过滤器,监听器

时间:2018-05-07 22:53:09      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:多次   remove   The   ror   html   监听   contex   简介   mes   

 

1 过滤器

1.1 过滤器简介

1)过滤器其实就是一个接口,Filterjavax.servet.Filter

2)过滤器就是一个对象,可以在请求一个资源(静态或动态资源),或响应一个资源,或请求和响应一个资源的时候,执行过滤任务!!!!

3其实就是在执行servlet之前,执行的逻辑,可以省却servlet中重复的部分。

 

Servlet的三大组件:( 1)都需要交给web服务器运行  2)在web.xml文件中配置  )

servletServlet接口:用于开发动态网页=>request,response

(过滤器)Filter接口:=>filterConfig(init),chain(doFilter)+request,response

(监听器)Listener接口:=>

 

4)过滤器的生命周期

构造方法: web应用加载时创建过滤器对象。只执行一次。证明过滤器在web服务器中是单实例的

init方法: 在创建完过滤器对象之后被调用。只执行一次

doFilter方法: 执行过滤任务方法。执行多次。

destroy方法: web服务器停止或者web应用重新加载,销毁过滤器对象。

 

5)过滤器编写步骤:

5.1 编写一个java类,实现Filter接口,并实现其中的所有方法

5.1 web.xml文件中配置Filter

 

    <!-- 过滤器配置 -->

<filter>

<!-- 内部名称 -->

<filter-name>HelloFilter</filter-name>

<!-- 类全名:包+简单类名 -->

<filter-class>gz.itcast.a_hello.HelloFilter</filter-class>

</filter>

<!-- 过滤器映射配置 -->//可以配置多个,然后按照顺序依次过滤

<filter-mapping>

<!-- 内部名称,和上面的名称保持一致! -->

<filter-name>HelloFilter</filter-name>

<!-- 需要拦截的路径 -->

<url-pattern>/hello</url-pattern>

</filter-mapping>

 5.3 Filter部署到tomcat服务器运行!!!!

 

1.2 过滤器的映射路径

过滤器中的url-pattern: 表示的这个过滤器需要拦截的目标资源路径(可以servlet路径,也可以是静 态资源名称)

Servlet中的url-pattern: 表示访问这个servlet时的路径

 

url-pattern                      浏览器访问目标资源的路径

精确过滤         /hello.html                         http://localhost:8080/day21/hello.html

/itcast/hello                     http://localhost:8080/day21/itcast/hello

 

模糊过滤        /*                            http://localhost:8080/day21/任意路径

/itcast/* http://localhost:8080/day21/itcast/任意路径

*.后缀名 http://localhost:8080/day21/任意路径.后缀名

 

注意:

1url-pattern要么以斜杠开头,要么以*开头  例如: hello

2)不能同时使用两个模糊过滤。例如 /*.do 是非法的

3)如果存在多个需要被过滤的资源,可以写多个url-pattern去过滤。

4)如果是动态资源servlet,可以使用servlet的访问名称,也可以使用内部名称

 

       <!-- 使用servlet的内部名称 -->

<servlet-name>HelloServlet</servlet-name>

 

5)过滤类型:

<!-- 过滤类型:声明哪种请求才可以被拦截(过滤) -->

<dispatcher>REQUEST</dispatcher><!-- 默认:来自于直接访问的请求才可以被拦截 -->

<dispatcher>FORWARD</dispatcher><!-- 来自于转发的请求才可以被拦截 -->

<dispatcher>INCLUDE</dispatcher><!-- 来自于包含的请求才可以被拦截 -->

<dispatcher>ERROR</dispatcher><!-- 来自于错误的请求才可以被拦截 -->

 

1.3 FilterConfig对象

FilterConfig对象,过滤器配置对象,用于加载过滤器的参数配置

filterConfig.getInitParameter("AAA")////得到一个参数

Enumeration<String> enums = filterConfig.getInitParameterNames();//所有参数

 

过滤器参数使用:

1)在web.xml文件中配置

 

<!-- 过滤器配置 -->

<filter>

<!-- 内部名称 -->

<filter-name>HelloFilter</filter-name>

<!-- 类全名:包+简单类名 -->

<filter-class>gz.itcast.a_hello.HelloFilter</filter-class>

<init-param>

<param-name>AAA</param-name>

<param-value>AAA‘value</param-value>

</init-param>

<init-param>

<param-name>BBB</param-name>

<param-value>BBB‘value</param-value>

</init-param>

</filter>

 

 

1.4 FilterChain过滤器链对象

//过滤请求代码//servlet之前执行

chain.doFilter(ServletRequest request, ServletResponse response):执行过滤器链中的下一个过滤器,如果没有下一个过滤器则执行目标资源。//放行

//过滤响应代码//servlet之后执行

 

 

*****过滤器链: 一个目标资源可以被多个过滤器过滤,那么形成一个过滤器链。***

 

注意:过滤器链中的过滤器执行顺序问题:由web.xmlfilter-mapping的配置决定顺序。先配置的优先被执行。

1.5 应用-使用网页内容压缩

(使用装饰着模式requestresponse进行方法的装饰)

使用GZIPOutputStream类进行gzip压缩。

//创建临时的字节数组容器

ByteArrayOutputStream byteArr = new ByteArrayOutputStream();

//创建GZIPOutputStream对象

GZIPOutputStream gzip = new GZIPOutputStream(byteArr);

//开始写出压缩内容//sb是需要压缩的内容

gzip.write(sb.toString().getBytes());

//刷新缓冲区

gzip.finish();

 

//从临时的字节数组容器中得到压缩后的网页内容

byte[] result = byteArr.toByteArray();

/**

 * 注意:告诉浏览器数据压缩格式  发送响应头:content-encoding:gzip

 */

response.setHeader("content-encoding", "gzip");

//把压缩后的内容输出到浏览器

response.getOutputStream().write(result);

 

2 监听器

2.1 web事件编程三要素:

事件源: ServletContext ServletRequestHttpSession

事件:

对象创建或销毁:ServletContextEventServletRequestEventHttpSessionEvent

操作属性: ServletContextAttributeEventServletRequestAttributeEventHttpSessionBindingEvent

事件监听器:ServletContextListener ServletRequestListener......

2.2 步骤

1)创建java类,实现监听器接口,实现其中的方法

2)注册监听器监听器要交给tomcat服务器运行。需要在web.xml文件中进行配置

    <!-- 注册监听器 -->

<listener>

<!-- 监听器程序全名 -->

<listener-class>gz.itcast.a_context.MyContextListener</listener-class>

</listener>

3)触发事件

ServletContext对象:代表整个web应用。

创建:web应用加载

销毁:web应用重新加载或web服务停止。

ServletContext属性

增加属性: setAttribute(name,Object);  第一次就是增加属性

修改属性: setAttribute(name,Object);  如果前面有增加了同名的属性,则修改。

删除属性: removeAttribute(name);  

ServletRequest对象:封装请求信息

创建:每次发出请求时

销毁:请求完毕后

ServletRequest属性

增加属性: setAttribute(name,Object);  第一次就是增加属性

修改属性: setAttribute(name,Object);  如果前面有增加了同名的属性,则修改。

删除属性: removeAttribute(name);  

HttpSession对象:

创建:调用request.getSession()方法

销毁:

1)默认情况下,30分钟服务器自动回收

2)设置有效时长: setMaxActiveInterval();

3)配置全局的过期时间(web.xml)

4)手动销毁: invalidate()方法

HttpSession属性

增加属性: setAttribute(name,Object);  第一次就是增加属性

修改属性: setAttribute(name,Object);  如果前面有增加了同名的属性,则修改。

删除属性: removeAttribute(name);  

 

 

2.3 常用监听事件

web事件源

web事件对象

web事件监听器

ServletContext对象

 

ServletContextEvent

创建或销毁对象时触发

ServletContextListener

ServletContext属性

ServletContextAttributeEvent

属性操作(增加属性,修改属性,删除属性)

ServletContextAttributeListener

ServletRequest对象

ServletRequestEvent

创建或销毁对象时触发

ServletRequestListener

ServletRequest属性

ServletRequestAttributeEvent

属性操作(增加属性,修改属性,删除属性)

ServletRequestAttributeListener

HttpSession对象

HttpSessionEvent

创建或销毁对象时触发

HttpSessionListener

HttpSession属性

HttpSessionBindingEvent

属性操作(增加属性,修改属性,删除属性)

HttpSessionAttributeLisener

过滤器,监听器

标签:多次   remove   The   ror   html   监听   contex   简介   mes   

原文地址:https://www.cnblogs.com/fengfusheng/p/9005064.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!