您的位置:首页 > 编程语言 > Java开发

struts2的通配符使用以及路径问题浅析

2014-02-27 21:38 549 查看
相信大家一定学习过国际化,熟悉国际化的同学们可能都知道占位符。那么在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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐