Plusieurs maillot de servlets dans un seul web.xml
Est-il possible d'avoir plusieurs jersey servlets dans un seul web.xml? Je suis en train de faire la Détente gestion des versions de cette façon:
<?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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>myapi</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/context-v1.xml /WEB-INF/context-v2.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>REST-V1</servlet-name>
<servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.myapi.rest.v1</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>REST-V1</servlet-name>
<url-pattern>/v1/*</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>REST-V2</servlet-name>
<servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.myapi.rest.v2</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>REST-V2</servlet-name>
<url-pattern>/v2/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
Mais le ressort du contexte v1 et v2 doivent être chargées séparément? Parce qu'ils ont des haricots, qui ont le même nom etc.
EDIT:
Si vous regardez dans ma sortie de la console c'est le chargement des ressources (admin/info) deux fois pour chaque servlet:
15.07.2012 14:47:08 com.sun.jersey.api.core.PackagesResourceConfig init
INFO: Scanning for root resource and provider classes in the packages:
com.myapi.rest.v1
15.07.2012 14:47:08 com.sun.jersey.api.core.ScanningResourceConfig logClasses
INFO: Root resource classes found:
class com.myapi.rest.v1.LOAdminResource
class com.myapi.rest.v1.LOInfoResource
15.07.2012 14:47:08 com.sun.jersey.api.core.ScanningResourceConfig init
INFO: No provider classes found.
15.07.2012 14:47:09 com.sun.jersey.spi.spring.container.servlet.SpringServlet getContext
INFO: Using default applicationContext
15.07.2012 14:47:09 com.sun.jersey.spi.spring.container.SpringComponentProviderFactory registerSpringBeans
INFO: Registering Spring bean, adminResource_v2, of type com.myapi.rest.v2.LOAdminResource as a root resource class
15.07.2012 14:47:09 com.sun.jersey.spi.spring.container.SpringComponentProviderFactory registerSpringBeans
INFO: Registering Spring bean, infoResource_v2, of type com.myapi.rest.v2.LOInfoResource as a root resource class
15.07.2012 14:47:09 com.sun.jersey.spi.spring.container.SpringComponentProviderFactory registerSpringBeans
INFO: Registering Spring bean, adminResource_v1, of type com.myapi.rest.v1.LOAdminResource as a root resource class
15.07.2012 14:47:09 com.sun.jersey.spi.spring.container.SpringComponentProviderFactory registerSpringBeans
INFO: Registering Spring bean, infoResource_v1, of type com.myapi.rest.v1.LOInfoResource as a root resource class
15.07.2012 14:47:09 com.sun.jersey.server.impl.application.WebApplicationImpl _initiate
INFO: Initiating Jersey application, version 'Jersey: 1.8 06/24/2011 12:17 PM'
15.07.2012 14:47:09 com.sun.jersey.api.core.PackagesResourceConfig init
INFO: Scanning for root resource and provider classes in the packages:
com.myapi.rest.v2
15.07.2012 14:47:09 com.sun.jersey.api.core.ScanningResourceConfig logClasses
INFO: Root resource classes found:
class com.myapi.rest.v2.LOAdminResource
class com.myapi.rest.v2.LOInfoResource
15.07.2012 14:47:09 com.sun.jersey.api.core.ScanningResourceConfig init
INFO: No provider classes found.
15.07.2012 14:47:09 com.sun.jersey.spi.spring.container.servlet.SpringServlet getContext
INFO: Using default applicationContext
15.07.2012 14:47:09 com.sun.jersey.spi.spring.container.SpringComponentProviderFactory registerSpringBeans
INFO: Registering Spring bean, adminResource_v2, of type com.myapi.rest.v2.LOAdminResource as a root resource class
15.07.2012 14:47:09 com.sun.jersey.spi.spring.container.SpringComponentProviderFactory registerSpringBeans
INFO: Registering Spring bean, infoResource_v2, of type com.myapi.rest.v2.LOInfoResource as a root resource class
15.07.2012 14:47:09 com.sun.jersey.spi.spring.container.SpringComponentProviderFactory registerSpringBeans
INFO: Registering Spring bean, adminResource_v1, of type com.myapi.rest.v1.LOAdminResource as a root resource class
15.07.2012 14:47:09 com.sun.jersey.spi.spring.container.SpringComponentProviderFactory registerSpringBeans
INFO: Registering Spring bean, infoResource_v1, of type com.myapi.rest.v1.LOInfoResource as a root resource class
15.07.2012 14:47:09 com.sun.jersey.server.impl.application.WebApplicationImpl _initiate
INFO: Initiating Jersey application, version 'Jersey: 1.8 06/24/2011 12:17 PM'
load-on-startup devrait - si je me souviens bien - être de 1 dans les deux cas
non, ce n'est pas vrai, c'est la séquence de démarrage de l'servlets...
non, ce n'est pas vrai, c'est la séquence de démarrage de l'servlets...
OriginalL'auteur Ben | 2012-07-12
Vous devez vous connecter pour publier un commentaire.
Oui, vous pouvez spécifier deux ou plusieurs servlets dans un web.xml . N'oubliez pas de spécifier un autre servlet-mapping pour chacun.
la initParameter loadOnStartup définit l'ordre dans lequel la servlet sont chargés (dans ce cas, la première servletOne et puis servletTwo).
mmm... étrange, car u ai défini deux packages différents... en alternative, vous pouvez essayer de définir le Serveur et le Servlet par programmation (comme le code défini ici stackoverflow.com/questions/11210734/... en vertu de Démarrer le Serveur Android Activité)
Ce n'est pas la bonne réponse! Le printemps va charger tous les annoté de la classe qu'il trouve dans le contexte principal, peu importe ce que vous mettez ici. Vous aurez deux servlets qui va servir exactement les mêmes choses. Méfiez-vous et essayez! La bonne réponse est ci-dessus...
OriginalL'auteur Giorgio
Le truc, c'est que lorsque vous utilisez Jersey et les ressorts, le Jersey/Printemps servlet passe par tous disponible au Printemps les haricots et les registres de toutes les ressources et les classes de fournisseur, il trouvera parmi eux.
Si vous avez plusieurs Jersey/le Printemps des servlets en utilisant le même (racine) contexte et donc le partage de haricot définitions, puis la procédure est effectuée pour chaque servlet et de ressources et de fournisseur de classe sont enregistrés plusieurs fois.
Afin d'éviter de multiples enregistrement de la même haricot, définir les haricots dans un contexte enfant d'une Jesrey/Printemps servlet.
Il est même pas nécessaire de fournir des paramètres d'initialisation pour la déclaration des classes dans l'web.xml à moins qu'un mélange de Printemps-géré et Jersey-classes gérées est nécessaire.
OriginalL'auteur pgiecek
Je sais que ce sujet est vieux de réponse. Mais ma réponse peut aider les autres.
Nous pouvons configurer plusieurs ensembles de ressources en web.xml avec ces délimiteurs :
Exemple :
OriginalL'auteur Emin Javadov
Une possibilité est de remplacer une méthode
com.sun.jersey.spi.spring.container.servlet.SpringServlet
. L'initié méthode ressemble à ceci (version 1.19.1):Si vous modifiez le code dans une sous-classe de cette manière, vous pouvez filtrer les indésirables beans spring en fonction de vos critères (par exemple nom de paquet):
Un peu hacky solution, mais travaille pour nous à la perfection.
OriginalL'auteur Gábor Lipták