Filter
Filter拦截请求和响应,以便查看、提取或以某种方式操作正在客户机和服务器之间交换的数据,可以改变一个请求(request)或者修改响应(respond)。用户发送请求给Servlet时,在Servlet处理请求之前,与此Servlet相关的Filter首先执行,然后才是Servlet来执行。如果一个Servlet有多个Filter,则根据配置的先后次序一次执行。Filter主要用于:
(1)访问特定资源(Web网页、JSP页、Servlet)时的身份验证
(2)访问资源的记录跟踪
(3)访问资源的转换
一个Filter必须实现接口:javax.Servlet.Filter,即实现下面几个方法:
(1)doFilter(ServletRequest,ServletResponse,FilterChain),用来实现过滤行为的方法。引入的FilterChain对象提供了后续Filter所要调用的信息。
(2)init(FilterConfig),由容器所调用的Filter初始化方法。容器确保在第一次调用doFilter()方法前调用此方法,一般用来获取在Web.xml文件中指定的初始化参数。
(3)destroy(),容器在破坏Filter实例前,doFilter()方法中的所有活动都被该实例终止后,调用此方法。
Listener
Listener用来主动监听Web容器事件(Web应用上下文创建销毁、会话对象创建销毁以及会话属性信息增删改等)通过事件监听,Listener对象可以在事件发生前、发生后进行一些必要的处理。Listener实现了Web应用的事件驱动,使得Web应用不仅可以被动的处理客户端发出的请求,而且可以主动对Web容器的变化进行响应,大大提高了Web应用的能力。
Listener接口 | Event类 |
---|---|
ServletContextListener | ServletContextEvent(上下文事件) |
ServletContextAttributeListener | ServletContextAttributeEvent(上下文属性事件) |
HttpSessionListener | HttpSessionEvent(HttpSession对象的生命周期事件) |
HttpSessionActivationListener | |
HttpSessionAttributeListener | HttpSessionBindingEvent(会话绑定事件) |
HttpSessionBindingListener | |
ServletRequestListener | ServletRequestEvent(Request的生命周期事件) |
ServletRequestAttributeListener | ServletRequestAttributeEvent(Request属性变化事件) |
javax.servlet.Asynclistener | asyncEvent(异步处理事件) |
利用上面的9类Listener接口,Web应用实现了对Web容器的请求、会话及其应用上下文三个层面上的事件的监听处理。除了HttpSessionBingListener接口和AsyncListener接口,其它所有关于Listener的配置信息都存储在Web应用的部署描述文件Web.xml中,Web容器通过此文件中的信息来决定当某个特定事件发生时,将自动地创建对应的Listener对象的实例并调用相应的接口方法进行处理。