1010cc时时彩标准版 > 三分时时彩1010CC > Filter的用法之声明,java之过滤器Filter

原标题:Filter的用法之声明,java之过滤器Filter

浏览次数:183 时间:2019-08-15

Filter的用法之申明,Filter用法之注脚

一、filter的定义及成效

      Filter仿佛用滤纸来过滤杂物一样,它也叫过滤器。过滤器是Servlet2.3未来新添的功能,它能够更变一个request央求也能够修改三个response。它能够在request达到Servlet从前预管理request,他也得以在response离开Servlet时管理response,总之,能够叫她Servlet链。一般意义在须臾方面:

    1.在request到达Servlet之前:    

        1)对用户的呼吁统一的证实;

        2)编码的转移;

        3)对用户发过来的多寡举办轮换,也得以拓展加密行为等。

   2.在response离开Servlet之后:

       1)修改response的头及数码等。

二、代码完毕

     首先要兑现 javax.servlet.Filter接口以及四个法子:

      1. init(FilterConfig filterConfig)-->开端化过滤器多用于获取起始化参数。

      2.doFilter(ServletRequest servletRequest , ServletResponseservletResponse , FilterChain  chain )-->过           滤管理的连锁操作都在这里产生,需求调chain.doFilter(**servletRequest ,servletResponse **)方法,把央求继续向             后传递,能够是对下四个过滤器doFilter方法的调用,可能相应的web组件。所以Filter选取了职务链设计方式。

      3.destroy() 过滤器销毁  Servlet容器在销毁过滤器实例以前该措施得到调用,以释放占用的财富。

     最终编码的兑现:

      对用户的央浼统一的注解,获取用户名,假诺用户名叫空,则调到登入分界面,不然放行。

图片 1

图片 2

@webFilter里相关属性的介绍:

     属性名                      类型                                      描述

  filterName                  String              钦赐过滤器的name属性,等价于<filter-name>

     value                     String[]            该属性等价于urlPatterns属性,两个不可能同有时候选取

    urlPatterns              String[]            钦点过滤器的U智跑L相称情势,等价于<url-pattern>

   servletNames          String[]            钦定过滤器将应用到哪些Servlet。取值是@WebServlet的name属性也许<servlet-name>的值

   dispatcherTypes      DispatcherType  内定过滤器的转载情势,取值有:ASYNC ELX570RO汉兰达 FO陆风X8WAXC60D INCLUDE REQUEST

   initParams             WebInitParam[]   内定一组过滤器初步化参数,等价于<init-Param>

   asyncSupported    boolean              钦赐过滤器是否补助异步操作形式,等价于<async-supported>

   description            String                 该过滤器的汇报消息,等价于<description>

  displayName           String                该过滤器的来得名,常常同盟工具使用,等价于<display-name>

一、filter的定义及成效 Filter就像用滤纸来过滤杂物同样,它也叫过滤器。 过滤器 是Servlet2.3后头新添...

Filter是从Servlet2.3标准开首新增添的功效,并在Servlet2.4规范中获取进步,接下去让我们一道来探视Filter的实际面目吧。

简介

转自:  ,作者写的很好,在此做一下笔录。

 

一. 概念

Filter也称之为过滤器,它是Servlet技巧中最冲动的技术,WEB开拓职员通过Filter才干,对web服务器管理的富有web财富:举个例子Jsp, Servlet, 静态图片文件或静态 html 文件等举行拦阻,进而达成部分特殊的机能。举例落到实处U昂CoraL级其他权能采访调控、过滤敏感词汇、压缩响应新闻等局地高等功能。

一、Filter的牵线及应用

Java三大器之过滤器(Filter)的办事规律和代码演示

 

一、Filter简介

  Filter也称之为过滤器,它是Servlet技艺中最动人心弦的技巧之一,WEB开采职员通过Filter技能,对web服务器管理的有着web能源:比方Jsp,
Servlet, 静态图片文件或静态html文件等展开拦阻,进而完毕部分特殊的功效。比如落到实处U猎豹CS6L级其余权位访谈调节、过滤敏感词汇、压缩响应新闻等
一些高端功用。
  Servlet API中提供了二个Filter接口,开采web应用时,假若编写的Java类达成了这一个接口,则把这一个java类称之为过滤器Filter。通过Filter
手艺,开采人士能够兑现用户在拜访有个别指标财富从前,对走访的伸手和响应进行阻挠,Filter接口源代码:

[java] view plain copy

 

  1. public abstract interface Filter{  
  2.     public abstract void init(FilterConfig paramFilterConfig) throws ServletException;  
  3.     public abstract void doFilter(ServletRequest paramServletRequest, ServletResponse paramServletResponse, FilterChain   
  4.         paramFilterChain) throws IOException, ServletException;  
  5.     public abstract void destroy();  
  6. }  

二、Filter是什么样贯彻拦阻的?(Filter的办事原理)

  Filter接口中有三个doFilter方法,当大家编辑好Filter,并配置对哪些web能源拓展拦阻后,WEB服务器每趟在调用web能源的service方法在此之前,
都会先调用一下filter的doFilter方法,因而,在该格局内编写制定代码可达到如下目标:
    调用目标能源从前,让一段代码施行。
    是不是调用指标能源(便是或不是让用户访问web能源)。
    调用指标财富之后,让一段代码试行。
  web服务器在调用doFilter方法时,会传送二个filterChain对象进来,filterChain对象是filter接口中最关键的叁个对象,它也提供了一个
doFilter方法,开荒职员能够依照须求决定是不是调用此方式,调用该情势,则web服务器就能够调用web能源的service方法,即web财富就能被访谈,
要不web能源不会被访谈。

三、Filter开采流程

3.1、Filter开采步骤
Filter开荒分为2步:
 * 编写java类实现Filter接口,并实现其doFilter方法。
 * 在web.xml 文件中接纳<filter>和<filter-mapping>成分对编写的filter类举行登记,并设置它所能拦截的能源。

过滤器表率:

 

[java] view plain copy

 

  1. import java.io.IOException;  
  2. import javax.servlet.Filter;  
  3. import javax.servlet.FilterChain;  
  4. import javax.servlet.FilterConfig;  
  5. import javax.servlet.ServletException;  
  6. import javax.servlet.ServletRequest;  
  7. import javax.servlet.ServletResponse;  
  8. /** 
  9.  * @author yangcq 
  10.  * @description 过滤器Filter的做事规律 
  11.  */  
  12. public class FilterTest implements Filter{  
  13.   
  14.     public void destroy() {  
  15.         System.out.println("----Filter销毁----");  
  16.     }  
  17.   
  18.     public void doFilter(ServletRequest request, ServletResponse response,FilterChain filterChain) throws IOException, ServletException {  
  19.         // 对request、response进行局地预处理  
  20.         request.setCharacterEncoding("UTF-8");  
  21.         response.setCharacterEncoding("UTF-8");  
  22.         response.setContentType("text/html;charset=UTF-8");  
  23.         System.out.println("----调用service从前实践一段代码----");  
  24.         filterChain.doFilter(request, response); // 奉行对象财富,放行  
  25.         System.out.println("----调用service之后试行一段代码----");  
  26.     }  
  27.   
  28.     public void init(FilterConfig arg0) throws ServletException {  
  29.         System.out.println("----Filter初始化----");  
  30.     }  
  31. }  

 

在web. xml中布局过滤器:

[html] view plain copy

 

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="3.0"   
  3.     xmlns=""   
  4.     xmlns:xsi=""   
  5.     xsi:schemaLocation="   
  6.     ;  
  7.   <display-name></display-name>      
  8.   <welcome-file-list>  
  9.     <welcome-file>index.jsp</welcome-file>  
  10.   </welcome-file-list>  
  11.   <!--配置过滤器-->  
  12.   <filter>  
  13.       <filter-name>FilterTest</filter-name>  
  14.       <filter-class>com.yangcq.filter.FilterTest</filter-class>  
  15.   </filter>  
  16.   <!--映射过滤器-->  
  17.   <filter-mapping>  
  18.       <filter-name>FilterTest</filter-name>  
  19.       <!--“/*”表示拦截全数的央浼 -->  
  20.       <url-pattern>/*</url-pattern>  
  21.   </filter-mapping>  
  22. </web-app>  

3.2、Filter链
  在四个web应用中,能够支付编写五个Filter,那几个Filter组合起来称之为多个Filter链。web服务器遵照Filter在web.xml文件中的注册顺序,
垄断(monopoly)先调用哪个Filter,当第一个Filter的doFilter方法被调用时,web服务器会创设三个象征Filter链的FilterChain对象传递给该措施。在doFilter
办法中,开荒职员假如调用了FilterChain对象的doFilter方法,则web服务器会检查FilterChain对象中是不是还恐怕有filter,若是有,则调用第3个filter,
一经未有,则调用指标财富。

四,Spring框架下,过滤器的配备
    如若项目中应用了Spring框架,那么,相当多过滤器都毫不自个儿来写了,Spring为咱们写好了部分常用的过滤器。下边大家就以字符编码的
过滤器CharacterEncodingFilter为例,来看一下Spring框架下,要是布置过滤器。

[html] view plain copy

 

  1. <filter>  
  2.     <filter-name>encodingFilter</filter-name>  
  3.     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
  4.     <init-param>  
  5.         <param-name>encoding</param-name>  
  6.         <param-value>UTF-8</param-value>  
  7.     </init-param>  
  8.     <init-param>  
  9.         <param-name>forceEncoding</param-name>  
  10.         <param-value>true</param-value>  
  11.     </init-param>  
  12. </filter>  
  13.   
  14. <filter-mapping>  
  15.     <filter-name>encodingFilter</filter-name>  
  16.     <url-pattern>/*</url-pattern>  
  17. </filter-mapping>  

非常粗略吗,那样几行安顿代码,就大功告成了从全局调整字符编码的功能。接下来,大家看一下CharacterEncodingFilter那么些过滤器的主要代码,感受
一转眼,大师的神韵,假如我们写过滤器的话,能够以此为范例。

[java] view plain copy

 

  1. package org.springframework.web.filter;  
  2. import java.io.IOException;  
  3. import javax.servlet.FilterChain;  
  4. import javax.servlet.ServletException;  
  5. import javax.servlet.http.HttpServletRequest;  
  6. import javax.servlet.http.HttpServletResponse;  
  7. import org.springframework.util.ClassUtils;  
  8. public class CharacterEncodingFilter extends OncePerRequestFilter{  
  9.     private static final boolean responseSetCharacterEncodingAvailable = ClassUtils.hasMethod(  
  10.         class$javax$servlet$http$HttpServletResponse, "setCharacterEncoding", new Class[] { String.class });  
  11.     // 需求安装的编码形式,为了匡助可安排,Spring把编码格局设置成了一个变量  
  12.     private String encoding;  
  13.     // 是或不是强制行使统一编码,也是为了扶助可陈设  
  14.     private boolean forceEncoding;  
  15.     // 构造器,在此地,Spring把forceEncoding的值暗中同意设置成了false  
  16.     public CharacterEncodingFilter(){  
  17.         this.forceEncoding = false;  
  18.     }  
  19.     // encoding/forceEncoding的setter方法  
  20.     public void setEncoding(String encoding){  
  21.         this.encoding = encoding;  
  22.     }  
  23.     public void setForceEncoding(boolean forceEncoding){  
  24.         this.forceEncoding = forceEncoding;  
  25.     }  
  26.     // Spring通过GenericFilterBean抽象类,对Filter接口实行了组合,  
  27.     protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)  
  28.         throws ServletException, IOException{  
  29.         if ((this.encoding != null) && (((this.forceEncoding) || (request.getCharacterEncoding() == null)))) {  
  30.             request.setCharacterEncoding(this.encoding);  
  31.             if ((this.forceEncoding) && (responseSetCharacterEncodingAvailable)) {  
  32.                 response.setCharacterEncoding(this.encoding);  
  33.             }  
  34.         }  
  35.         filterChain.doFilter(request, response);  
  36.     }  
  37. }  

GenericFilterBean类:
public abstract class GenericFilterBean implements Filter, BeanNameAware, ServletContextAware, InitializingBean, DisposableBean

还尚未过瘾,那就再看一个项目中央银行使过的二个过滤器:InvilidCharacterFilter(防止脚本攻击的过滤器)

 

[java] view plain copy

 

  1. import java.io.IOException;  
  2. import java.util.Enumeration;  
  3. import javax.servlet.FilterChain;  
  4. import javax.servlet.RequestDispatcher;  
  5. import javax.servlet.ServletException;  
  6. import javax.servlet.http.HttpServletRequest;  
  7. import javax.servlet.http.HttpServletResponse;  
  8. import org.apache.commons.lang.StringUtils;  
  9. import org.springframework.web.filter.CharacterEncodingFilter;  
  10. /* 
  11.  * InvalidCharacterFilter:过滤request央求中的不合法字符,幸免脚本攻击 
  12.  * InvalidCharacterFilter承继了Spring框架的CharacterEncodingFilter过滤器,当然,我们也能够友善达成如此三个过滤器 
  13.  */  
  14. public class InvalidCharacterFilter extends CharacterEncodingFilter{  
  15.     // 需求过滤的违规字符  
  16.     private static String[] invalidCharacter = new String[]{  
  17.         "script","select","insert","document","window","function",  
  18.         "delete","update","prompt","alert","create","alter",  
  19.         "drop","iframe","link","where","replace","function","onabort",  
  20.         "onactivate","onafterprint","onafterupdate","onbeforeactivate",  
  21.         "onbeforecopy","onbeforecut","onbeforedeactivateonfocus",  
  22.         "onkeydown","onkeypress","onkeyup","onload",  
  23.         "expression","applet","layer","ilayeditfocus","onbeforepaste",  
  24.         "onbeforeprint","onbeforeunload","onbeforeupdate",  
  25.         "onblur","onbounce","oncellchange","oncontextmenu",  
  26.         "oncontrolselect","oncopy","oncut","ondataavailable",  
  27.         "ondatasetchanged","ondatasetcomplete","ondeactivate",  
  28.         "ondrag","ondrop","onerror","onfilterchange","onfinish","onhelp",  
  29.         "onlayoutcomplete","onlosecapture","onmouse","ote",  
  30.         "onpropertychange","onreadystatechange","onreset","onresize",  
  31.         "onresizeend","onresizestart","onrow","onscroll",  
  32.         "onselect","onstaronsubmit","onunload","IMgsrc","infarction"  
  33.     };  
  34.   
  35.     protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)  
  36.             throws ServletException, IOException{     
  37.         String parameterName = null;  
  38.         String parameterValue = null;  
  39.         // 获取诉求的参数  
  40.         @SuppressWarnings("unchecked")  
  41.         Enumeration<String> allParameter = request.getParameterNames();  
  42.         while(allParameter.hasMoreElements()){  
  43.             parameterName = allParameter.nextElement();  
  44.             parameterValue = request.getParameter(parameterName);  
  45.             if(null != parameterValue){  
  46.                 for(String str : invalidCharacter){  
  47.                     if (StringUtils.containsIgnoreCase(parameterValue, str)){  
  48.                         request.setAttribute("errorMessage", "违规字符:"   str);  
  49.                         RequestDispatcher requestDispatcher = request.getRequestDispatcher("/error.jsp");  
  50.                         requestDispatcher.forward(request, response);  
  51.                         return;  
  52.                     }  
  53.                 }  
  54.             }  
  55.         }  
  56.         super.doFilterInternal(request, response, filterChain);  
  57.     }  
  58. }  

 

 

接下去需求在web.xml中实行配置:

[html] view plain copy

 

  1. <filter>  
  2.     <filter-name>InvalidCharacterFilter</filter-name>  
  3.     <filter-class>com.yangcq.filter.InvalidCharacterFilter</filter-class>  
  4. </filter>  
  5. <filter-mapping>  
  6.     <filter-name>InvalidCharacterFilter</filter-name>  
  7.     <url-pattern>/*</url-pattern>  
  8. </filter-mapping>  

如若大家不选取Spring的CharacterEncodingFilter类,能够和睦来写。

[java] view plain copy

 

  1. import java.io.IOException;  
  2. import java.util.Enumeration;  
  3. import javax.servlet.Filter;  
  4. import javax.servlet.FilterChain;  
  5. import javax.servlet.FilterConfig;  
  6. import javax.servlet.RequestDispatcher;  
  7. import javax.servlet.ServletException;  
  8. import javax.servlet.ServletRequest;  
  9. import javax.servlet.ServletResponse;  
  10. import org.apache.commons.lang.StringUtils;  
  11. /** 
  12.  * SelfDefineInvalidCharacterFilter:过滤request央求中的违规字符,幸免脚本攻击 
  13.  */  
  14. public class SelfDefineInvalidCharacterFilter implements Filter{  
  15.   
  16.     public void destroy() {  
  17.           
  18.     }  
  19.   
  20.     public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {  
  21.         String parameterName = null;  
  22.         String parameterValue = null;  
  23.         // 获取乞请的参数  
  24.         @SuppressWarnings("unchecked")  
  25.         Enumeration<String> allParameter = request.getParameterNames();  
  26.         while(allParameter.hasMoreElements()){  
  27.             parameterName = allParameter.nextElement();  
  28.             parameterValue = request.getParameter(parameterName);  
  29.             if(null != parameterValue){  
  30.                 for(String str : invalidCharacter){  
  31.                     if (StringUtils.containsIgnoreCase(parameterValue, str)){  
  32.                         request.setAttribute("errorMessage", "不合法字符:"   str);  
  33.                         RequestDispatcher requestDispatcher = request.getRequestDispatcher("/error.jsp");  
  34.                         requestDispatcher.forward(request, response);  
  35.                         return;  
  36.                     }  
  37.                 }  
  38.             }  
  39.         }  
  40.         filterChain.doFilter(request, response); // 实践对象财富,放行  
  41.     }  
  42.   
  43.     public void init(FilterConfig filterConfig) throws ServletException {  
  44.           
  45.     }  
  46.     // 要求过滤的非官方字符  
  47.     private static String[] invalidCharacter = new String[]{  
  48.         "script","select","insert","document","window","function",  
  49.         "delete","update","prompt","alert","create","alter",  
  50.         "drop","iframe","link","where","replace","function","onabort",  
  51.         "onactivate","onafterprint","onafterupdate","onbeforeactivate",  
  52.         "onbeforecopy","onbeforecut","onbeforedeactivateonfocus",  
  53.         "onkeydown","onkeypress","onkeyup","onload",  
  54.         "expression","applet","layer","ilayeditfocus","onbeforepaste",  
  55.         "onbeforeprint","onbeforeunload","onbeforeupdate",  
  56.         "onblur","onbounce","oncellchange","oncontextmenu",  
  57.         "oncontrolselect","oncopy","oncut","ondataavailable",  
  58.         "ondatasetchanged","ondatasetcomplete","ondeactivate",  
  59.         "ondrag","ondrop","onerror","onfilterchange","onfinish","onhelp",  
  60.         "onlayoutcomplete","onlosecapture","onmouse","ote",  
  61.         "onpropertychange","onreadystatechange","onreset","onresize",  
  62.         "onresizeend","onresizestart","onrow","onscroll",  
  63.         "onselect","onstaronsubmit","onunload","IMgsrc","infarction"  
  64.     };  
  65.   
  66. }  

接下去须求在web.xml中实行安排:

[html] view plain copy

 

  1. <filter>  
  2.     <filter-name>SelfDefineInvalidCharacterFilter</filter-name>  
  3.     <filter-class>com.yangcq.filter.SelfDefineInvalidCharacterFilter</filter-class>  
  4. </filter>  
  5. <filter-mapping>  
  6.     <filter-name>SelfDefineInvalidCharacterFilter</filter-name>  
  7.     <url-pattern>/*</url-pattern>  
  8. </filter-mapping>  

五、Filter的生命周期

5.1、Filter的创建
  Filter的创始和销毁由web服务器顶住。 web应用程序运转时,web服务器将开创Filter的实例对象,并调用其init方法,实现指标的初叶化
作用,进而为后续的用户央浼作好拦截的筹划专门的学业,filter对象只会创建三次,init方法也只会执行二回。通过init方法的参数,可收获代表当前
filter配置音讯的FilterConfig对象。

5.2、Filter的销毁
  web容器调用destroy方法销毁Filter。destroy方法在Filter的生命周期中仅实践一回。在destroy方法中,能够释放过滤器使用的资源。

5.3、FilterConfig接口
  用户在配置filter时,能够应用<init-param>为filter配置部分起初化参数,当web容器实例化Filter对象,调用其init方法时,会把包装了
filter开端化参数的filterConfig对象传递步入。由此开拓人士在编排filter时,通过filterConfig对象的法子,就可收获:
  String getFilterName():得到filter的名称。
  String getInitParameter(String name): 重临在布局描述中钦命名称的初步化参数的值。假若不设有再次回到null.
  Enumeration getInitParameterNames():再次回到过滤器的具有开端化参数的名字的枚举集结。
  public ServletContext getServletContext():重临Servlet上下文对象的引用。

示范:利用FilterConfig获得filter配置消息

[java] view plain copy

 

  1. package com.yangcq.filter;  
  2. import java.io.IOException;  
  3. import java.util.Enumeration;  
  4. import javax.servlet.Filter;  
  5. import javax.servlet.FilterChain;  
  6. import javax.servlet.FilterConfig;  
  7. import javax.servlet.ServletException;  
  8. import javax.servlet.ServletRequest;  
  9. import javax.servlet.ServletResponse;  
  10. public class FilterTest implements Filter {  
  11.   
  12.     /* 过滤器开端化 
  13.      * @see javax.servlet.Filter#init(javax.servlet.FilterConfig) 
  14.      */  
  15.     @Override  
  16.     public void init(FilterConfig filterConfig) throws ServletException {  
  17.         System.out.println("----过滤器起先化----");  
  18.         /** 
  19.          *  <filter> 
  20.                   <filter-name>FilterTest</filter-name> 
  21.                   <filter-class>com.yangcq.filter.FilterTest</filter-class> 
  22.                   <!--配置FilterTest过滤器的开始化参数--> 
  23.                   <init-param> 
  24.                       <description>FilterTest</description> 
  25.                       <param-name>name</param-name> 
  26.                       <param-value>gacl</param-value> 
  27.                   </init-param> 
  28.                   <init-param> 
  29.                       <description>配置FilterTest过滤器的先导化参数</description> 
  30.                       <param-name>like</param-name> 
  31.                       <param-value>java</param-value> 
  32.                   </init-param> 
  33.             </filter> 
  34.              
  35.              <filter-mapping> 
  36.                   <filter-name>FilterDemo02</filter-name> 
  37.                   <!--“/*”表示拦截全数的伸手 --> 
  38.                   <url-pattern>/*</url-pattern> 
  39.              </filter-mapping> 
  40.          */  
  41.         //得到过滤器的名字  
  42.         String filterName = filterConfig.getFilterName();  
  43.         //得到在web.xml文件中安排的开头化参数  
  44.         String initParam1 = filterConfig.getInitParameter("name");  
  45.         String initParam2 = filterConfig.getInitParameter("like");  
  46.         //重临过滤器的具有开端化参数的名字的枚举会集。  
  47.         Enumeration<String> initParameterNames = filterConfig.getInitParameterNames();  
  48.           
  49.         System.out.println(filterName);  
  50.         System.out.println(initParam1);  
  51.         System.out.println(initParam2);  
  52.         while (initParameterNames.hasMoreElements()) {  
  53.             String paramName = (String) initParameterNames.nextElement();  
  54.             System.out.println(paramName);  
  55.         }  
  56.     }  
  57.   
  58.     @Override  
  59.     public void doFilter(ServletRequest request, ServletResponse response,  
  60.             FilterChain chain) throws IOException, ServletException {  
  61.         System.out.println("FilterDemo02执行前!!!");  
  62.         chain.doFilter(request, response);  //让目的能源施行,放行  
  63.         System.out.println("FilterDemo02执行后!!!");  
  64.     }  
  65.   
  66.     @Override  
  67.     public void destroy() {  
  68.         System.out.println("----过滤器销毁----");  
  69.     }  
  70. }  

六、Filter的配置时的一些参数的意思

Filter的陈设分为七个步骤:
  1、注册Filter
  2、映射Filter

6.1、注册Filter
  开拓好Filter之后,需求在web.xml文件中开始展览注册,那样手艺够被web服务器调用。在web.xml文件中注册Filter表率:

[html] view plain copy

 

  1. <filter>  
  2.     <description>过滤器名称</description>  
  3.     <filter-name>自定义的名字</filter-name>  
  4.     <filter-class>com.yangcq.filter.FilterTest</filter-class>  
  5.     <!--配置FilterTest过滤器的初阶化参数-->  
  6.     <init-param>  
  7.         <description>配置过滤器的伊始化参数</description>  
  8.         <param-name>name</param-name>  
  9.         <param-value>gacl</param-value>  
  10.     </init-param>  
  11.     <init-param>  
  12.         <description>配置FilterTest过滤器的起首化参数</description>  
  13.         <param-name>like</param-name>  
  14.         <param-value>java</param-value>  
  15.     </init-param>  
  16. </filter>  

    <description>用于增加描述音讯,该因素的开始和结果可为空,<description>能够不布置。
  <filter-name>用于为过滤器钦赐一个名字,该因素的剧情不可能为空。
  <filter-class>元素用于钦命过滤器的完全的范围类名。
  <init-param>成分用于为过滤器钦命起初化参数,它的子成分<param-name>钦点参数的名字,<param-value>钦命参数的值。在过滤器中,
能够行使FilterConfig接口对象来探望初叶化参数。假使过滤器无需钦赐伊始化参数,那么<init-param>成分得以不配备。

6.2、映射Filter
  在web.xml文件中注册了Filter之后,还要在web.xml文件中映射Filter
<!--映射过滤器-->
  <filter-mapping>
      <filter-name>FilterTest</filter-name>
      <!--“/*”表示拦截全体的呼吁 -->
      <url-pattern>/*</url-pattern>
  </filter-mapping>

<filter-mapping>成分用于安装一个 Filter 所担当拦截的财富。一个Filter拦截的财富可通过三种办法来钦赐:Servlet 名称和财富访谈的伸手路线
  <filter-name>子成分用于安装filter的注册名称。该值必须是在<filter>成分中证明过的过滤器的名字
  <url-pattern>设置 filter 所拦截的央浼路线(过滤器关联的URubiconL样式)
  <servlet-name>钦点过滤器所拦截的Servlet名称。
  <dispatcher>内定过滤器所拦截的能源被 Servlet 容器调用的章程,能够是REQUEST,INCLUDE,FOTucsonWA冠道D和ELX570ROXC90之一,私下认可REQUEST。用户能够安装五个<dispatcher> 子成分用来内定 Filter 对能源的四种调用格局开始展览拦阻。如下:

<filter-mapping>
    <filter-name>testFilter</filter-name>
    <url-pattern>/index.jsp</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
</filter-mapping>

 <dispatcher> 子元素得以安装的值及其意义:
    REQUEST:当用户一贯访谈页面时,Web容器将会调用过滤器。假使目的能源是由此RequestDispatcher的include()或forward()方法访谈
时,那么该过滤器就不会被调用。
    INCLUDE:假诺目的能源是透过RequestDispatcher的include()方法访问时,那么该过滤器将被调用。除此而外,该过滤器不会被调用。
    FOEvoqueWAPRADOD:假使指标能源是通过RequestDispatcher的forward()方法采访时,那么该过滤器将被调用,除却,该过滤器不会被调用。
    E福特ExplorerRO普拉多:假如指标财富是经过评释式分外管理体制调用时,那么该过滤器将被调用。除外,过滤器不会被调用。

    过滤器便是在源数据和目标数据里面起过滤效果的高级中学级组件。对Web应用来讲,过滤器是叁个驻留在服务器端的Web组件,它能够截取客户端和能源之间的央浼与响应消息,并对那一个新闻举行过滤。

Filter手艺是servlet 2.3新添的功效。它亦可对Servlet容器的呼吁和响应对象实行反省和更动。

怎么是过滤器?

 

Filter本身并不成形央求和响应对象,只是提供过滤效果。

  与Servlet相似,过滤器是局地web应用程序组件,能够绑定到二个web应用程序中。不过与别的web应用程序组件差别的是,过滤器是"链"在容器的处理进度中的。那就表示它们会在servlet管理器以前访谈三个进来的呼吁,何况在外发响应信息再次来到到客户前拜会这几个响应音信。这种访问使得过滤器能够检查并修改央求和响应的剧情。

二. 实践流程

Filter能够在Servlet被调用在此之前检查Request对象,并修改Request Header和Request内容;在Servlet被调用之后检查Response对象,修改Response Header和Response的内容。

 

    当Web容器接受到二个对财富的央浼时,它就能够咬定是不是有过滤器与这一个财富相关联(那是多个机关的历程)。假若有,那么容器将把央求提交过滤器举行拍卖。在过滤器中,你能够改造央浼的原委,也许再度安装须要的报头消息,然后再将呼吁发送给指标财富。当目标财富对诉求作出响应时候,容器一样会将响应先转载给过滤器,再过滤器中,你能够对响应的故事情节开始展览转变,然后再将响应发送到客户端.。

Filter能够过滤的Web组件包蕴Servlet,JSP和HTML等文件。

过滤器适用于这个地点?

    假若有多个过滤器,则它会像叁个链(依照web.xml中的地方)同样举办。

Servlet API中提供了三个Filter接口,开垦web应用时,要是编写的Java类完结了那些接口,则把这么些java类称之为过滤器Filter。通过Filter本事,开垦职员可以兑现用户在会见某些指标能源以前,对拜望的伏乞和响应实行阻拦。

  1)为贰个web应用程序的新效用建模(可被增多到web应用程序中要么从web应用程序中删去而没有供给重写基层应用程序代码);

    大家先看三个图:

图片 3

  2)向过去的代码增添新功效。

 图片 4

 

 

 

 

过滤器放在容器结构的什么样岗位?

三. 实例及深入分析

图片 5

  过滤器放在web能源在此之前,能够在乞求到达它所利用的web能源(能够是三个Servlet、贰个Jsp页面,以至是多少个HTML页面)在此之前截获踏向的呼吁,况兼在它回到到客户以前截获输出央浼。Filter:用来阻止乞求,处于客户端与被呼吁财富之间,目标是援用代码。Filter链,在web.xml中哪些先配备,哪个就先调用。在filter中也得以安顿部分开头化参数。

    大家来看一个记名的事例,它须求用到五个过滤器,二个是退换编码格式,八个是剖断是还是不是登入。

 

 

    先看一下以此例子的时序图:

2.Filter的做事原理

Java中的Filter 实际不是三个标准的Servlet ,它不能够管理用户须求,也不可能对客户端生成响应。 重要用来对HttpServletRequest 实行预管理,也足以对HttpServletResponse 实行后甩卖,是个非凡的管理链。

 图片 6

   当客户端发出Web财富的诉求时,Web服务器按关照用程序配置文件设置的过滤法则实行反省,若客户央求满足过滤法则,则对客户央浼/响应举办阻拦,对央求头和央浼数据举办检查或更改,并逐个通过过滤器链,最终把要求/响应交给央求的Web财富管理。央浼新闻在过滤器链中得以被涂改,也能够依照典型让央求不发往能源管理器,并一直向客户机发回二个响应。当能源管理器完毕了对财富的拍卖后,响应新闻将逐级逆向再次回到。同样在那个进程中,用户能够修改响应音讯,进而成就一定的职务。

Filter 有如下多少个用处:

 

   三个过滤器同期过滤四个呼吁时,将在用到过滤链FilterChain。Filter的FilterChain中,服务器会遵照web.xml中过滤器定义的主次循序组装成一条链,然后叁遍进行在这之中的doFilter()方法。推行的逐一就疑似下图所示,试行第一个过滤器的chain.doFilter()以前的代码,第1个过滤器的chain.doFilter()在此以前的代码,诉求的能源,第3个过滤器的chain.doFilter()之后的代码,第二个过滤器的chain.doFilter()之后的代码,最终回来响应。

       在HttpServletRequest 达到Servlet 从前,拦截客户的HttpServletRequest 。

接下去大家看一下源码:

图片 7

       依据须要检查HttpServletRequest ,也得以修改HttpServletRequest 头和数目。

   login.jsp

 

  在HttpServletResponse 达到客户端此前,拦截HttpServletResponse 。

[java] <pre class="java" name="code"><%@ page language="java" contentType="text/html; charset=GB18030" 
    pageEncoding="GB18030"%> 
<% 
    String command = request.getParameter("command"); 
    if ("login".equals(command)) { 
        if ("dan".equals(request.getParameter("userId")) 
                && "123".equals(request.getParameter("password"))) { 
 
            //登入成功将用户消息放到session中  
            session.setAttribute("user_name", 
                    request.getParameter("userId")); 
 
            //设置超时,单位:秒  
            session.setMaxInactiveInterval(6000); 
 
            //重定向到主要调节页面  
            response.sendRedirect(request.getContextPath() "/main.jsp"); 
        } 
    } 
%> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=GB18030"> 
<title>登录</title> 
<SCRIPT language=JavaScript> 
    function init() { 
        loginForm.userId.focus(); 
    } 
 
</SCRIPT> 
</head> 
<body onload=init()> 
    <FORM name="loginForm"> 
        <input type="hidden" name="command" value="login">     
        用户名:   
        <INPUT name="userId" value="dan" type="text" size="20"   maxlength="20">  
        密   码:  
        <INPUT name="password"   value="123" type="password" size="21" maxlength="20">  
        <input type="submit" onclick="submitForm()" value="提交" name="login" id="login"> 
    </FORM> 
</body> 
</html> 
<pre class="java" name="code"><%@ page language="java" contentType="text/html; charset=GB18030"
 pageEncoding="GB18030"%>
<%
 String command = request.getParameter("command");
 if ("login".equals(command)) {
  if ("dan".equals(request.getParameter("userId"))
    && "123".equals(request.getParameter("password"))) {

 

  依照需求检讨HttpServletResponse ,能够修改HttpServletResponse 头和数量。

   //登录成功将用户音讯放到session中
   session.setAttribute("user_name",
     request.getParameter("userId"));

 

 

   //设置超时,单位:秒
   session.setMaxInactiveInterval(6000);

        Filter的施行流程就是:

Filter 有如下多少个品种:

   //重定向到主控页面
   response.sendRedirect(request.getContextPath() "/main.jsp");
  }
 }
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>登录</title>
<SCRIPT language=JavaScript>
 function init() {
  loginForm.userId.focus();
 }

进行第三个过滤器的chain.doFilter()在此以前的代码——

  用户授权的Filter: Filter 肩负检查用户央求,依照供给过滤用户私行供给。

</SCRIPT>
</head>
<body onload=init()>
 <FORM name="loginForm">
  <input type="hidden" name="command" value="login"> 
  用户名: 
  <INPUT name="userId" value="dan" type="text" size="20" maxlength="20">
  密   码:
  <INPUT name="password" value="123" type="password" size="21" maxlength="20">
  <input type="submit" onclick="submitForm()" value="提交" name="login" id="login">
 </FORM>
</body>
</html>

>第贰个过滤器的chain.doFilter()从前的代码——>……——

  日志Filter: 详细记录某个特殊的用户诉求。

   CharsetEncodingFilter.java

>第n个过滤器的chain.doFilter()在此之前的代码——

  肩负解码的Filter: 包含对非规范编码的乞请解码。

[java] package filter; 
 
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 CharsetEncodingFilter implements Filter { 
 
    private String encoding; 
     
    @Override 
    public void destroy() { 
         
    } 
 
    @Override 
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, 
            FilterChain filterChain) throws IOException, ServletException { 
        //设置字符集  
        servletRequest.setCharacterEncoding(encoding); 
        filterChain.doFilter(servletRequest, servletResponse); 
         
    } 
 
    @Override 
    public void init(FilterConfig filterConfig) throws ServletException { 
        //获得初叶化参数  
        this.encoding = filterConfig.getInitParameter("encoding"); 
    } 
 

package filter;

>所乞求servlet的service()方法中的代码——>

  能改变XML 内容的XSLTFilter 等。

import java.io.IOException;

所诉求servlet的doGet()或doPost()方法中的代码——

 

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

>第n个过滤器的chain.doFilter()之后的代码——>……——

二个Filter 可担任拦截四个乞请或响应:三个央浼或响应也可被五个Filter拦截。

public class CharsetEncodingFilter implements Filter {

>第4个过滤器的chain.doFilter()之后的代码——

创造三个Filter 只需四个步骤: 
(1)创建Filter 处理类;

 private String encoding;
 
 @Override
 public void destroy() {
  
 }

>第一个过滤器的chain.doFilter()之后的代码。

(2)在web.xml 文件中布局Filter 。

 @Override
 public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
   FilterChain filterChain) throws IOException, ServletException {
  //设置字符集
  servletRequest.setCharacterEncoding(encoding);
  filterChain.doFilter(servletRequest, servletResponse);
  
 }

 

 

 @Override
 public void init(FilterConfig filterConfig) throws ServletException {
  //取得开头化参数
  this.encoding = filterConfig.getInitParameter("encoding");
 }

 

创办Filter 必须完成javax.servlet.Filter 接口,在该接口中定义了四个章程。 
• void init(FilterConfig config): 用于达成Filter 的初叶化。 
• void destroy(): 用于Filter 销毁前,完毕某个能源的回收。 
• void doFilter(ServletRequest request, ServletResponse response,FilterChain chain): 实现过滤效果,该措施正是对各种必要及响应扩充的附加管理。

}
 
   AuthFilter.java

3、Filter生命周期

 

[java] package filter; 
 
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 javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.http.HttpSession; 
 
public class AuthFilter implements Filter { 
 
    public void destroy() { } 
 
    public void doFilter(ServletRequest request, ServletResponse response, 
            FilterChain chain) throws IOException, ServletException { 
        HttpServletRequest req = (HttpServletRequest) request; 
        HttpServletResponse res = (HttpServletResponse) response; 
        String requestURI = req.getRequestURI().substring( 
                req.getRequestURI().indexOf("/", 1), 
                req.getRequestURI().length()); 
        if (!"/login.jsp".equals(requestURI)) { 
            HttpSession session = req.getSession(false); 
            if (session == null || session.getAttribute("user_name") == null) { 
                res.sendRedirect(req.getContextPath() "/login.jsp"); 
                return; 
            } 
        } 
        // 继续访谈别的财富  
        chain.doFilter(req, res); 
    } 
 
    public void init(FilterConfig filterConfig) throws ServletException {} 
 

package filter;

     1> 和Servlet一样Filter的创导和销毁也是由WEB服务器担当。可是与Servlet分歧的是,它是1>在接纳运营的时候就张开装载Filter类(与Servlet的load-on-startup配置作用等同)。

过滤器Filter也负有生命周期

import java.io.IOException;

     2>容器创立好Filter对象实例后,调用init()方法。接着被Web容器保存进应用级的集合容器中去了等候着,用户访谈财富。

  init()->doFilter()->destroy(),由安排文件中的filter成分驱动。在servlet2.4中,过滤器一样能够用来须要分派器,但须在web.xml中扬言,<dispatcher>INCLUDE或FO奥迪Q5WALX570D或REQUEST或E奥迪Q5RO福睿斯</dispatcher>该因素位于filter-mapping中。

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 javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

     3>当用户访谈的财富正好被Filter的url-pattern拦截时,容器会收取Filter类调用doFilter方法,下次或频仍会见被阻止的财富时,Web容器会一直抽出钦赐Filter对象实例调用doFilter方法(Filter对象常驻留Web容器了)。

 

public class AuthFilter implements Filter {

     4>当应用服务被结束或另行装载了,则会实践Filter的destroy方法,Filter对象销毁。

FilterConfig接口

 public void destroy() { }

在意:init方法与destroy方法只会平昔一回。

  用户在安插filter时,能够选用为filter配置部分开首化参数,当web容器实例化Filter对象,调用其init方法时,会把包装了filter开始化参数的filterConfig对象传递步向。因而开辟职员在编排filter时,通过filterConfig对象的艺术,就可获得以下内容:

 public void doFilter(ServletRequest request, ServletResponse response,
   FilterChain chain) throws IOException, ServletException {
  HttpServletRequest req = (HttpServletRequest) request;
  HttpServletResponse res = (HttpServletResponse) response;
  String requestURI = req.getRequestURI().substring(
    req.getRequestURI().indexOf("/", 1),
    req.getRequestURI().length());
  if (!"/login.jsp".equals(requestURI)) {
   HttpSession session = req.getSession(false);
   if (session == null || session.getAttribute("user_name") == null) {
    res.sendRedirect(req.getContextPath() "/login.jsp");
    return;
   }
  }
  // 继续访问别的财富
  chain.doFilter(req, res);
 }

 

  String getFilterName();//得到filter的名称。

 public void init(FilterConfig filterConfig) throws ServletException {}

也足以老妪能解:

String getInitParameter(String name);//返回在部署描述中指定名称的初始化参数的值。如果不存在返回null.

}  

(1)实例化:Web容器在布置Web应用程序时对负有过滤器进行实例化。Web容器回调它的无参构造方法。

Enumeration getInitParameterNames();//返回过滤器的所有初始化参数的名字的枚举集合。

Web.xml

(2)初阶化:实例化实现现在,立刻开始展览起始化专门的工作。Web容器回调init()方法。

public ServletContext getServletContext();//返回Servlet上下文对象的引用。

  

(3)过滤:诉求路线相称过滤器的U奥德赛L映射时。Web容器回调doFilter()方法——主要的办事措施。

 

[html] <?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="" xmlns="" xmlns:javaee="" xmlns:web="" xsi:schemaLocation=" " version="2.4"> 
     
  <filter> 
    <filter-name>CharsetEncodingFilter</filter-name> 
    <filter-class>filter.CharsetEncodingFilter</filter-class> 
    <init-param> 
      <param-name>encoding</param-name> 
      <param-value>GB18030</param-value> 
    </init-param> 
  </filter> 
  <filter-mapping> 
    <filter-name>CharsetEncodingFilter</filter-name> 
    <url-pattern>*.jsp</url-pattern> 
  </filter-mapping> 
  <filter-mapping> 
    <filter-name>CharsetEncodingFilter</filter-name> 
    <url-pattern>/servlet/*</url-pattern> 
  </filter-mapping> 
   
  <filter> 
    <filter-name>AuthFilter</filter-name> 
    <filter-class>filter.AuthFilter</filter-class> 
  </filter> 
  <filter-mapping> 
    <filter-name>AuthFilter</filter-name> 
    <url-pattern>*.jsp</url-pattern> 
  </filter-mapping> 
   
  <filter-mapping> 
    <filter-name>AuthFilter</filter-name> 
    <url-pattern>/servlet/*</url-pattern> 
  </filter-mapping> 
     
</web-app> 
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="" xmlns="" xmlns:javaee="" xmlns:web="" xsi:schemaLocation=" " version="2.4">
   
  <filter>
    <filter-name>CharsetEncodingFilter</filter-name>
    <filter-class>filter.CharsetEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>GB18030</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>CharsetEncodingFilter</filter-name>
    <url-pattern>*.jsp</url-pattern>
  </filter-mapping>
  <filter-mapping>
   <filter-name>CharsetEncodingFilter</filter-name>
   <url-pattern>/servlet/*</url-pattern>
  </filter-mapping>
 
  <filter>
   <filter-name>AuthFilter</filter-name>
   <filter-class>filter.AuthFilter</filter-class>
  </filter>
  <filter-mapping>
   <filter-name>AuthFilter</filter-name>
   <url-pattern>*.jsp</url-pattern>
  </filter-mapping>
 
  <filter-mapping>
   <filter-name>AuthFilter</filter-name>
   <url-pattern>/servlet/*</url-pattern>
  </filter-mapping>
   
</web-app>

(4)销毁: Web容器在卸载Web应用程序前,Web容器回调destroy()方法。

Filter常用的风貌:

Filter中重视有多个方法init(),doFilter(),destroy()

 

例一、  日志的笔录,当有要求达到时,在该过滤器中张开日志的笔录。管理到位后,步向持续的Filter也许管理。

  1.init(FilterConfigfilterConfig)    

4,Filter的部署

步骤1:编写Filter类

    Web容器调用该格局该形式来伊始化过滤器。容器在调用该方法时,向过滤器传递

分为三个步骤:

package test.filter;

FilterConfig对象,利用FilterConfig对象能够收获ServletContext对象,以及配备描述符中配置的过滤器的早先化参数。图片 8

  1、注册Filter

 

 

        <description>用于加多描述音信,该因素的内容可为空,<description>能够不配备。

import javax.servlet.Filter;

从图中得以看出来Listener,Filter,Servlet及汤姆cat的一个起始顺序。

  <filter-name>用于为过滤器内定二个名字,该因素的开始和结果不可能为空。

import javax.servlet.FilterChain;

    2.doFilter(ServletRequestrequest, ServletResponse response,FilterChain chain)

  <filter-class>成分用于钦点过滤器的一体化的限制类名。

import javax.servlet.FilterConfig;

    这是Filter的要害措施,在那之中的request和response和servlet里的参数同样,至于chain是用以末端对央求的转化的,该参数的chain.doFilter方法是一种回调进度。

  <init-param>成分用于为过滤器钦赐起初化参数,它的子成分<param-name>内定参数的名字,<param-value>钦定参数的值。在过滤器中,能够行使FilterConfig接口对象来做客初阶化参数。假设过滤器无需钦命早先化参数,那么<init-param>成分得以不配备。

import javax.servlet.ServletContext;

    该办法以chain.doFilter()为界限,先实施前边的代码,然后实施chain.doFilter()方法来将呼吁传递给下贰个Filter(若无Filter了就传递给Servlet),等到那条链实行完后,再往回推行后边的代码,它是行使回调来贯彻的。   

 

import javax.servlet.ServletRequest;

     大家能够透过上面包车型客车图来开始展览精通:

  2、映射Filter

import javax.servlet.ServletResponse;

 图片 9

在web.xml文件中注册了Filter之后,还要在web.xml文件中映射Filter

import javax.servlet.http.HttpServletRequest;

 

 <!--映射过滤器-->

 

3.destroy()

    <filter-mapping>

public class LogFilter implements Filter { 

     这一个方式servlet的destroy()方法一致,都以当服务器断开的时候才试行该销毁方法,Filter也是实例化三回,多次调用。

       <filter-name>FilterDemo02</filter-name>

    private FilterConfig config; 

 

         <!--“/*”表示拦截所有的央求 -->

    // 实现伊始化方法 

摘自 赵何丹的专辑

         <url-pattern>/*</url-pattern>

    public void init(FilterConfig config) { 

    </filter-mapping>

        this.config = config; 

<filter-mapping>成分用于安装三个 Filter 所肩负拦截的财富。三个Filter拦截的能源可经过三种办法来钦点:Servlet 名称和能源访谈的央浼路线

    } 

  <filter-name>子成分用于安装filter的挂号名称。该值必须是在<filter>成分中声称过的过滤器的名字

    // 实现销毁方法 

  <url-pattern>设置 filter 所拦截的央浼路线(过滤器关联的U揽胜L样式)

    public void destroy() { 

  <servlet-name>钦点过滤器所拦截的Servlet名称。

        this.config = null

  <dispatcher>钦点过滤器所拦截的能源被 Servlet 容器调用的不二等秘书技,能够是REQUEST,INCLUDE,FOOdysseyWAPRADOD和EPRADORO君越之一,暗中同意REQUEST。

    } 

用户能够安装五个<dispatcher> 子成分用来内定 Filter 对能源的多样调用格局开始展览拦阻。如下:

    public void doFilter(ServletRequest request, ServletResponse response, 

      <filter-mapping>

            FilterChain chain) { 

                 <filter-name>testFilter</filter-name>

        // 获取ServletContext 对象,用于记录日志 

                       <url-pattern>/index.jsp</url-pattern>

        ServletContext context = this.config.getServletContext(); 

本文由1010cc时时彩标准版发布于三分时时彩1010CC,转载请注明出处:Filter的用法之声明,java之过滤器Filter

关键词:

上一篇:【1010cc时时彩标准版】动态代理,javase基础回顾

下一篇:没有了