下面是关于 struts2 中 Action 名字的大小写问题的攻略:
问题描述
在 struts2 的配置文件中,Action 的名字可以大小写混用,例如:
<action name="Index" class="com.example.IndexAction">
<result>/index.jsp</result>
</action>
还可以如下定义:
<action name="index" class="com.example.IndexAction">
<result>/index.jsp</result>
</action>
两个配置是等价的,那么这样可以吗?
解答
在 Struts2 中,Action 名字的大小写不敏感,也就是说,不能同时存在两个不同大小写的相同名字的 Action。
例如,下面的配置不正确:
<action name="Index" class="com.example.IndexAction">
<result>/index.jsp</result>
</action>
<action name="index" class="com.example.IndexAction">
<result>/index.jsp</result>
</action>
上面的配置会在 Struts2 启动时抛出如下异常:
Configuration problem: There is no action mapped for namespace [/] and action name [Index] associated with context path []
示例
示例一
可以在 struts.xml 文件中定义大小写混用的 Action 名字,但是不能在 Java 代码中通过大小写混用的方式获取 Action:
// 定义大小写混用的 Action 名字
<action name="MyAction" class="com.example.MyAction">
<result>/success.jsp</result>
</action>
// 通过正确的名称获取 Action
String result = servletRequest.getParameter("action");
String actionName = (result == null || result.trim().length() == 0) ? "MyAction" : result;
// 通过错误的名称获取 Action
String actionName = "myAction"; // 注意名字大小写
ActionProxy proxy = actionProxyFactory.createActionProxy("", actionName, null, true, false); // 会抛出异常
示例二
在 Struts2 中,Action 名字的大小写不是敏感的,但是在 web.xml 中定义的 filter 名字是敏感的。因此,在 filter 配置中注意要使用正确的大小写。
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern> <!-- 这里使用大写字母URL-PATTERN -->
</filter-mapping>
总结
在 struts2 的配置文件中,Action 的名字可以大小写混用,但是不允许同时存在两个不同大小写的相同名字的 Action。在 Java 代码中获取 Action 时,一定要使用正确的 Action 名字,否则会抛出异常。同时,在 web.xml 配置文件中,filter 的名字是大小写敏感的,一定要用正确的大小写。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:关于struts2中Action名字的大小写问题浅谈 - Python技术站