过滤器
1.它会在一组资源(jsp,servlet,.css,html等)的前面执行
2.它可以让请求得到目标资源,也可以不让请求达到
*过滤器有拦截的能力
过滤器如何编写
1.创建一个类实现javax.servlet.Filter
2.接下来再web.xml中进行配置
(假设存在一个AServlet,我们对AServlet进行过滤的配置如下)
<filter>
<filter-name>AFilter(过滤器名称)</filter-name>
<filter-class>cn.hpy.web.filter.AFilter(包名+类名)</filter-class>
</filter>
<filter-mapping>
<filter-name>AFilter</filter-name>
<url-pattern>/AServlet(选定的Servlet)</url-pattern>
**也可以用这种
<servlet-name>AServlet(没有斜杠是因为他是名字,并不是路径)</servlet-name>
</filter-mapping>
Filter接口中
init(FilterConfig arg0)是在创建之后马上调用
FilterConfig 中有几个方法:
* 获取初始化参数:getInitParameter()
* 获取过滤器名称:getFilterName()
*** 获取appliction:getServletContext()
doFilter(ServletRequest arg0,ServletResponse arg1,FilterChain arg0);
FilterChain中也有一个doFilter(ServletRequest arg0,ServletResponse arg1);
FilterChain中的doFilter(ServletRequest arg0,ServletResponse arg1) 实现放行 转到AServlet后再回到doFilter(ServletRequest arg0,ServletResponse arg1,FilterChain arg0);中
相当于执行了Servlet中的service方法
多过滤器
FilterChain#doFilter()方法:
执行目标资源,或是执行下一个过滤器!如果没有下一个过滤器那么执行的是目标资源,如果有,那么就执行下一个过滤器!
*多个过滤器的执行顺序
*<filter-mapping>的配置顺序决定了过滤器的执行顺序!
四种拦截方式
过滤器的四种拦截方式
<dispatcher>REQUEST</dispatcher>默认的!
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>ERROR</dispatcher>
在<filter-mapping>中进行配置!