[英]URL pattern issue with Struts 1.x and Struts 2.x
我的一個項目正在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中也可以正常工作。
但是,當我們要添加一些特定的URL模式時,該模式也以.do
結尾,如下所示映射到.do
。
<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
模式。 然后跟隨Struts 1過濾器映射*.do
。 所述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>
現在可以正常工作
在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,,"/>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.