java中的Filter过滤器

本文介绍了Java Web中的Filter过滤器,它作为用户请求和服务层之间的中间人,允许捕获并修改通信内容。创建过滤器需要实现Filter接口、在web.xml中注册以及设置URL映射。过滤器的核心方法doFilter在请求处理过程中执行,init和destroy则分别在web服务器启动和关闭时调用。此外,针对Java Web默认的中文乱码问题,可以通过Spring的过滤器进行字符编码转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

过滤器,顾名思义,就是横亘在用户层和服务层之间的中间人。可以用来拿到通信的内容,通常是用户的请求和响应,并且可以做修改。
要添加一个过滤器,需要三步。

  1. 实现过滤器的接口。
  2. 在web.xml中注册。
  3. 在web.xml中说明过滤的url映射
public class FilterTest implements Filter{

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

    public void doFilter(ServletRequest request, ServletResponse response,FilterChain filterChain) throws IOException, ServletException {
        // 对request、response进行一些预处理
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        System.out.println("----调用service之前执行一段代码----");
        filterChain.doFilter(request, response); // 执行目标资源,放行
        System.out.println("----调用service之后执行一段代码----");
    }

    public void init(FilterConfig arg0) {
        System.out.println("----Filter初始化----");
        String t=arg0.getInitParameter("ss");//这里可以获得在web.xml中配置的初始化参数
        System.out.println(t);
    }
}

上面是一个过滤器,有三个方法。
init和destroy分别在web服务器加载和销毁的时候被执行。
deFilter是过滤的核心方法。用法见上述代码。

配置xml代码,注意filter配置必须要放在servet之前

  <filter>
    <filter-name>filter_test</filter-name>
    <filter-class>com.yrk.domain.FilterTest</filter-class>
    <init-param>
      <param-name>ss</param-name>
      <param-value>hhhhh</param-value>
    </init-param>
  </filter>
    <!--配置过滤所有映射-->
  <filter-mapping>
    <filter-name>filter_test</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

java web默认中文会乱码。这时候我们可以使用spring中的过滤器来转码。

  <filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值