我的一个项目正在 Struts 1.x 上运行,我们正在尝试在 Struts 2.x 上集成一些 URL 模式。很少有 URL 也以 Abc.do
结尾。
当前 web.xml
如下所示:
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
以上模式按照 web.xml
中的定义工作正常。
现在我们在 web.xml
中添加了支持 Struts 2.x 并行的功能。
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
在 web.xml
中添加上述信息后,这些 URL 模式以 .action
结尾,它们在使用 struts 2.x 时也可以正常工作。
但是当我们想要添加一些也以 .do
结尾的特定 URL 模式映射到 Struts 2.x 时,如下所示。
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/Hello.do</url-pattern>
</filter-mapping>
我们希望所有以 Hello*.do
开头的请求都应该映射到 struts 2.x 上,但现在这还没有发生。
所以,web.xml
中缺少某些内容,或者总的来说,这是不可能的。
我们有什么办法可以解决这个问题吗?
最佳答案
首先,您应该定义 Struts2 过滤器并让它映射所有 URL,包括 /Hello*.do
模式和 *.action
模式。然后是映射 *.do
的 Struts 1 过滤器。 struts.xml
应配置为排除以 .do
结尾的模式(/Hello*.do
除外)。
struts.xml
:
<constant name="struts.action.excludePattern" value="(?!/Hello.*).*\.do"/>
<constant name="struts.action.extension" value="action,do,,"/>
web.xml
:
<!-- Struts2 configurations -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- Struts configurations -->
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
关于java - Struts 1.x 和 Struts 2.x 的 URL 模式问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25850234/