(十)struts2的异常处理机制

成熟的MVC框架应该提供成熟的异常处理机制。当然可以在方法中手动捕捉异常,当捕捉到特定异常时,返回特定逻辑视图名。

这种方式非常繁琐,需要在方法中写大量try catch块,最大的缺点还是一旦需要改变异常处理方法时,需要修改代码。

最好的方式是通过声明式的方式管理异常处理。struts2提供了一种声明式的异常处理方式。

一、原理

    我们看Action接口中的execute方法声明。
    public String execute() throws Exception 

    这就意味着我们重写该方法时,无需进行任何异常处理,而是把异常抛给struts2框架处理. 

    struts2框架接收到Action抛出的异常后,根据struts.xml文件配置的异常映射,转入指定的视图资源。

    异常映射功能是由 exception的拦截器帮我们做的。

    struts2的异常处理机制是通过在struts.xml中配置<exception-mapping..../>元素完成。
        属性:
            exception:异常类型
            result:出现该异常时,系统转入result指定的结果

二、局部异常映射和全局异常映射

全局异常映射对所有的Action都有效,但局部异常映射只对该异常映射所在的Action有效。

局部异常映射:将<exception-mapping..../>元素作为<action.../>的子元素配置
如果全局异常映射和局部异常映射配置了同一个异常类型,在该Action内,局部覆盖全局。

全局异常映射:将<exception-mapping..../>元素作为<global-exception-mappings>元素的子元素配置

三、异常处理案例

 我们做一个简单的登陆应用

(1)编写我们的Action类

        public class LoginAction implements Action{
            private String username;
            private String password;
            public String getUsername() {
                return username;
            }
            public void setUsername(String username) {
                this.username = username;
            }
            public String getPassword() {
                return password;
            }
            public void setPassword(String password) {
                this.password = password;
            }
            public String execute()throws Exception{
                //当用户名为monster时,抛出我们的自定义异常
                if(getUsername().equals("monster")){
                    throw new MyException("自定义异常");
                }
                //当用户名为sql时,抛出sql异常
                if(getUsername().equalsIgnoreCase("sql")){
                    throw new SQLException("用户名不能为sql");
                }
                if(getUsername().equals("cad")&&getPassword().equals("123456")){
                    return "success";
                }else
                {
                    return "error";
                }
            }

        }

(2)我们编写我们的登陆jsp页面

        <body>
            <form action="${pageContext.request.contextPath }/login" method="post">
                用户名:<input type="text" name="username"><br>
                密  码:<input type="password" name="password"><br>
                <input type="submit" value="提交">
            </form>
        </body>

(3)我们编写我们的配置文件struts.xml

    <package name="p2" extends="struts-default">
        //全局结果视图定义
        <global-results>
            <result name="sql">/exception.jsp</result>
        </global-results>

        //全局异常定义
        <global-exception-mappings>
            //出现sql异常,就转入到视图名为sql的视图结果
            <exception-mapping result="sql" exception="java.sql.Exception"></exception-mapping>
        </global-exception-mappings> 

        <action name="login" class="com.cad.struts2.LoginAction" >
                //局部异常定义
                <exception-mapping result="my" exception="conm.cad.struts2.MyException"></exception-mapping>
                <result name="my">/exception.jsp</result>
                <result name="success">/welcome.jsp</result>
                <result name="error">/error.jsp</result>
        </action>
    </package>

  

  

  

原文地址:https://www.cnblogs.com/yuexiaoyun/p/9448195.html

时间: 2024-10-14 21:20:31

(十)struts2的异常处理机制的相关文章

C++(四十六) — 异常处理机制、标准IO输入输出

1.异常处理机制 一般来说,异常处理就是在程序运行时对异常进行检测和控制.而在C++ 中,使用 try-throw-catch模式进行异常处理的机制. #include<iostream> using namespace std; int Fib(int n) { if (n <= 0) throw n; if (n >= 47) throw "n>=47 overflow"; if (n == 1 || n == 2) return 1; else re

【struts2】Struts2的异常处理

在Action中execute方法声明为:public String execute() throws Exception,这样,Action可以抛出任何Exception. 1)自己实现异常处理 我们还以helloWorldAction为例,在Action的execute方法中这样写: public String execute() throws Exception { int a=5/0; this.businessExecute(); return "toWelcome"; }

struts2异常处理机制

一.处理一般异常(javaBean异常) struts2进行异常处理首先需要添加exception拦截器,而默认拦截器栈已经加入了这个拦截器,所以不用特意的声明.在Struts 2框架中,采用声明式异常处理方式.在这种方式下,只需要在struts.xml文件中进行配置,Struts 2便能够处理异常,并跳转到相应的视图,而在Action中无须编写任何异常处理代码. 如果Action在处理请求的过程中出现异常,一个名称为exception的拦截器将拦截该异常,并进行处理.所以在struts.xml

Struts2的异常处理

Struts2的异常处理 1.异常处理机制(1)发送请求到控制器(Action); (2)Action出现异常后,依照所捕捉的不同异常转入不同的视图资源. 2.异常捕捉 (1)在Action的处理逻辑中,手动捕捉异常,在捕捉到特定的异常后,返回指定的逻辑视图名,这种方式太繁琐不利于代码的修改和维护: import com.opensymphony.xwork2.ActionSupport; public class Test3Action extends ActionSupport{ //逻辑视

Java异常处理机制难点解惑-用代码说话

是否需要看这篇文章? 下面的例子中,如果正常执行返回值多少? 如果出现了ArithmeticException返回值多少? 如果出现非ArithmeticException(如NullPointerException)返回值多少? 如果你了解这个例子说明的问题,并了解例子中三种情况下的执行细节,这篇文章你就不用浪费时间看了. 例子: public int testException_finally(){ int x; try { x = 1; //int y = 1/0; //放开此处,出现Ar

C++语言学习(十八)——异常处理

C++语言学习(十八)--异常处理 一.C语言异常处理 异常是指程序在运行过程中产生可预料的执行分支.如除0操作,数组访问越界.要打开的文件不存在.Bug是指程序中的错误,是不被预期的运行方式.如野指针.堆空间使用结束未释放.C语言中处理异常的方式一般是使用if....else...分支语句. double divide(double a, double b) { const double delta = 0.000000000000001; double ret = 0; if( !((-de

java之struts2之异常处理

1.在应用项目中,异常的出现时很正常的.而且项目上线后发生异常也很正常的.那么需要对这些异常有相应的处理机制,以便客户能够看你到更加友好的界面.Struts2中提供了异常处理机制. 2.Struts中异常处理实现 a) 在 action 处理类中抛出的异常 public class UserAction { public String add() throws NullPointerException{ if(1==1) throw new NullPointerException("数据为nu

深入理解Java异常处理机制

1. 引子 try-catch-finally恐怕是大家再熟悉不过的语句了,而且感觉用起来也是很简单,逻辑上似乎也是很容易理解.不过,我亲自体验的"教训"告诉我,这个东西可不是想象中的那么简单.听话.不信?那你看看下面的代码,"猜猜"它执行后的结果会是什么?不要往后看答案.也不许执行代码看真正答案哦.如果你的答案是正确,那么这篇文章你就不用浪费时间看啦. <span style="background-color: rgb(255, 255, 255

Java异常处理机制的秘密

一.结论 这些结论你可能从未听说过,但其正确性是毋庸置疑的,不妨先看看: 1.catch中throw不一定能抛回到上一层,因为finally中的return会抑制这个throw2.finally中throw一定能抛回上一层,因为此时其后的return不会被执行到(throw中断了正常的顺序流)3.在try/catch中return并不会直接返回上一层,而是先执行finally再返回 二.一段小程序 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19