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

Struts2框架中struts.xml文件的package标签的命名空间属性、默认action配置、result配置、Struts异常处理

2017-03-01 16:47 555 查看

一.命名空间:namespace

为了解决同一package中的不同action不能出现相同name属性值的问题,即不同package的namespace属性值不同时,就可以实现当前package中action的name属性值与其他package中的action的name属性值相同的情况。
例如:
JSP代码:
<a href=”users/addMethod.action?name=zhangsanAdd”>添加</a>
<a href=”users/showMethod.action?name=lisiShow”>展示</a>
struts.xml配置:
<package name="default" namespace="/users" extends="struts-default">
<action name="addMethod" class="com.study.test.MethodAction" method="add">
<result name="add">add.jsp</result>
</action>
<action name="showMethod" class="com. study.test.MethodAction" method="show">
<result name="show">show.jsp</result>
</action>
</package>
MethodAction类如下:

public class MethodAction extends ActionSupport{
private String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String add(){
//其他逻辑代码
return "add";
}
public String show(){
return "show";
}
}

注:如果处理某个action请求的方法返回值为SUCCESS,那么可以再配置文件的result中省略那么属性,如下:

<result>show.jsp</result><!-- 表示的就是返回值为SUCCESS时进行的操作 -->


二.配置默认action:为了提高用户对访问出错时的体验度,如:404错误

action配置代码如下:一般写在package中的最上方位置:

<default-action-ref name="defaultAction" />
<action name="defaultAction">
<result>error.jsp</result>
</action>


三.配置result:根据在struts.xml文件中的不同位置分为全局result和局部result

1.局部result:定义在action中,如下:
<action name="showMethod" class="com.study.test.MethodAction" method="show">
<result name="show">show.jsp</result>
</action>

2.全局result:定义在<global-results>中,<global-results>在package中与action同级,对所有的action都起作用。
代码如下:
<global-results>
<result> syserror.jsp</result>
</global-results>
上面result的name属性值默认为SUCCESS,所以只会处理返回值为SUCCESS的请求。
(1)发起action请求后,需要在struts.xml中查找result时先查找局部result,如果没有查找到,就再去查找全局result,最后没查找到就好报错了。
<result name="" type=""></result>

(2)name属性:表示返回的逻辑视图名,默认为SUCCESS。
(3)type属性:表示结果处理的方式,默认为dispatcher(请求跳转)
常用属性值:
type="redirect":
表示重定向处理,一般到JSP页面,但是也可以到另一个Action。

type="redirectAction":
表示重定向到另一个Action,使用该类型时,需要指定参数param(actionName,namespace)。如下:
<action name="addMethod" class="com.study.test.MethodAction">
<result name="add" type="redirectAction">
<param name="actionName">showMethod</param>
<param name="namespace">/</param>
</result>
</action>
type="chain":表示将请求下发,下面的代码能够将参数值从addMethod这个action传到showMethod这个action,在showMethod这个action中使用参数后,最终将参数传到delMethod这个action:
<action name="addMethod"class="com.study.test.MethodAction"method="add">
<result name="add" type="redirectAction">
<param name="actionName">showMethod</param>
<param name="namespace">/</param>
<!—使用<param name="参数名">参数值</param>可以将值传递给下一个action,一般建议这样使用,不建议使用<param name="参数名">action名称?参数=值 </param>的方式-->
<param name="name">zhangsan</param>
</result>
</action>
<action name="showMethod"class="com.study.test.MethodActio"method="show">
<!— 使用chain可以在当前请求处理完后将请求下发,参数也将传递过去-->
<result name="show" type="chain" >delMethod</result>
</action>
(4)配置动态result:*代表一个或者多个任意字符串
<action name="*Method"class="com.study.test.MethodActio"method="{1}">
<result name="show">{1}.jsp</result>
</action>


四.Struts异常处理:在action配置(struts.xml)中可以捕获在action处理方法中throw抛出的异常。

MethodAction类中show方法可以如下抛出异常:
public String show(){
if(name.length() >= 6){
return "showr
4000
s";
}else{
throw new RuntimeException("用户名不能少于6位");
}
}


1.全局异常处理:作用于当前package的全部action
在struts.xml中的package中的<global-exception-mappings>中配置全局异常处理:
<global-exception-mappings>
<exception-mapping result="error"exception="java.lang.Exception"/>
</global-exception-mappings>
在struts.xml中的package中的<global-results>中配置全局result:
<global-results>
<result name="error">error.jsp</result>
</global-results>
注意:上面result的那么熟悉值与exception-mapping 的result属性值对应。
2.局部异常处理:只作用于当前action
在struts.xml中的package中的action中配置局部异常处理并且配置局部result:
<action name="showMethod" class="com.study.test.MethodAction" method="show">
<result name="showrs">show.jsp</result>
<result name="error">error.jsp</result>
<exception-mapping result="error" exception="java.lang.Exception"/>
</action>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐