1.过滤器简介
过滤器filter是对客户端的请求进行过滤,符合条件的就放行,不符合条件的就不放行,并且可以对目标资源访问访问前后进行逻辑处理(判断)
filter的作用:
1)公共代码的提取
2)可以对request和response中的方法进行加强(装饰者模式)
3)权限控制
filter步骤:
实现filter接口
书写doFilter方法
在web.xml中配置
public class QuickFilter2 implements Filter{
@Override
public void init(FilterConfig filterConfig) throws ServletException {
//初始化方法,filter创建时执行(服务器启动时)
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
chain.doFilter(request, response);//放行方法(一定要进行放行)
}
@Override
public void destroy() {
//销毁时执行的方法(服务器关闭时)
}
}
web.xml配置
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>com.imwj.web.filter.EncodingFilter</filter-class><!-- 拦截器全包名 -->
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern><!-- 拦截所有资源 -->
</filter-mapping>
2.filter的API
filter的生命周期:
服务器启动时创建filter对象,服务器关闭时销毁filter对象
filter的三个方法
init(Filterconfig):服务器启动时执行
doFilter(ServletRequest,ServletResponse,FilterCha):每次拦截到请求时执行该方法,放行chain.doFilter(request, response);
destroy():服务器销毁时执行
多个filter方法执行顺序:
web.xml中的<url-pattern>顺序
filter流程
总结:
filter的三个方法
init(Filterconfig):服务器启动时执行
doFilter(ServletRequest,ServletResponse,FilterCha):每次拦截到请求时执行该方法,放行chain.doFilter(request, response);
destroy():服务器销毁时执行
filter放行方法:重要
chain.doFilter(request, response);
filter的生命周期
Filter何时创建:服务器启动时就创建该filter对象
Filter何时销毁:服务器关闭时filter销毁
url-pattern配置时
1)完全匹配 /sertvle1
2)目录匹配 /aaa/bbb/* ----最多的
/user/*:访问前台的资源进入此过滤器
/admin/*:访问后台的资源时执行此过滤器
3)扩展名匹配 *.action *.jsp
多个filter方法执行顺序:
web.xml中的<url-pattern>顺序
dispatcher:访问的方式(了解)
REQUEST:默认值,代表直接访问某个资源时执行filter
FORWARD:转发时才执行filter
INCLUDE: 包含资源时执行filter
ERROR:发生错误时 进行跳转是执行filter