2019-04-28 Filter过滤器

2019-04-28  本文已影响0人  北街九条狗

什么是过滤器

Filter 的基本功能是对 Servlet 容器调用 Servlet 的过程进行拦截,从而在 Servlet 进行响应处理的前后实现一些特殊的功能。

Filter 程序是一个实现了 Filter 接口的 Java 类,与 Servlet 程序相似,它由 Servlet 容器进行调用和执行

Filter 程序需要在 web.xml 文件中进行注册和设置它所能拦截的资源

 <filter>
    <filter-name>hello</filter-name>
    <filter-class>com.neuedu.filter.HelloFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>hello</filter-name>
    <url-pattern>/filter</url-pattern>
  </filter-mapping>

注解方式:与servlet几乎完全一致,但是过滤器

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;


@WebFilter("/*")
public class Filter1_Encoding implements Filter {
    public Filter1_Encoding() {
        // TODO Auto-generated constructor stub
    }
    public void destroy() {
        // TODO Auto-generated method stub
    }
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        // 放行
        chain.doFilter(request, response);
    }
    public void init(FilterConfig fConfig) throws ServletException {
        // TODO Auto-generated method stub
    }
}

注意:Filter存在链式操作的,不同的过滤器可以拥有相同的映射路径,表示拦截同一个请求,先后顺序,如果是注解方式的方式是类名决定的,例如: AFilter,BFilter,AFilter会先进行拦截,再如Filter1_xxx,Filter2_xxx,Filter1_xxx会先拦截
如果是配置的方式,先配置<filter-mapping></filter-mapping>的过滤器先拦截

典型应用

统一编码字符集

上一篇下一篇

猜你喜欢

热点阅读