在具有 1 个 web.xml 文件的单个 tomcat 实例中运行 spring mvc web 应用程序和 jaxws soap web 服务
Posted
技术标签:
【中文标题】在具有 1 个 web.xml 文件的单个 tomcat 实例中运行 spring mvc web 应用程序和 jaxws soap web 服务【英文标题】:running spring mvc web app and jaxws soap web service in single tomcat instance having 1 web.xml file 【发布时间】:2021-10-19 02:04:15 【问题描述】:我正在做一个 zoho 到 quickbooks 的集成。在其中,我为 quickbooks 桌面创建了 Web 应用程序和肥皂服务以与之通信。我的 web 应用程序可以很好地使用 spring 注释,但自动装配的注释不起作用。我想知道您是否可以保留如下 web.xml 配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
<display-name>zohoquickbooks</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<session-config>
<session-timeout>2</session-timeout>
</session-config>
<servlet>
<servlet-name>zohoquickbooksdispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/zohoquickbooks-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>zohoquickbooksdispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<listener>
<listener-class>
com.sun.xml.ws.transport.http.servlet.WSServletContextListener
</listener-class>
</listener>
<servlet>
<servlet-name>qbservice</servlet-name>
<servlet-class>
com.sun.xml.ws.transport.http.servlet.WSServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>qbservice</servlet-name>
<url-pattern>/qbservice</url-pattern>
</servlet-mapping>
</web-app>
【问题讨论】:
【参考方案1】:此配置有效。 web.xml 中的 jaxws 服务存在一个问题。实现类的对象是由 jax-ws 容器而不是由 spring 启动的,因此自动装配该类中的其他对象不起作用。您可以通过在此 URL“https://dzone.com/articles/autowiring-spring-beans-into-classes-not-managed-by-spring”中指定的方式将 Spring 托管对象转换为非 Spring 托管对象。否则,此配置工作正常。您可以在同一端口上的同一容器上运行 Web 应用程序和肥皂服务。只是url路径需要不同。
【讨论】:
以上是关于在具有 1 个 web.xml 文件的单个 tomcat 实例中运行 spring mvc web 应用程序和 jaxws soap web 服务的主要内容,如果未能解决你的问题,请参考以下文章
Java Servlets - 在 web.xml 中存储值列表(单个参数名称的多个参数值)
Servlet[jsp]的Servlet.service()引发了具有根本原因的异常无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/js