第3.57课 上课 Servlet深入介绍, Filter过滤器介绍
3_57

Servlet深入介绍
Filter过滤器介绍
Filter过滤器可以对Servlet、JSP和HTML文件过滤。
过滤器在实际开发中用得较多,是属于较重点的内容。
Servlet过滤器是在Java Servlet规范2.3中定义的,它能够对Servlet容器的请求和响应对象进行检查和修改。
Servlet过滤器本身并不生成请求和响应对象,它只提供过滤作用。
Servlet过滤器能够在Servlet被调用之前检查Request对象,修改Request Header和Request内容。
在Servlet被调用之后检查Response对象,修改Response Header和Response内容。
Servlet过滤器负责过滤的Web组件可以是Servlet、JSP或HTML文件。
过滤器的处理过程是一个链式的过程(FilterChain),即多个过滤器组成一个链,依次处理,最后交给过滤器之后的资源。
其中链式过滤过程中也可以直接给出响应,即返回,而不是向后传递。
Filter与Servlet的区别在于:
Filter不能直接向用户生成响应。
完整的流程是:Filter对用户请求进行预处理,接着将请求交给 Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理。

为什么要学习Filter
用户授权的Filter:Filter负责检查用户请求,根据请求过滤用户非法请求。
日志Filter:详细记录某些特殊的用户请求。
负责解码的Filter:包括对非标准编码的请求解码。
实现
实现javax.servlet.Filter接口

web.xml添加一个配置,增加filter和filter-mapping元素

FilterChain作用:执行完一个过滤器以后,如果要继续执行,则需要调用过滤器链

1.服务器会把所有匹配URL的过滤器全部拿出来执行,其中执行的顺序按照web.xml文件中配置上下顺序执行。
2.如果不执行FilterChain.doFilter方法的话,相当于把过滤器链给打断。
3.如果过滤器链被打断,那么最后的实际资源将不会再被执行,相当于每个过滤器链最后一个节点,始终是指实际的资源。
///=====================
CharsetEncodingFilter.doFilter(){
//.....预处理
chain.doFilter();
//~~~~~后处理
}
chain.doFilter(){
权限过滤器.doFilter();
}
权限过滤器.doFilter(){
//.....预处理
if(无权访问){
//重定向到登录页面/或者提示页面
} else {
chain.doFilter();
}
//~~~~~后处理
}
chain.doFilter(){
//因为后面没有过滤器了,所以执行实际的资源
XXXXServlet.service();
}
浙公网安备 33010602011771号