Проблема с шаблонами URL в Struts 1.x и Struts 2.x

Один из моих проектов работает на Struts 1.x, и мы пытаемся интегрировать несколько шаблонов URL в 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 параллельно.

<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 они также работают нормально, используя распорки 2.x.

Но когда мы хотим добавить несколько конкретных шаблонов URL, который также заканчивается .do сопоставлены с Struts 2.x, как показано ниже.

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

Мы хотим, чтобы все запросы начинались с Hello*.do следует нанести на распорки 2.x, но сейчас этого не происходит.

Так что я чего-то не хватает здесь, в web.xml или вообще это невозможно.

Есть ли способ отделить нас, чтобы решить эту проблему?

2 ответа

Сначала вы должны определить фильтр 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,,"/>
Другие вопросы по тегам