java web三大组件之filter过滤器

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_39984761/article/details/81207307


过滤器是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,设置过滤链接
这里写图片描述

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

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

猜你喜欢

转载自blog.csdn.net/qq_39984761/article/details/81207307