过滤器中的web.xml文件的配置:
<filter>
<filter-name>AFilter</filter-name>
<filter-class>包名.过滤器名</filter-class>
</filter>
<filter-mapping>
<filter-name>AFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
<dispatcher>request</dispatcher>
</filter-mapping>
AFilter过滤器代码
public class AFilter implements Filter {
public void destroy() {
}
public void doFilter(ServletRequet request, ServletResponse response, FilterChain chain) throws Exception {
System.out.println("AFilter start...");
chain.doFilter(request, response);
System.out.println("AFilter end...");
}
public void init(FilterConfig arg0) throws ServletException {
}
}
四中拦截方式:
>请求:REQUEST ,默认值
>转发:FORWARD
>包含:INCLUDE
>错误:ERROR
总结:
1.在目标资源前后执行,
2.编写
*写一个类实现javax.servlet.Filter接口
* 在web.xml中进行配置
3.生命周期
*创建Filter后马上执行init(FilterConfig)
*每次过滤时都会调用doFilter(ServletRequest, ServletResponse, FilterChain)
*在注销Filter之前执行destory
*服务器在启动时会创建Filter对象,他是单例的,
*服务器在关闭时会销毁Filter对象
*FilterChain
>doFilter(ServletRequest, ServletResponse):放行!执行下一个过滤器或目标资源
*FilterConfig
>与ServletConfig相似
>ServletContext getServletContext()
>String getInitParamter(String name)
>Enumeration getInitParameterNames()
>String getFilterName()
4.多个过滤器的执行顺序
*<filter-mapping>的配置顺序决定了执行顺序
5.四种拦截方式
可见上面。
在<filter-mapping>中配置0~N个<dispatcher>元素
6.过滤器的应用场景
*预处理:不拦截,总是放行!
*校验:可能会拦截!
*后续处理:在回程中进行拦截(处理)
*过滤器中的代码往往是从多个Servlet中提取出来的共同部分!