Question

Je veux définir deux servlets dans mon web.xml de printemps - un pour l'application des pages html / jsp, et un pour un service Web qui sera appelée par une application externe. Voici le web.xml:

<servlet>
  <servlet-name>myservlet</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
  <servlet-name>myservlet</servlet-name>
  <url-pattern>*.htm</url-pattern>
</servlet-mapping>

<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>WEB-INF/user-service-servlet.xml</param-value>
</context-param>

<servlet>
  <servlet-name>user-webservice</servlet-name>
  <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
  <servlet-name>user-webservice</servlet-name>
  <url-pattern>/UserService/*</url-pattern>
</servlet-mapping>

Si je myservlet utiliser le DispatcherServlet dans le fichier lui-même, il fonctionne très bien. Si je l'utilisateur-webservice avec le contexte param pour son fichier de configuration (utilisateur-service servlet.xml), il fonctionne très bien. Cependant, si j'ai à la fois dans le fichier, le myservlet ne fonctionne pas comme le fichier myservlet-servlet.xml est pas chargé automatiquement. Si je supprime le contexte param, puis les travaux de myServlet, mais l'utilisateur-webservice ne fonctionne pas comme il est le fichier de configuration (utilisateur-service servlet.xml) n'est pas chargé.

Comment puis-je avoir à la fois servlets définis et leurs deux fichiers de configuration chargés?

Était-ce utile?

La solution

Comme expliqué dans ce fil sur la liste de diffusion CxF-utilisateur, plutôt que d'avoir la CXFServlet charge son propre contexte de printemps de user-webservice-servlet.xml, vous pouvez simplement charger le tout dans le contexte racine. Renommez votre user-webservice-servlet.xml existant à un autre nom (par exemple user-webservice-beans.xml) puis modifiez votre paramètre contextConfigLocation à quelque chose comme:

<servlet>
  <servlet-name>myservlet</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
  <servlet-name>myservlet</servlet-name>
  <url-pattern>*.htm</url-pattern>
</servlet-mapping>

<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>
    /WEB-INF/applicationContext.xml
    /WEB-INF/user-webservice-beans.xml
  </param-value>
</context-param>

<servlet>
  <servlet-name>user-webservice</servlet-name>
  <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
  <load-on-startup>2</load-on-startup>
</servlet>

<servlet-mapping>
  <servlet-name>user-webservice</servlet-name>
  <url-pattern>/UserService/*</url-pattern>
</servlet-mapping>

Autres conseils

Utilisez quelque chose config comme ceci:

<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>

<listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<servlet>
  <servlet-name>myservlet</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
</servlet>

<servlet>
  <servlet-name>user-webservice</servlet-name>
  <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
  <load-on-startup>2</load-on-startup>
</servlet>

et alors vous aurez besoin de trois fichiers:

  • applicationContext.xml;
  • myservlet-servlet.xml; et
  • utilisateur webservice-servlet.xml.

Les fichiers *-servlet.xml sont automatiquement utilisés et chacun crée un contexte d'application pour cette servlet.

De la documentation du printemps, 13.2. DispatcherServlet:

  

Le cadre sera, lors de l'initialisation   d'un DispatcherServlet, chercher un   fichier nommé [servlet-name] -servlet.xml   dans le répertoire de votre WEB-INF web   application et créer les haricots   il définie (remplaçant la   les définitions des haricots définies avec   le même nom dans le champ global).

Je sais que c'est un peu vieux, mais la réponse courte serait les deux occurrences ont donné le même identifiant qui est deux fois 1. Cela peut confondre séquence de chargement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top