Filter过滤器:可以过滤(拦截)从客户端向服务器发送的请求。
过滤器的作用:
进行ip的过滤,脏话敏感词语的过滤,自动登陆,响应压缩。。。
过滤器的使用:
1.编写类实现Filter接口。
destroy()销毁
doFilter(servletRequest request,ServletResponse response,FilterChain chain)拦截过滤
eg:chain.doFilter(request,response);//执行此代码表示放行到下一个过滤器中,如果没有下一个过滤器那么到达目标资源。
init(FilterConfig filterConfig)初始化
2.配置过滤器
1 <filter> 2 <filter-name></filter-name> 3 <filter-class></filter-class> 4 </filter> 5 <filter-mapping> 6 <filter-name></filter-name> 7 <url-pattern>/*</url-pattern> //需要拦截的路径,路径编写同servlet 8 </filter-mapping>
过滤器的生命周期:
创建:服务器启动的时候就会创建
销毁:服务器关闭的时候
FilterConfig 过滤器的配置对象
获取该Filter的初始化参数【参数在web.xml中<filter>标签中设置】
String getFilterName()
String getInitParameter(String name)
Enumeration getInitParameterNames()
ServletContext getServletContext()
FilterChain 过滤器链对象
当多个过滤器对同一个请求进行过滤拦截的时候就会形成一个过滤器链。(chain.doFilter()后的代码也会执行)
过滤器链中的过滤器的执行顺序与<filter-mapping>的配置顺序有关。
filter-mapping相关配置
<url-pattern>的配置:(亦可以拦截servlet)
完全路径匹配: 以/开始
目录匹配: 以/开始 以*结束
扩展名匹配: 不能以/开始,以*开始。
<servlet-name>的配置:根据serlet的名称拦截servlet(专门拦截servlet)
<dispatcher>的配置:(该配置如有需求可以配置多个,实现拦截所有请求)
REQUEST:请求(默认值)
FORWARD:转发(拦截服务器端的请求转发)
INCLUDE:包含(拦截页面进包含别的页面)
ERROR:错误页面跳转(全局错误页面)
eg:<dispatcher>FORWARD</dispatcher>
使用过滤器实现两个案例:
1.自动登陆
2.通用的字符集编码的过滤器(处理乱码)
增强request中的getParamter方法:
继承;实则传来的时httpservletrequest这个接口的一个实现类,这个类tomcat内部自动实现的我们不知道,所以继承pass,这里无法使用;
装饰着模式;增强的类和被增强类实现相同的接口,增强的类中获得到被增强类的引用。可以使用。但是有个缺点,接口中方法太多,只需要增强一个方法,但是所有方法都要实现。
(servlet规范里面给我们已经提供了一个模板类HttpServletRequestWrapper,这个类用于增强httpservletrequest。我们只需要继承这个类,增强自己需要增强的方法即可,其他方法不用管。)
动态代理;被增强的类实现接口即可,可以使用。