Filter过滤器

134 阅读1分钟

Filter过滤器

  1. 作用:过滤网站的数据,是对客户端访问资源的过滤,符合条件放行,不符合条件不放行,并且可以对目标资源访问前后进行逻辑处理,比如说:处理中文乱码问题、登录验证问题。。。
  2. Filter开发步骤:
    1. 导包(导包一定不要导错,是导javax.servlet这个Filter包)
    2. 编写过滤器 所导的包

image.png

编写的过滤器(以解决编码作为示例)

package com.study.filter;

import javax.servlet.*;
import java.io.IOException;

public class CharacterEocodingFilter implements Filter {

    //初始化
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("初始化");
    }

    //filterChain :链
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        servletRequest.setCharacterEncoding("utf-8");
        servletResponse.setCharacterEncoding("utf-8");
        servletResponse.setContentType("text/html;charset=UTF-8");
        System.out.println("before");
        filterChain.doFilter(servletRequest,servletResponse);
        System.out.println("after");
    }

    //销毁
    public void destroy() {
        System.out.println("销毁");
    }
}

注意:

  1. filterChain.doFilter(servletRequest,servletResponse); 这个代码一定要写,不然程序运行到这里就截止了。这个代码可以让我们的程序继续走下去。
  2. 过滤中的所有代码在过滤特定请求的时候都会执行
  3. 必须让过滤器继续同行
  4. 写过滤器,必须重写它的方法,init、doFilter、destroy
  1. 要使用编写的filter过滤器,必须要在web.xml文件中配置一下filter文件
    <filter>
        <filter-name>CharacterEocodingFilter</filter-name>
        <filter-class>com.study.filter.CharacterEocodingFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>CharacterEocodingFilter</filter-name>
        <url-pattern>/servlet/*</url-pattern>
    </filter-mapping>

其中,filter-mapping中的url-pattern 中填的意思是,在你的servlet包下的所有文件都会使用到这个过滤器,要注意filter-mapping映射的填写。

  1. servlet包下的文件代码
package com.study.servlet;


import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class CharacterEncoding extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().write("你好");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
}

  1. 使用filter过滤器过滤后的结果: image.png