过滤器的使用

过滤器

   过滤器是处于客户端与服务器资源文件之间的一道过滤网,在访问资源文件之前,通过一系列的过滤器对请求进行修改、判断等,把不符合规则的请求在中途拦截或修改。也可以对响应进行过滤,拦截或修改响应。

 

 

      如图,浏览器发出的请求先递交给第一个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 

   

posted @ 2019-03-28 13:19  、所剩无几  阅读(207)  评论(0编辑  收藏  举报