Pregunta

quiero definir dos servlets en mi web.xml Primavera - una para las páginas HTML / JSP de aplicación, y uno para un servicio web que será llamado por una aplicación externa. Aquí está el 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 tengo myservlet utilice el DispatcherServlet en el archivo por sí mismo, trabaja muy bien. Si tengo la facilidad de servicio web con el context-param por su archivo de configuración (usuario-servicio-servlet.xml), que funciona bien. Sin embargo, si tengo tanto en el archivo, entonces el myservlet no funciona como el archivo de myservlet-servlet.xml no se carga automáticamente. Si quito el context-param, a continuación, los trabajos myservlet, pero la facilidad de servicio web no funciona, ya que es el archivo de configuración (usuario-servicio-servlet.xml) no está cargado.

¿Cómo puedo tener los dos servlets definidos y ambos de sus archivos de configuración cargado?

¿Fue útil?

Solución

Como se explica en este hilo en la lista de correo cxf-usuario, en lugar de tener la CXFServlet cargar su propio contexto surgen de user-webservice-servlet.xml, sólo puede cargar todo el lote en el contexto raíz. Cambiar el nombre de su user-webservice-servlet.xml existente a algún otro nombre (por ejemplo user-webservice-beans.xml) luego cambia de parámetro contextConfigLocation a algo como:

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

Otros consejos

Usar config algo como esto:

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

y entonces usted tendrá tres archivos:

  • applicationContext.xml;
  • myservlet-servlet.xml; y
  • user-webservice-servlet.xml.

Los archivos *-servlet.xml se utilizan automáticamente y cada uno crea un contexto de aplicación para ese servlet.

A partir de la documentación de la primavera, 13.2. El DispatcherServlet :

  

El marco, en la inicialización   de un DispatcherServlet, buscar una   archivo con el nombre [servlet-name] -servlet.xml   en el directorio WEB-INF de su Web   aplicación y crear las habas   definido allí (anulando el   las definiciones de cualquier beans definidos con   el mismo nombre en el ámbito mundial).

Sé que esto es un poco viejo, pero la respuesta en corto sería ambas apariciones han dado el mismo ID que es 1 dos veces. Esto puede confundir secuencia de carga.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top