簡體   English   中英

Struts 1.x和Struts 2.x的URL模式問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM