filter基础理论与实践

本文介绍了一种通过创建自定义拦截器(CharseEncodingFilter)来统一设置HTTP请求字符编码的方法,该拦截器继承自servlet包下的Filter类,重写了doFilter方法,实现了在Tomcat启动时初始化并自动对所有请求进行字符集转换的功能。此外,文章还讲解了如何在web.xml文件中配置拦截器,以及如何将硬编码的字符集通过init-param参数变为可配置。

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

  1. 拦截器继承的类是servlet jar包下的类,
  2. 拦截方法重写Filter 类下的doFilter方法
  3. tomcat 启动的时候初始化一次

业务:对所有请求传入的字符编码进行控制

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

/**
* Created by 邢美玲 on 2020/3/10 18:27.
* 字符集类型设置的拦截方法
* @Version 1.0
*/
public class CharseEncodingFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        // 设置字符集类型
        servletRequest.setCharacterEncoding("UTF-8");
        // 继续执行后面的内容
        filterChain.doFilter(servletRequest,servletResponse);
    }

    @Override
    public void destroy() {


    }
}
web.xml下配置拦截信息
1、filter拦截器是谁fiter-name;      路径是啥 filter-mapping
2、fiter-mapping中的url-pattern要对谁拦截
<filter>
  <filter-name>CharseEncodingFilter</filter-name>
  <filter-class>filter.CharseEncodingFilter</filter-class>
</filter>
<filter-mapping>
  <filter-name>CharseEncodingFilter</filter-name>
  <url-pattern>*.jsp</url-pattern>
</filter-mapping>

把代码中的魔法值编程可配置的:


ps:filter下可以配置属性来解决拦截器中的魔法值,也就是写死的“UTF-8”通过init-param可以变成可配置:
<filter>
  <filter-name>CharseEncodingFilter</filter-name>
  <filter-class>filter.CharseEncodingFilter</filter-class>
  <init-param>
    <param-name>encodingName</param-name>
    <param-value>UTF-16</param-value>
  </init-param>
</filter>
另外:因为filter是在tomcat中进行初始化的调用的是init方法,所以可以在拦截器的实现方法中去重写init方法,获取到配置的值encoding
private String encoding;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
   String encoding =  filterConfig.getInitParameter("encodingName");
}

xml中匹配路径的集中方式: 

精确匹配

中配置的项必须与url完全精确匹配。

<filter-mapping>

  <filter-name>CharseEncodingFilter</filter-name>

   <url-pattern>/user/addUser.action</url-pattern></servlet-mapping>

</filter-mapping>

  

路径匹配

以“/”字符开头,并以“/*”结尾的字符串用于路径匹配

<filter-mapping>

  <filter-name>CharseEncodingFilter</filter-name>

   <url-pattern>/user/*</url-pattern></servlet-mapping>

</filter-mapping>

路径以/user/开始,后面的路径可以任意。

 

扩展名匹配

以“*.”开头的字符串被用于扩展名匹配

<filter-mapping>

  <filter-name>CharseEncodingFilter</filter-name>

  <url-pattern>*.jsp</url-pattern>

</filter-mapping>

 

缺省匹配

任意路径匹配

<filter-mapping>

  <filter-name>CharseEncodingFilter</filter-name>

  <url-pattern>/</url-pattern>

</filter-mapping>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

邢美玲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值