过滤器的使用
过滤器
过滤器是处于客户端与服务器资源文件之间的一道过滤网,在访问资源文件之前,通过一系列的过滤器对请求进行修改、判断等,把不符合规则的请求在中途拦截或修改。也可以对响应进行过滤,拦截或修改响应。
如图,浏览器发出的请求先递交给第一个filter进行过滤,符合规则则放行,递交给filter链中的下一个过滤器进行过滤。过滤器在链中的顺序与它在web.xml中配置的顺序有关,配置在前的则位于链的前端。当请求通过了链中所有过滤器后就可以访问资源文件了,如果不能通过,则可能在中间某个过滤器中被处理掉。
在doFilter()方法中,chain.doFilter()前的一般是对request执行的过滤操作,chain.doFilter后面的代码一般是对response执行的操作。过滤链代码的执行顺序如下:
过滤器一般用于登录权限验证、资源访问权限控制、敏感词汇过滤、字符编码转换等等操作,便于代码重用,不必每个servlet中还要进行相应的操作。
下面是过滤器的简单应用:
设置过滤器:
import java.io.IOException; public class ServletFilter implements javax.servlet.Filter { private String characterEncoding = null; public void doFilter(javax.servlet.ServletRequest req, javax.servlet.ServletResponse resp, javax.servlet.FilterChain chain) throws javax.servlet.ServletException, IOException { //设置编码 req.setCharacterEncoding(characterEncoding); String str = "text/html;charset="+characterEncoding; resp.setContentType(str); chain.doFilter(req, resp); } public void init(javax.servlet.FilterConfig config) throws javax.servlet.ServletException { characterEncoding = config.getInitParameter("characterEncoding"); } public void destroy() { } }
web.xml 配置
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <filter> <filter-name>ServletFilter</filter-name> <filter-class>ServletFilter</filter-class> <init-param> <param-name>characterEncoding</param-name> <param-value>utf-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>ServletFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
配置过滤器前:
配置过滤器设置编码:
百度网盘:链接: https://pan.baidu.com/s/1ZaM5xOsWZg7qFbBDnrFZJA 提取码: 6v64