Servlet之Filter简介说明

欢喜 Servlet 发布时间:2025-06-04 15:33:51 阅读数:16788 1
下文笔者讲述Servlet之Filter简介说明,如下所示

Filter(过滤器)简介

Filter(过滤器)是 Java Web 应用中的一个核心组件,属于 Servlet 规范的一部分。
它主要用于**在请求到达 Servlet 之前或响应返回客户端之前进行拦截和处理**,
适用于日志记录、权限验证、编码设置、敏感词过滤等通用逻辑。

Filter功能说明

-请求拦截:对所有或特定的请求进行统一处理。
-响应处理:修改响应内容或头信息。
-权限控制:如登录检查、Token 验证。
-日志记录:记录访问时间、IP、请求路径等。
-字符编码:设置统一的请求/响应编码(如UTF-8)
-缓存控制:设置HTTP缓存头。

Filter生命周期

Filter 的生命周期由 Web 容器(如 Tomcat)管理,包含以下三个阶段:
方法 调用时机 说明
[init(FilterConfig config)] Web 应用启动时调用一次 初始化配置参数
[doFilter(ServletRequest request, ServletResponse response, FilterChain chain)] 每次请求都会调用 执行过滤逻辑,
调用`chain.doFilter()`继续传递请求
[destroy()] Web 应用卸载时调用一次 释放资源

Filter示例

public class EncodingFilter implements Filter {

    private String encoding = "UTF-8";

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        String configEncoding = filterConfig.getInitParameter("encoding");
        if (configEncoding != null && !configEncoding.isEmpty()) {
            encoding = configEncoding;
        }
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        request.setCharacterEncoding(encoding);
        response.setCharacterEncoding(encoding);

        // 打印访问日志
        System.out.println("请求来源 IP:" + request.getRemoteAddr());

        chain.doFilter(request, response); // 放行请求
    }

    @Override
    public void destroy() {
        // 清理资源
    }
}

Filter配置方式

 1.web.xml配置(传统方式)
 
<filter>
    <filter-name>EncodingFilter</filter-name>
    <filter-class>com.example.EncodingFilter</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>
 
 2.注解方式(Servlet 3.0+)
 
@WebFilter("/*")
public class EncodingFilter implements Filter {
    // ...
}
 

FilterChain过滤链说明

多个 Filter 可以组成一个**过滤链**,执行顺序如下:

1.按照`web.xml` 中
    `<filter-mapping>`声明顺序依次执行 `doFilter` 前半部分。
2.到达目标Servlet。
3.再按逆序执行每个Filter的`doFilter`后半部分(即响应处理部分)

示意图:
   Client → Filter1 → Filter2 → ... → Servlet → Filter2 ← Filter1 ← Client

在Spring中Filter和Interceptor区别

特性 Filter Interceptor(拦截器)
所属规范 Servlet 规范 Spring MVC 自定义
控制粒度 更粗(URL 匹配) 更细(Controller 方法级别)
是否依赖 Spring
是否能获取 Spring Bean
处理范围 所有请求(包括静态资源) 仅 Spring MVC 请求
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/Servlet/202506/327.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者