映射

2014-09-21 104 views
0

在web.xml有这样一个servlet:映射

<servlet> 
     <servlet-name>Bla</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <init-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value></param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

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

和我有一个球衣滤波器和approp。 web.xml设置为:

<servlet> 
     <servlet-name>MY API</servlet-name> 
     <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> 
     <init-param> 
      <param-name>com.sun.jersey.spi.container.ContainerResponseFilters</param-name> 
      <param-value>BlaResponseFilter</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>MY API</servlet-name> 
     <url-pattern>/*</url-pattern> 
    </servlet-mapping> 

目标是将过滤器绑定到任何响应。

当然不工作由于多个servlet映射到相同的路径(/ *)

什么是另一种方式来做到这一点?我需要在生成响应时但在将请求发送给用户之前运行特殊代码。

+0

什么你试过这么远吗?最后** ContainerResponseFilter **和自定义** MessageBodyWriter **? – zyexal 2014-09-21 16:54:12

回答

0

int部署描述符中com.sun.jersey.spi.container.ContainerRequestFilters的值应该是一个实现com.sun.jersey.spi.container.ContainerRequestFilter接口的类,它必须覆盖filter方法。

所以提供价值似乎不是合法的。 regiter它

package some.package.filter; 
import com.sun.jersey.spi.container.ContainerRequest; 
import com.sun.jersey.spi.container.ContainerRequestFilter; 

public class BlaResponseFilter implements ContainerRequestFilter { 
@Override 
public ContainerRequest filter(ContainerRequest request) { 
    // you custom operations 
    return request; 
} 
} 

然后:创建你自己的过滤器

<servlet> 
    <servlet-name>MY_API</servlet-name><!-- Avoid space characters --> 
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> 
    <init-param> 
     <param-name>com.sun.jersey.spi.container.ContainerResponseFilters</param-name> 
     <param-value>some.package.filter.BlaResponseFilter</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>MY_API</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping>