我可以在一个应用程序中使用Spring MVC和Spring WS吗?


问题内容

基本上,有一个后端应用程序同时公开SOAP和RESTful服务。

我决定将Spring WS 1.5.8用于SOAP服务,并将
Spring MVC 3.0用于RESTful服务,因为这是一项新功能。

在阅读了有关Spring WS的一些知识之后(我是这个新手!),我们必须在Spring WS的web.xml中声明一个“
MessageDispatcherServlet”,它是一个前端控制器。

对于Spring MVC,我们应该在web.xml中声明一个“ DispatcherServlet”,它也是一个前端控制器。

对于这两个servlet,我们在web.xml中都有不同的servlet声明。

即对于Spring WS,我有

  <servlet>
  <servlet-name>springsoap</servlet-name>
  <servlet-class>org.springframework.ws.transport.http.MessageDispatcherServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
  <servlet-name>springsoap</servlet-name>
  <url-pattern>/soapservices/*</url-pattern>
  </servlet-mapping>

对于Spring MVC(RESTful),我有

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

    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/restservices/*</url-pattern>
    </servlet-mapping>

因此,我应该使用2个配置文件?一个名为springmvc-servlet.xml,另一个名为springsoap-servlet.xml?

能做到吗?


问题答案:

是的,这很好。您将与MVC相关的内容放入一个,而将WS内容放入另一个。

如果他们需要共享服务,那么最好使用ContextLoaderListenerin
声明一个共享上下文web.xml,它定义了第三个上下文,该上下文应包含共享bean(有关如何设置的示例,请参阅docs)。

MessageDispatcherServlet仅仅方便地组装一个标准DispatcherServlet和一些其他组件也一无是处。您 可以
自己声明这些组件并使用DispatcherServlet,但这很不明智。