2016-05-15 12 views
8

Jak określić wiele <param-value> dla danego <param-name> pod znacznikiem servlet's <init-param>. Oto mój plik web.xml:Jak określić wiele nazw pakietów dla klas usług w usłudze sieci Web REST przy użyciu Jersey

<?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> 

Parametr jersey.config.server.provider.packages definiuje, w którym pakiet Jersey będzie wyglądać dla klas usług internetowych.

Chcę tu podać wiele nazw pakietów, ponieważ moje klasy usług znajdują się w różnych pakietach. Coś jak następujące, ale żaden z nich nie działa:

1) Multiple <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) Multiple <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> 

jaki sposób mogę to zrobić?

+0

FYI, skanowanie jest rekurencyjne. tj. 'com.vogella.jersey' skanuje oba powyższe pakiety –

Odpowiedz

14

Nie można podać wielu <param-value> dla pojedynczego <param-name>.

użycie zamiast tego:

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

;, , mogą być używane jako separatory.

+0

+1 Perfect, thanks. Czy mógłbyś zasugerować, które samouczki mogę śledzić/przeczytać, aby uzyskać więcej takich informacji? Czy byłoby to omówione w tutorialach Servlet? – Learner

+0

@Learner Najlepszym miejscem jest [dokumentacja Jersey] (https://jersey.java.net/documentation/latest/index.html) –

+0

@Learner https://www.youtube.com/user/koushks/playlists, tam są 2 doskonałe listy odtwarzania tutaj dla jax-rs. – Ramanlfc

1

W odpowiedzi na Ramanlfc można użyć "," jako separatora paczek. Na przykład:

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

Testowany pod Ubuntu 16.04.2, tomcat-8.5.11

0

Istnieje kilka sposobów, aby określić wiele nazw pakietów dla klas usług w służbie web REST korzystających Jersey. Oprócz odpowiedzi wspomnianej przez Ramanlfca działa również \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> 
Powiązane problemy