在具有 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 服务的主要内容,如果未能解决你的问题,请参考以下文章

过滤具有 2 个相同单词的行

web.xml文件中的7个错误的安全配置

Java Servlets - 在 web.xml 中存储值列表(单个参数名称的多个参数值)

Servlet[jsp]的Servlet.service()引发了具有根本原因的异常无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/js

Laravel Eloquent ORM 中的 join()->where()

web.xml配置详解