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()
- init(FilterConfig):这是Servlet过滤器的初始化方法,Servlet容器创建Servlet过滤器实例后将调用这个方法。在这个方法中可以读取 web.xml 文件中Servlet过滤器的初始化参数
- Filter实例在Servlet容器启动后由Servlet容器自动创建,所以如果Filter出错,将导致整个web应用无法启动。
- doFilter(ServletRequest, ServletResponse,FilterChain):这个方法完成实际的过滤操作。当客户请求访问与过滤器关联的URL时,Servlet容器将先调用过滤器的doFilter方法。FilterChain参数用于访问后续过滤器
- destroy():Servlet容器在销毁过滤器实例前调用该方法,在这个方法中可以释放Servlet过滤器占用的资源
最后不要忘了在web.xml中发布:发布Servlet过滤器时,必须在web.xml文件中加入 <filter>元素和<filter-mapping>元素,和servlet差不多,当有多个Filter串联使用时,最先调用的写在最上面。
- Listener是Servlet的监听器,它可以监听客户端的请求、服务端的操作等。通过监听器,可以自动激发一些操作,比如监听在线的用户的数量,当增加一个HttpSession时,就激发 sessionCreated(HttpSessionEvent se) 方法,这样就可以给在线人数加1
Listener接口:
常用的监听接口有以下几个
- ServletContextAttributeListener监听对ServletContext属性的操作,比如增加、删除 、修改属性
- ServletContextListener监听ServletContext。当创建ServletContext时,激发contextInitialized(ServletContextEvent sce)方法;当销毁ServletContext时,激发contextDestroyed(ServletContextEvent sce)方法
- HttpSessionListener监听HttpSession 的操作。当创建一个Session时,激发 sessionCreated(HttpSessionEvent se)方法;当销毁一个Session时,激发 sessionDestroyed(HttpSessionEvent se)方法
- HttpSessionAttributeListener监听 HttpSession中的属性的操作。当在Session增加一个属性时,激发 attributeAdded(HttpSessionBindingEvent se) 方法;当在Session删除一个属性时,激发 attributeRemoved(HttpSessionBindingEven t se)方法;当在Session属性被重新设置时,激发 attributeReplaced(HttpSessionBindingEvent se) 方法
最后不要忘了在web.xml中发布:发布Listener时,必须在web.xml文件中加入 <flistener>元素(注意和servlet的区别)。