2016-05-15 17 views
8

如何爲servlet的<init-param>標籤下的給定<param-name>指定多個<param-value>。以下是我的web.xml文件:如何在使用Jersey的REST Web服務中爲服務類指定多個軟件包名稱

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> 
    <display-name>com.vogella.jersey.first</display-name> 
<servlet> 
    <servlet-name>Jersey REST Service</servlet-name> 
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
    <!-- Register resources and providers under com.vogella.jersey.first package. --> 
    <init-param> 
     <param-name>jersey.config.server.provider.packages</param-name> 
     <param-value>com.vogella.jersey.first</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>Jersey REST Service</servlet-name> 
    <url-pattern>/rest/*</url-pattern> 
    </servlet-mapping> 
</web-app> 

參數jersey.config.server.provider.packages定義了包澤西將查找Web服務類。

我想在這裏指定多個包名,因爲我的服務類位於不同的包中。喜歡的東西下面,但他們沒有工作:

1)多<param-value>

<init-param> 
    <param-name>jersey.config.server.provider.packages</param-name> 
    <param-value>com.vogella.jersey.first</param-value> 
    <param-value>com.vogella.jersey.second</param-value> 
</init-param> 

2)多<init-param>

<servlet> 
    ... 
    <init-param> 
     <param-name>jersey.config.server.provider.packages</param-name> 
     <param-value>com.vogella.jersey.first</param-value> 
    </init-param> 
    <init-param> 
     <param-name>jersey.config.server.provider.packages</param-name> 
     <param-value>com.vogella.jersey.second</param-value> 
    </init-param> 

我該怎麼辦呢?

+0

僅供參考,掃描是遞歸的。即'com.vogella.jersey'將掃描上述兩個包 –

回答

14

對於單個<param-name>,您不能指定多個<param-value>

使用這個代替:

<init-param> 
    <param-name>jersey.config.server.provider.packages</param-name> 
    <param-value>com.pack.first;com.pack.rest.second</param-value> 
</init-param> 

;,可以用作分隔符。

+0

+1完美,謝謝。你能否建議我可以關注/閱讀哪些教程以獲取更多細節?這將在Servlet教程中介紹嗎? – Learner

+0

@Learner最好的地方是[澤西文檔](https://jersey.java.net/documentation/latest/index.html) –

+0

@學習者https://www.youtube.com/user/koushks/playlists,那裏這裏是jax-rs的兩個優秀播放列表。 – Ramanlfc

1

感謝Ramanlfc的回答,您也可以使用「,」作爲包分隔符。例如:

<init-param> 
    <param-name>jersey.config.server.provider.packages</param-name> 
    <param-value>com.pkg.first,com.pkg.second</param-value> 
</init-param> 

下的Ubuntu 16.04.2測試的tomcat-8.5.11

0

有幾種方式供您指定使用在新澤西州的REST Web服務的服務類多個包名。除了Ramanlfc提到的答案外,\n也適用。

<servlet> 
    <servlet-name>Jersey REST Service</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.demo1.resources 
      com.demo2.resources 
     </param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>Jersey REST Service</servlet-name> 
    <url-pattern>/rest/*</url-pattern> 
</servlet-mapping> 
相關問題