Struts 1.x和Struts 2.x的URL模式问题

时间:2014-09-15 14:19:05

标签: java regex struts2 xml-configuration deployment-descriptor

我的一个项目是在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中没有遗漏的内容,或者完全不可能。

我们可以解决这个问题吗?

2 个答案:

答案 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,,"/>