2012-09-03 79 views
0

之前最后移动到的servlet S2之前欲通过2个滤波器,是滤波器1然后滤波器2为了。以下是执行这些映射的xml文件,但我不知道如何将filter-1映射到filter-2,然后映射到servlet-2。我应该如何改变这个XML来映射我的方式?映射到达一个servlet

<!-- filter tags --> 

<filter> 
    <filter-name>Filter-1</filter-name> 
    <filter-class>Filters.Filter_1</filter-class> 
</filter> 

<filter> 
    <filter-name>Filter-2</filter-name> 
    <filter-class>Filters.Filter_2</filter-class> 
</filter> 

<filter-mapping> 
    <filter-name>Filter-1</filter-name> 
    <servlet-name>s2</servlet-name> 
</filter-mapping> 

<filter-mapping> 
    <filter-name>Filter-2</filter-name> 
    <servlet-name>s2</servlet-name> 
</filter-mapping> 

<!-- end of filter tags --> 
+0

这是不工作?我看起来很好。 – jeff

回答

0

web.xml中的<filter-mapping>条目的顺序决定了它们在过滤器链中的顺序。

因此,您应该按照所需的顺序将它们链接起来。

尽管如此,使您的过滤器独立于此顺序是一个好主意。

+0

以及如何让它独立? – saplingPro

0

利用这种配置

<filter-mapping> 
    <filter-name>Filter-1</filter-name> 
    <servlet-name>/*</servlet-name> 
</filter-mapping> 

<filter-mapping> 
    <filter-name>Filter-2</filter-name> 
    <servlet-name>/*</servlet-name> 
</filter-mapping> 

如果您请求/ S2您的请求将会按照下面的步骤:

  1. 过滤器1
  2. 过滤器2
  3. S2
  4. 过滤器2
  5. 过滤器1

看一看doc

您的过滤器的代码应该是这样的:

@Override 
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, 
     ServletException { 

    try { 

     // your code for step 1 or 2 

     chain.doFilter(request, response); 

     // you code for step 4 or 5 

    } catch (Exception e) { 

     log.error("error" + e.toString()); 
    } 

} 
+0

如何在第四步和第五步中过滤2和过滤1?我没有修改响应对象 – saplingPro

+0

让我们以filter1为例。在第1步中,它执行关于'chain.doFilter(...)'的代码。在第5步,代码之后。因此,如果'chain.doFilter(...)'后面没有代码,则不会执行任何操作 – jddsantaella