请求转到Struts Dispatcher

时间:2013-04-09 08:58:01

标签: java spring spring-mvc configuration struts2

我配置了Struts 2和Spring MVC。我的web.xml如下所示。当我点击REST URL上传文件时,它会调用struts调度程序而不是Spring。

网址/rest/uploadfile/iec9.pdf将转到Struts Dispatcher

<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>

<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

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

<servlet-mapping>
<servlet-name>springmvc-dispatcher</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/springmvc-dispatcher-servlet.xml</param-value>
</context-param>

<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<filter>
<filter-name>jsonpCallbackFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>

<filter-mapping>
<filter-name>jsonpCallbackFilter</filter-name>
<url-pattern>*.json</url-pattern>
</filter-mapping>

2 个答案:

答案 0 :(得分:2)

您的spring MVC调度程序servlet映射到Struts过滤器处理的URL子集。对于在任何其他servlet之前调用的过滤器,它将具有优先权。要解决此问题,您需要配置Struts以从映射中排除某些URL。

<struts>
    <constant name="struts.action.excludePattern" value="/rest/?.*"/>
    ...

</struts>  

答案 1 :(得分:1)

在Roman的回答中,在同一项目中配置Struts和Spring MVC时,通常会使用Struts排除过滤器。发出请求后,Struts会尝试处理该请求,如果排除该请求,Spring MVC将接管并处理该请求。值得注意的是,Struts排除过滤器可以放在属性文件中,例如struts.properties。通常可以在这里使用Regex来排除一个通用短语(例如,如果您的某个类中的所有动作或控制器都具有一个公共部分,则可以使用Regex排除所有这些)。