我在struts 2.3中有一个应用程序并通过'/ *'模式处理所有请求以转到web.xml中的struts应用程序 没关系,请求是struts应用程序。 但问题出在我的 struts.xml
中<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.enable.SlashesInActionNames" value="true"/>
<constant name="struts.mapper.alwaysSelectFullNamespace" value="false"/>
<package name="default" namespace="/" extends="struts-default">
<action name="en/*" class="ir.mr.khatami.action.SensationalRequestAction" method="respond">
<param name="locale">en</param>
<result name="reload">pages/sensational.jsp</result>
</action>
</package>
</struts>
我在Web.xml中
<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>
urls:localhost:8080 / en,localhost:8080 / en123没问题
但我想要这样的事情:
localhost:8080 / en / something
和
本地主机:8080 / EN /东西/更
我也试过en **和/ en **和/ en / **但没有结果。
这是我在这个网址上收到的错误localhost:8080 / en / something
HTTP状态404 - /exciting/en/pages/sensational.jsp //令人兴奋的是我的应用中的root。
答案 0 :(得分:1)
请查看
https://struts.apache.org/docs/wildcard-mappings.html
高级标题提及:
从2.1.9+中可以定义正则表达式在动作中定义 名称。要使用这种形式的通配符,必须使用以下常量 设置:
<constant name="struts.enable.SlashesInActionNames" value="true"/> <constant name="struts.mapper.alwaysSelectFullNamespace" value="false"/> <constant name="struts.patternMatcher" value="regex" />
所以你的映射必须是
<action name="en/{type}" ...
您只需将type
添加到setter和getter即可阅读操作中的String type
值。
PS:我现在无法测试,但似乎有效