相信大家一定学习过国际化,熟悉国际化的同学们可能都知道占位符。那么在struts2中,也有类似这种的体现,那就是通配符。下面就来看看它的使用吧~
使用通配符定义action
源代码
<package name="itcast" namespace="/test" extends="struts-default">
<action name="helloworld_*" class="cn.itcast.action.HelloWorldAction" method="{1}">
<result name="success">/WEB-INF/page/hello.jsp</result>
</action>
</package>
<package name="itcast" namespace="/test" extends="struts-default">
<action name="helloworld_*" class="cn.itcast.action.HelloWorldAction" method="{1}">
<result name="success">/WEB-INF/page/hello.jsp</result>
</action>
</package>
public class HelloWorldAction{
private String message;
....
public String execute() throws Exception{
this.message = "我的第一个struts2应用";
return "success";
}
public String other() throws Exception{
this.message = "第二个方法";
return "success";
}
}
补充:
要访问other()方法,可以通过这样的URL访问:http://localhost:8080/(项目名)/test/helloworld_other.action
其他:
- 使用通配符,将配置量降到最低
-
不过,一定要遵守"约定优于配置"的原则
<action name=“*” class=“com.ambow.struts2.action.{1}Action” method=“add”></action>
- 同时,struts2还支持*/*的配置模式,在配置文件中<struts>节点下配置如下:
<constant name="struts.enable.SlashesInActionNames" value="true"></constant>
则以上配置可改写为:
<action name=“*/*” class=“com.ambow.struts2.action.{1}Action” method=“{2}”></action>
-
其中第一个“*”映射到具体的某个action类,第二个“*”映射到该类的方法。不过这里要注意的name=“*/*”,在为action取名时,默认情况下在名字中是不允许出现 斜杠 (/)的。如果想在名字中使用 斜杠 (/),就需要在struts.xml文件中通过指定:
<constant name=“struts.enable.SlashesInActionNames” value=“true” />
来打开这个功能。其实这样做还挺麻烦的,只要把action的name写成“*_*”就不存在斜杠问题了:
如:
<action name=“*_*” class=“com.ambow.struts2.action.{1}Action” method=“{2}”></action>
Struts2中的路径问题
-
Struts2中的路径问题是根据action的路径而不是jsp路径来确定,所以尽量不要使用相对路径。
-
虽然可以用redirect方式解决,但redirect方式并非必要。
-
解决办法非常简单,统一使用绝对路径。(在jsp中用request.getContextPath()方式来拿到webapp的路径)
-
或者指定basePath