1

我的一个项目是在 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映射到 Struts 2.x 结尾,如下所示。

<filter-mapping>
         <filter-name>struts2</filter-name>
         <url-pattern>/Hello.do</url-pattern>
</filter-mapping>

我们希望所有以 should 开头的请求Hello*.do都映射到 struts 2.x 上,但现在这还没有发生。

因此,这里是否缺少某些东西,web.xml或者总而言之这是不可能的。

我们有什么办法可以解决这个问题吗?

4

2 回答 2

0

首先,您应该定义 Struts2 过滤器并让它映射所有 URL,包括/Hello*.do模式和*.action模式。然后是映射的 Struts 1 过滤器*.dostruts.xml应该配置为排除以.doexcept结尾的模式/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>
于 2014-09-15T17:27:46.590 回答
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,,"/>
于 2014-09-22T14:32:12.147 回答