Проблема с шаблонами 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,,"/>