天网恢恢(Filter过滤器):
可认为是Servlet的加强版本,主要对用户请求进行预处理,也可以对HttpServletResponse进行后处理,是一个典型的处理链。
Filter的几个用处:
1、在HttpServletRequest到达Servlet之前,拦截客户的HttpServletRequest
2、根据需要检查HttpServletRequest,也可以修改HttpServletRequest头和数据
3、在HttpServletResponse到达Servlet之前,拦截客户的HttpServletResponse
4、根据需要检查HttpServletResponse,也可以修改HttpServletResponse头和数据
Filter的种类:
1、用户授权的Filter:负责检查用户请求,根据请求过滤用户非法请求。
2、日志Filter:详细记录某些特殊的用户请求
3、负责解码Filter:对非标准编码的请求编码
4、能改变XML内容的XSLT Filter等
5、Filter可负责拦截多个请求或响应,一个请求和响应也可以被多个Filter拦截
创建Filter的步骤:
1、创建Filter处理类
2、web.xml文件中配置Filter(也可以使用注解@WebFilter)
Filter必须实现javax.servlet.Filter接口(三个方法):
1、void init(FilterConfig config) 负责Filter的初始化
2、void destory() 用于Filter销毁之前,完成某些资源的回收
3、void DoFilter(ServletRequest request,ServletResponse response,FilterChain chain) 实现过滤功能
对每个请求及响应增加的额外处理
配置Filter:
Servlet统称只要配置一个URL,Filter可以同时拦截多个请求的URL,所以要用到模式字符串
配置部分:
配置Filter名
配置Filter拦截URL模式
配置方式:
在Filter通过注解进行配置
在Web.xml文件中通过配置文件进行配置(和Servlet类似)
注解@WebFilter:
常用属性:
asyncSupported : 是否支持异步操作模式
dispatcherTypes: 指定哪种dispather模式的请求来进行过滤
displayName: 指定Filter的显示名
initParams: 配置Filter初始化参数
servletNames: 注定多个Servlet名称,该Filter只对这几个Servlet执行过滤
urlPatterns/value:这两个属性完全相同,都指定Filter拦截的URL
窃听风云(Listener监听器):
web应用在容器内运行会发生不断的变化,什么启动停止,session开始结束,请求到达等等。
两个步骤:
定义Listener实现类
通过注解或在web.xml文件中配置Listener
配置Listener的两种方式:
使用@WebListener注解修饰Listener实现类即可
在web.xml中使用<listener.../>元素进行配置
只要在web.xml中用listener-class指定Listener实现类即可
使用ServletContextAttributeListener:
用于监听ServletContext(application)范围内的属性的变化,一般有三个方法:
attributeAdded(ServletContextAttributeEvent event):当程序把一个属性存入application范围内时触发
attributeRemoved(ServletContextAttributeEvent event):当程序把一个属性从application范围内移除时触发
attributeReplaced(ServletContextAttributeEvent event):当程序替换一个属性从application范围内时触发
使用ServletRequestListener和ServletRequestAttributeListener:
用于监听用户的请求到达,实现方法如下:
requestInitalized(ServletRequestEvent sre):用户到达请求,被初始化时触发该方法
requestDestoryed(ServletRequestEvent sre):用户请求结束,被销毁时触发该方法
使用HttpSessionListener和HttpSessionAttributeListener:
监听session的创建和销毁,也有两个方法:
sessionCreated(HttpSessionEvent se):用户和服务器的会话开始,创建触发该方法
sessionSestory(HttpSessionEvent se):用户和服务器的会话断开,销毁触发该方法