我的一个项目是在Struts 1.x上运行,我们正在尝试在struts 2.x上集成少量的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 parallel。
<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
中添加上述信息后,这些网址格式以.action
结尾,使用struts 2.x也能正常运行。
但是当我们要添加几个特定的网址格式时,也会以.do
结尾映射到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
中没有遗漏的内容,或者完全不可能。
我们可以解决这个问题吗?
答案 0 :(得分:0)
首先,您应该定义Struts2过滤器,并让它映射所有网址,包括/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>
答案 1 :(得分:0)
现在正在工作---
在Web.xml中 -
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
在Struts.xml ---
<constant name="struts.action.excludePattern" value="(?!/(Hello|AbcOn|Person|School).*).*\.do"/>
<constant name="struts.action.extension" value="action,do,,"/>