略
Listener(监听器)
Java Web中的监听器用于监听各种变化,例如服务器的创建与销毁(ServletContext),会话的创建与销毁(Session),请求的创建与销毁(Request),以上三个域属性的更改,移出,替换,还有JavaBean的状态改变例如钝化,活化,绑定,解除绑定,一共有3+3+2=8个监听器.
创建/销毁监听器
- ServletContextListener
- HttpSessionListener
- ServletRequestListener
见名知意,分别用于监听三个对象的创建与销毁(两个方法)
属性改变监听器
- ServletContextAttributeListener
- HttpSessionAttributeListener
- ServletRequestAttributeListener
见名知意,分别用于监听三个对象的属性的添加,移除,替换(三个方法)
JavaBean的监听
- HttpSessionBindingListener
- HttpSessionActivationListener
分别是(解)绑定监听和(活)钝化监听
钝化和活化是什么?
就是序列化和反序列化,服务器正常关机时,会自动的吧Session给序列化到文件中,此操作称为钝化,服务器开机就会反序列化到内存中,称为活化.
注意:
- Tomcat的钝化和活化需要在配置文件中打开.tomcat/conf/context.xml中配置
1 | <Context> |
- JavaBean类需要实现HttpSessionActivationListener和Serializable接口
绑定和解绑定
三个域对象的setAttribute()方法表示绑定,removeAttribute()方法表示解绑,该监听器用于监听JavaBean的绑定和解绑
注意: JavaBean类需要实现HttpSessionBindingListener接口.
Filter(过滤器)
用户的请求可以通过过滤器来过滤,过滤器可以判断用户的请求的各种状态,然后进行一系列分辨,可以拦截也可以放行.
实现过程:
实现Filter接口,会有三个方法init(),destroy(),doFilter(),分别是:初始化时候调用,销毁时调用,有符合条件的请求过滤时调用.
配置Filter.
- 注解方式
- web.xml方式
主要写过滤器的名字和选择过滤器的作用范围,url可以使用
*
作为通配符来使用,还可以使用Servletname属性,表示该过滤器仅仅针对于该Servlet.当有符合过滤条件的请求时,doFilter()方法会被调用.有多个过滤器时,请求会依次(根据web.xml的map顺序)通过每个过滤器,然而响应会与请求相反的通过每个过滤器,类似于Android的事件分发机制(分发与消费).
生命周期
Filter的创建和销毁是由web服务器负责。Web应用程序启动的时候,web服务器创建Filter的实例对象。并调用其init方法进行初始化(filter对象只会创建一次,init方法也只会执行一次)。每次filter进行拦截的时候,都会执行doFilter的方法。当服务器关闭的时候,应用从服务器中移除的时候,服务器会销毁Filter对象。
FilterConfig
代表了Filter的配置,类似于ServletConfig,可以通过其获得ServletContext对象
重要的配置
- url-pattern 作用的范围
- servlet-name 拦截指定Servlet
- dispatch 默认为Request ,还可以设置为Forward(拦截转发) ,Include(拦截包含),Error(有错误时拦截).