2016-03-01 47 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標籤的子標籤開始。 –