• 过滤器


    Java Web中的Servlet过滤器与自来水被过滤的原理相似。

    Servlet过滤器主要用于对客户端的请求进行过滤,并将过滤后的资源转交给下一资源。

    1、什么是Servlet过滤器
    如下图所示,Servlet过滤器具有拦截客户端请求的功能。

    Servlet过滤器可以改变请求中的内容,来满足实际开发的需求。

    不仅客户端发送的请求需要经过过滤器的处理,服务端返回的信息也需要经过过滤器。


    当一个过滤器不足以解决实际业务需求时,就需要部署多个过滤器对业务请求进行处理,这就形成了一个过滤器链。

    2、过滤器核心对象

    2.1 Filter接口

    每一个过滤器对象都需要直接或间接实现Filter接口。Filter对象实在doFilter方法中实现过滤操作的。

    每一个Filter对象都有一个FilterConfig对象,通过FilterConfig对象Filter对象可以获取它的初始化参数。

    每一个Filter对象也都有一个ServletContext的引用,通过这个引用,Filter对象可以加载它需要的资源。

    在Filter接口中定义了三个方法,如下图所示。

    2.2 FilterConfig接口
    FilterConfig接口由Servlet容器进行实现,主要用于获取过滤器中的配置信息。

    里面定义了四个方法。

    2.3 FilterChain接口
    Filter使用FilterChain调用过滤链中的一个Filetr(过滤器)。如果调用者是过滤链中的最后一个过滤器,那么就调用过滤链后的资源。

    在FilterChain接口中只定义了一个方法。

    3、过滤器的创建与实现
    创建过滤器需要创建一个类实现javax.servlet.Filter接口,同时实现Filter接口的3个方法。
    下面代码展示了如何创建过滤器。

    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;
    
    public class MyFilter implements Filter{
        //初始化方法
        public void init(FilterConfig filterConfig) throws ServletException{
        }
        
        //过滤处理方法
        public void doFilter(ServletRequest request,ServletResponse response,
            FilterChain chain) throws IOException,ServletException{
        }
        
        //销毁
        public void destroy(){
        }
    }

    过滤器中的init()方法用于对过滤器的初始化进行处理。

    destroy()方法是过滤器的销毁方法,主要用于释放资源,对于过滤处理的业务逻辑需要编写到doFilter()方法中。

    在请求过滤处理后,需要调用chain参数的doFilter()方法将请求向下传递给下一过滤器或目标资源。

    过滤器与Servlet十分相似,在创建之后同样需要对其进行配置。过滤器的配置主要分为两个步骤:
    1、声明过滤器对象
    2、创建过滤器映射

    下面是上面创建的Filter的配置文件

    <!-- 过滤器声明 -->
    <filter>
        <!-- 过滤器的名称 -->
        <filter-name>MyFilter</filter-name>
        <!-- 过滤器完整的类名 -->
        <filter-class>com.example.MyFilter</filter-class>
    </filter>
    <!-- 过滤器映射 -->
    <filter-mapping>
        <!-- 过滤器名称 -->
        <filter-name>MyFilter</filter-name>
        <!-- 过滤器URL映射 -->
        <url-pattern>/MyFilter</url-pattern>
    </filter-mapping>

    <filter>标签用于表明过滤器对象,在这个标签中必须配置两个子元素,分别为过滤器的名称和过滤器完整类名。

    其中<filter-name>用于定义过滤器的名称,<filter-class>用于指定过滤器的完整类名。

    <filter-mapping>标签用于创建过滤器的映射,它的抓哟作用是指定Web应用中,哪些URL应用哪一个过滤器进行处理。

    在<filter-mapping>中需要指定过滤器的名称和过滤器的URL映射。

    其中<filter-name>用于定义过滤器的名称,<url-pattern>用于指定过滤器应用的URL。

  • 相关阅读:
    window在文件管理器中打开命令行窗口
    js的事件机制
    ext-css
    HTML防止input回车提交表单
    myeclipse调试代码的时候看不到变量的值和jdk源码重新编译
    MANIFEST.MF 文件内容完全详解
    Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'dll.msvcrt'
    JNA知识点
    cookie 和session 的区别
    6- js监听输入框值的即时变化onpropertychange、oninput
  • 原文地址:https://www.cnblogs.com/cuglkb/p/6670984.html
Copyright © 2020-2023  润新知