java web三大组件之filter过滤器

本文介绍了Java Web中的过滤器概念及其重要性,并通过一个字符集过滤器的实例演示了过滤器的开发过程,包括实现Filter接口、配置web.xml以及设置过滤链接。

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


过滤器是java web中相当重要的组成成分,是JavaWeb三大组件之一,它与Servlet很相似。不过过滤器有以下三条特性:

  • 过滤器是用来拦截请求的,而不是处理请求的。

  • 当用户请求某个Servlet时,会先执行部署在这个请求上的Filter,如果Filter“放行”,那么会继承执行用户请求的Servlet;如果Filter不“放行”,那么就不会执行用户请求的Servlet。

  • 其实可以这样理解,当用户请求某个Servlet时,Tomcat会去执行注册在这个请求上的Filter,然后是否“放行”由Filter来决定。可以理解为,Filter来决定是否调用Servlet!当执行完成Servlet的代码后,还会执行Filter后面的代码。

原理示意图如下
这里写图片描述

Filter开发经常有以下三个步骤:
1. 新建java类实现javax.servlet.Filter接口
2. 将新Filter实现类注册到web.xml
3. 设置url-partten,设置过滤链接

让我们以一个字符集过滤器为例,演示一下全过程
1, 新建java类实现javax.servlet.Filter接口

package common;

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 org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class CharacterFilter implements Filter {

    private Log log = LogFactory.getLog(CharacterFilter.class);// 使用Log4j输出提示信息
    String encoding="UTF-8";
    public void init(FilterConfig filterConfig) throws ServletException {
        String config=filterConfig.getInitParameter("encoding");
        log.info("字符集过滤器初始化");
        if(config!=null&&!"".equals(config)){
            encoding=config;
        }
    }

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

    }

    public void destroy() {
        // TODO Auto-generated method stub
        log.info("字符集过滤器销毁");

    }

}


2,将新Filter实现类注册到web.xml
3,设置url-partten,设置过滤链接
这里写图片描述

注册完成后,字符集过滤器就设置好了。

以上就是一个过滤器的实例,其他的过滤器都是类似的实现方法。
字符集通常的用途有:
统一全站字符编码。
登录验证。
字符过滤

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值