Filter与Listener

  • Servlet过滤器是在Java Servlet规范2.3中定义的,它能够对 Servlet容器的请求和响应对象进行检查和修改。
  • Servlet过滤器本身并不生成请求和响应对象,它只提供过滤作用。
  • Servlet过滤器能够在Servlet被调用之前检查Request对象,修改 Request Header和Request内容。
  • 在Servlet被调用之后检查Response对象,修改Response Header 和Response内容。Servlet过滤器负责过滤的Web组件可以是 Servlet、JSP或HTML文件。

Filter的过滤过程:

Filter接口:

所有的Servlet 过滤器类都必须实现javax.servlet.Filter接口。这个接口含有3个过滤器类必须实现的方法: – init() – doFilter() – destroy()

  1. init(FilterConfig):这是Servlet过滤器的初始化方法,Servlet容器创建Servlet过滤器实例后将调用这个方法。在这个方法中可以读取 web.xml 文件中Servlet过滤器的初始化参数
    • Filter实例在Servlet容器启动后由Servlet容器自动创建,所以如果Filter出错,将导致整个web应用无法启动。
  2. doFilter(ServletRequest, ServletResponse,FilterChain):这个方法完成实际的过滤操作。当客户请求访问与过滤器关联的URL时,Servlet容器将先调用过滤器的doFilter方法。FilterChain参数用于访问后续过滤器
  3. destroy():Servlet容器在销毁过滤器实例前调用该方法,在这个方法中可以释放Servlet过滤器占用的资源 

最后不要忘了在web.xml中发布:发布Servlet过滤器时,必须在web.xml文件中加入 <filter>元素和<filter-mapping>元素,和servlet差不多,当有多个Filter串联使用时,最先调用的写在最上面。

 

  • Listener是Servlet的监听器,它可以监听客户端的请求、服务端的操作等。通过监听器,可以自动激发一些操作,比如监听在线的用户的数量,当增加一个HttpSession时,就激发 sessionCreated(HttpSessionEvent se) 方法,这样就可以给在线人数加1 

 Listener接口:

常用的监听接口有以下几个

  1. ServletContextAttributeListener监听对ServletContext属性的操作,比如增加、删除 、修改属性 
  2. ServletContextListener监听ServletContext。当创建ServletContext时,激发contextInitialized(ServletContextEvent sce)方法;当销毁ServletContext时,激发contextDestroyed(ServletContextEvent sce)方法
  3. HttpSessionListener监听HttpSession 的操作。当创建一个Session时,激发 sessionCreated(HttpSessionEvent se)方法;当销毁一个Session时,激发 sessionDestroyed(HttpSessionEvent se)方法
  4. HttpSessionAttributeListener监听 HttpSession中的属性的操作。当在Session增加一个属性时,激发 attributeAdded(HttpSessionBindingEvent se) 方法;当在Session删除一个属性时,激发 attributeRemoved(HttpSessionBindingEven t se)方法;当在Session属性被重新设置时,激发 attributeReplaced(HttpSessionBindingEvent se) 方法 

 最后不要忘了在web.xml中发布:发布Listener时,必须在web.xml文件中加入 <flistener>元素(注意和servlet的区别)。

posted on 2013-01-31 11:05  阿波次的  阅读(144)  评论(0编辑  收藏  举报

导航