• JSP入门 Filter


    Filter,它的名字是过滤器,可以批量拦截修改servlet的请求和响应。

    需要实现接口Filter

    配置

    <filter> 
    
        <filter-name>EncodingFilter</filter-name> 
    
        <filter-class>anni.EncodingFilter</filter-class> 
    
    </filter> 
    
     
    
    <filter-mapping> 
    
        <filter-name>EncodingFilter</filter-name> 
    
        <url-pattern>/*</url-pattern> 
    
    </filter-mapping>

    filter标签部分定义使用的过滤器,

    filter-mapping标签告诉服务器把哪些请求交给过滤器处理。这里的

    /*表示所有请求,

    /表示根路径,

    *(星号)代表所有请求,加在一起就变成了根路径下的所有请求。

    EncodingFilter.java,来批量设置请求编码。

    package
    
     anni; 
    
     
    
    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
    
     EncodingFilter 
    
    implements
    
     Filter { 
    
     
    
        
    
    public
    
     
    
    void
    
     init(FilterConfig config) 
    
    throws
    
     ServletException {} 
    
     
    
        
    
    public
    
     
    
    void
    
     destroy() {} 
    
     
    
        
    
    public
    
     
    
    void
    
     doFilter(ServletRequest request, 
    
                ServletResponse response, 
    
                FilterChain chain) 
    
                
    
    throws
    
     IOException, ServletException { 
    
     
    
            request.setCharacterEncoding(
    
    "gb2312"
    
    ); 
    
            chain.doFilter(request, response); 
    
        } 
    
     
    
    }

    filter控制用户访问权限

    两个点(..)代表当前路径的上一级路径

    你可以使用三种方式定义url-pattern

    1.直接映射一个请求。

    <servlet-mapping> 
    
     
        <servlet-name>ContactServlet</servlet-name> 
    
    
        <url-pattern>/contact.do</url-pattern> 
    
    
    </servlet-mapping> 


    2,映射一个路径下的所有请求。

    <servlet-mapping> 
    
        <servlet-name>EncodingFilter</servlet-name> 
    
        <url-pattern>/*</url-pattern> 
    
    </servlet-mapping>

    如果这个路径下还有子路径,那么子路径下的请求也会被过滤操作

    需要注意的是,这种写法必须以/开头,写成与绝对路径的形式,即便是映射所有请求也要写成/*,不能简化成*

    3.映射结尾相同的一类请求

    <servlet-mapping> 
    
        <servlet-name>ControllerServlet</servlet-name> 
    
        <url-pattern>*.do</url-pattern> 
    
    </servlet-mapping>

    这样做的一个好处是语义更清楚,只要看到以.do结尾的请求就知道肯定是交给ControllerServlet处理了,不管这个请求是在根路径还是子路径下,都会准确无误的找到对应的servlet。

    缺点就是不同路径之间进行forward,jsp里就不能再使用相对路径了

    过滤链

    服务器会按照web.xml中过滤器定义的先后循序组装成一条链,然后一次执行其中的doFilter()方法。

    而在实际使用时,就要特别注意过滤链的执行顺序问题,像EncodingFilter就一定要放在所有Filter之前,这样才能确保在使用请求中的数据前设置正确的编码

    filter详细配置

    <filter-mapping> 
    
        <filter-name>TestFilter</filtername> 
        <url-pattern>/*</url-pattern> 
        <dispatcher>REQUEST</dispatcher> 
        <dispatcher>FORWARD</dispatcher> 
        <dispatcher>INCLUDE</dispatcher> 
        <dispatcher>EXCEPTION</dispatcher> 
    
    </filter-mapping>


    filter过滤指定的servlet

    <
    
    filter-mapping
    
    > 
    
        <filter-name>TestFilter</filter-name> 
    
        <servlet-name>TestServlet</servlet-name> 
    
    <
    
    /filter-mapping
  • 相关阅读:
    嵌入式编程中使用 do{...} while(0) 的解释
    ESP32学习笔记(一) 环境搭建与下载
    预告:准备开个坑,集中学习一下esp32模块
    【信号与系统】多项式化简方法
    nginx二级域名代理
    nginx配置ssl证书
    springBoot使用阿里云的证书
    vue-cli3项目开启less支持并引入短链接
    一键安装系列
    centos7增加swap
  • 原文地址:https://www.cnblogs.com/Dhouse/p/3384342.html
Copyright © 2020-2023  润新知