一、过滤器Filter概述(灰常重要)
1、过滤器就是一个保安。
2、可以对请求和响应进行拦截。
二、编写过滤的步骤
1、编写一个类,实现javax.servlet.Filter接口,这样的类一般称之为过滤器类
public class FilterDemo1 implements Filter {
// 对于用户每一次的访问,都会调用该方法
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// 拦截前
System.out.println("FilterDemo1拦截了该资源前");
// 放行: 让目标资源执行
chain.doFilter(request, response);
// 拦截后
System.out.println("FilterDemo1拦截了该资源后");
}
public void init(FilterConfig filterConfig) throws ServletException { }
public void destroy() { }
}
2、在web.xml中进行配置,要拦截哪些资源。
<filter>
<filter-name>FilterDemo1</filter-name>
<filter-class>cn.itcast.filter.FilterDemo1</filter-class>
</filter>
<filter-mapping>
<filter-name>FilterDemo1</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
三、过滤器的执行过程
多个过滤器的拦截顺序是按照web.xml中filter-mapping元素的出现顺序进行拦截的。
过滤器只会被初始化一次,应用被加载时就完成了初始化。
四、过滤器简单案例:
1. 统一全站字符编码过滤器
2. 禁止浏览器缓存所有动态页面(servlet jsp)的过滤器
3. 控制静态资源(html,css,js)的缓存时间的过滤器
4. 实现用户自动登录的过滤器
五、过滤器的高级配置 (访问WEB资源的各种方式的限制拦截情况)
<filter-mapping>
<filter-name>FilterDemo3</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher> 默认情况。如果写了另外一种情况,默认的就没有了
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
六、过滤器高级案例:
6.1 全站中文乱码过滤器(post和get方式都有效)
6.2 脏话过滤器
6.3 转义HTML标签
6.4 全站Gzip压缩(相当有难度)
七、 权限系统