2016-03-01 43 views
1

我与Tomcat的8新泽西Servlet的发现资源时的url-pattern为/ *,但是当url-pattern的是/

编写一个Web服务,使用泽西2.17在web.xml中无法找到资源时,我更改我的网址格式为/ *我可以访问网络服务并获得回复。 但是,当我将url模式更改为/然后我总是得到404错误(未找到资源)。

不工作

<servlet-mapping> 
    <servlet-name>jersey-servlet</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 

工作是完全

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

我的web.xml中不包含其他的Servlet或过滤器映射除了这一点。

<servlet> 
     <servlet-name>jersey-servlet</servlet-name> 
     <servlet-class> 
      org.glassfish.jersey.servlet.ServletContainer 
     </servlet-class> 
     <init-param> 
      <param-name>jersey.config.server.provider.packages</param-name> 
      <param-value>com.bandi.rest</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

是否有任何其他配置需要使这项工作? 我不能使用/ *作为servlet映射,因为我需要某些过滤器在此servlet执行之前运行。如果过滤失败,那么对servlet的调用就不应该继续。

所以基本上我不想覆盖任何已经存在的映射。

+0

@BalusC 我将现有的(300+)春泽西服务。 Spring的**“servlet.DispatcherServlet”**允许使用默认/ url-pattern。 定义/ api/*的问题在于,这些300多种服务正在被许多项目使用,并且还需要对其结尾进行更改。 即将URL更改为** http://someweb.com/api/mywebservice**而不是现有的** http://someweb.com/mywebservice**。 所以我不能改变我们与其他服务的合同。 Jersey为什么不能拥有这个功能?它可以检查任何Path的定义是否与当前的URI Path匹配。 如果不是,它会抛出404。 –

+0

我正在改变NGINX的请求URL,以便为请求添加更多字符,所以我可以继续使用/ rest/*作为url模式。 –

+0

太好了。我将其转贴为答案。 – BalusC

回答

0

尝试使用filter,而不是servletweb.xml这样的 -

<filter-mapping> 
    <filter-name>jersey-servlet</filter-name> 
    <url-pattern>/</url-pattern> 
</filter-mapping> 
+0

@ R好评 我尝试使用Jersey ServletContainer作为过滤器。 但即使这样也行不通。 简称: https://jersey.java.net/documentation/latest/deployment.html –

+0

你有没有尝试删除''? – RSatpute

+0

是的,如果不是,则服务器不会以其不是以Filter标签的子标签开始。 –

相关问题