Spring MVC:在同一Web应用程序中可能实现RESTful Web服务+ BlazeDS集成吗?


问题内容

我有一个Spring MVC Web应用程序,它通过控制器类(用@Controller注释)提供RESTful
Web服务,该类具有通过@RequestMapping批注映射到特定请求类型和签名的方法。

我试图通过以下方法将BlazeDS服务目标集成到混合中:1)将HttpFlexSession侦听器添加到web.xml,2)将flex:message-
broker和flex:remoting-destination声明添加到Spring应用程序上下文配置文件中,以及3)添加通用的/WEB-
INF/flex/services-config.xml。

上面的BlazeDS集成步骤似乎已经使我的RESTful Web服务更加完善,因为似乎不再将请求路由到控制器方法。

甚至有可能做到这一点,即拥有一个Web应用程序,其1)通过请求映射的控制器方法为HTTP请求提供服务,以及2)通过BlazeDS服务为远程对象方法调用(即来自Flex客户端)提供服务?如果是这样,那么有人可以告诉我我做错了什么吗?

在此先感谢您的帮助。


问题答案:

是的,有可能,但是需要一些额外的配置。

本质上,您需要创建两个单独的调度程序,每个调度程序具有不同的路径。

<context-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<servlet>
    <name>flex</name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet>
    <name>spring-mvc</name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>flex</servlet-name>
    <url-pattern>/messagebroker/*</url-pattern>
 </servlet-mapping>
<servlet-mapping>
    <servlet-name>spring-mvc</servlet-name>
    <url-pattern>/app/*</url-pattern>
 </servlet-mapping>

现在,对http:// yourapp / app /
somewhere的
请求将路由到Spring MVC,而对http:// yourapp /
messagebroker的
请求将通过BlazeDS路由。

另外,您需要将spring上下文文件分成三个部分:

  • 通用上下文(applicationContext.xml在上面的示例中命名)
  • 一个用于Spring MVC(spring-mvc-servlet.xml在上面的示例中命名)
  • 一种用于Flex(flex-servlet.xml在上面的示例中命名)

从Spring / BlazeDS文档中查看本节以获取更多信息。