struts2笔记2.6

动态Result:了解

步骤一:建立DyanAction,主要代码如下:
package com.asm;

public class DynaAction extends ActionSupport {

    private String username;

    private String nextAction;

 

    public String execute() throws Exception {

       if (username.equals("admin")) {

           nextAction = "admin";

       } else if (username.equals("user")) {

           nextAction = "user";

       } else {

           nextAction = ERROR;

       }

       return SUCCESS;

    }

    ...省略get/set方法

}

步骤二、建立jsp页面dyna.jsp,主要是为了向DynaAction中传递username参数。

步骤三、相关配置如下:

<package name="dynaTest" extends="pubResult">

       <action name="dyna" class="com.asm.DynaAction">

           <result name="success" type="chain">${nextAction}</result>

       </action>

 

       <action name="admin" >

           <result>/admin.jsp</result>

       </action>

 

       <action name="user">

           <result>/user.jsp</result>

       </action>

</package>

分析:dyna.jsp把参数传递到DynaAction中去时,如果传递的值为admin,我们便设定了nextAction的值admin,在配置文件中我们通过${nextAction}(用在struts配置文件中的ognl,其实nextAction的值是存在值栈中,我们通过${}这样的形式取出。在此只作了解)来获取值便为admin,随后再继续把请求传递到下一个Action中去(此时也即admin.action),为了方便我们设定了两个ForwardActionadmin.actionuser.action。这样便可以跳到指定的jsp页面。 原理:dyna.action执行后会继续把请求传递给下一个Action,而下一个Action的到底是哪一个Action,是通过DynaAction中动态指定的,比如这里是根据传递的username的值指定。

12.异常处理

步骤一、建立struts2exception项目下,在该项目下建立登录页面login.jsp。主要代码如下:
<form action="<%=request.getContextPath() %>/login.action">

       username:<input type="username" name="username"><br>

       <input type="submit" value="login">

</form>   

步骤二、建立LoginAction,代码如下:
package com.asm;

public class LoginAction extends ActionSupport {

    private String username;

    public String execute() throws Exception {

       if (username.equals("exception")) {

           throw new ClassNotFoundException("类未被找到");

       } else if (username.equals("global")) {

           throw new Exception("全局异常");

       } else {

           return SUCCESS;

       }

    }
    ...
省力get/set方法

}

步骤三、struts.xml配置文件如下:

<struts>

    <package name="ex" extends="def">

       <action name="login" class="com.asm.LoginAction">

           <exception-mapping result="myException"

              exception="java.lang.ClassNotFoundException">

           </exception-mapping>

           <result name="myException">/exception.jsp</result>

           <result name="success">/main.jsp</result>

       </action>

    </package>

 

    <package name="def" extends="struts-default" abstract="true">

       <global-results>

           <result name="myGlobal">/globalException.jsp</result>

       </global-results>

 

       <global-exception-mappings>

           <exception-mapping result="myGlobal"

              exception="java.lang.Exception">

           </exception-mapping>

       </global-exception-mappings>

    </package>

</struts>

分析:异常处理机制较为简单,所以在此只略作说明。当登录时输入“exception”时,在LoginAction中会抛出会一个ClassNotFoundException异常,此异常我们采取的局部异常处理的方式,如果登录时输入“globla,则会抛出Exception异常,此异常我们采取的是全局异常的处理方式,在ex包中我们继承了全局异常所在的包。提示:<exception-mapping>中的result属性的值来源于<result>元素中的name属性的值。从实例可以看出,我们一般把这种全局性的异常放在一个抽象包中供其实包继承。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值