Struts2的异常处理

1.异常处理机制(1)发送请求到控制器(Action);

(2)Action出现异常后,依照所捕捉的不同异常转入不同的视图资源。

2.异常捕捉

(1)在Action的处理逻辑中,手动捕捉异常,在捕捉到特定的异常后,返回指定的逻辑视图名,这种方式太繁琐不利于代码的修改和维护:

import com.opensymphony.xwork2.ActionSupport;

public class Test3Action extends ActionSupport{
    //逻辑视图名
    static final String ERROR_1 = "error1";
    //封装一个请求参数
    private String username;
    //setter、getter方法
    public void setUsername(String username){
        this.username = username;
    }
    public String getUsername(){
        return this.username;
    }
    //处理逻辑,在此处我们部直接抛出异常而是用try...catch的方式手动捕捉异常
    //根据不同的异常返回不同的逻辑视图名
    public String execute(){
        try{
            return SUCCESS;
        }catch(Exception e){
            return ERROR_1;
        }
    }
}

(2)声明式的异常捕捉:

  Action的处理逻辑抛出所有的异常给Struts2框架,当Struts2框架接收到所抛出的异常后,根据在Struts.xml中配置的异常映射转入不同的物理视图资源。

  这种异常处理是通过在Struts.xml中配置<exception-mapping>完成的,使用该元素需要指定两个属性:

  exception:指定该异常映射所设置的异常类型;

  result:指定Action出现异常时系统返回的逻辑视图名。

  根据<exception-mapping>元素出现的位置不同,我们可以把异常分为两种:局部异常(在<action>中配置)和全局异常(在<global-exception-mapping>中配置),局部异常对该Action有效,而全局异常对所有Action有效,当全局异常和局部异常配置了同一个异常类型时,在此Action中局部异常会覆盖全局异常。

自定义两个异常类:

UserException:

package exception;

public class UserException extends Exception{
    public UserException(){

    }
    public UserException(String msg){
        super(msg);
    }
}

ErrorException:

package exception;

public class ErrorException extends Exception{
    public ErrorException(){

    }
    public ErrorException(String msg){
        super(msg);
    }
}

写一个抛出异常的Action:

import com.opensymphony.xwork2.Action;

import exception.ErrorException;
import exception.UserException;
public class Test4Action implements Action{ //封装请求参数 private String username; //setter、getter方法 public void setUsername(String username){ this.username = username; } public String getUsername(){ return this.username; } @Override public String execute() throws Exception { if(getUsername()==null){ throw new UserException("用户名不得为空"); }else if(!getUsername().equals("jiagoushi")){ throw new ErrorException("用户名错误"); }else{ return SUCCESS; } } }

在struts.xml中配置:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="true" />
    <package name="package_a" extends="struts-default">
        <!-- 定义一个全局结果 -->
        <global-results>
            <result name="errorException">errorException.jsp</result>
        </global-results>
        <!-- 定义一个全局异常 -->
        <global-exception-mappings>
            <!-- 当Action遇到ErrorException异常时,将转入到名为errorException的结果中 -->
            <exception-mapping result="errorException" exception="exception.ErrorException"/>
        </global-exception-mappings>
        <action name="test1" class="testAction.Test1Action">
            <result name="error">error.jsp</result>
            <result>${name}.jsp</result>
        </action>
        <action name="test4" class="testAction.Test4Action">
            <!-- 定义局部异常处理 -->
            <exception-mapping result="userException" exception="exception.UserException"/>
            <exception-mapping result="errorException" exception="exception.ErrorException"/>
            <!-- 定义结果映射 -->
            <result>welcome.jsp</result>
            <result name="userException">userException.jsp</result>
            <!-- 局部异常会覆盖全局异常 -->
            <result name="errorException">errorException_test.jsp</result>
        </action>
    </package>
</struts>

3.异常信息的输出使用Struts2提供的标签可以用来输出异常信息:

<s:property value="exception">:输出异常对象;

<s:property value="exceptionStack">:输出异常堆栈信息。

Struts2的异常处理的更多相关文章

  1. 【struts2】Struts2的异常处理

    在Action中execute方法声明为:public String execute() throws Exception,这样,Action可以抛出任何Exception. 1)自己实现异常处理 我 ...

  2. (十)struts2的异常处理机制

    成熟的MVC框架应该提供成熟的异常处理机制.当然可以在方法中手动捕捉异常,当捕捉到特定异常时,返回特定逻辑视图名. 这种方式非常繁琐,需要在方法中写大量try catch块,最大的缺点还是一旦需要改变 ...

  3. struts2:异常处理

    Struts2框架提供了自己的异常处理机制,只需要在struts.xml文件中配置异常处理即可,而不需要在Action方法中来捕捉异常. 传统方法 public String execute() th ...

  4. Struts2之异常处理

    一.学习案例:通过在input.jsp页面输入登录账号和password測试异常处理机制. 二.案例分析:struts2提供了局部异常处理机制和全局异常处理机制.局部优先于全局异常处理,当异常找不到局 ...

  5. java之struts2之异常处理

    1.在应用项目中,异常的出现时很正常的.而且项目上线后发生异常也很正常的.那么需要对这些异常有相应的处理机制,以便客户能够看你到更加友好的界面.Struts2中提供了异常处理机制. 2.Struts中 ...

  6. 配置Struts2的异常处理

    最好的方式是通过声明管理异常处理 1Action里面的execute()方法抛出所有异常:public String execute() throws Exception{} 2声明异常捕捉     ...

  7. SSH答疑解惑系列(三)——Struts2的异常处理

    Struts2的异常采用声明式异常捕捉,具体通过拦截器来实现. 在项目中,我们可以在Action中直接抛出异常,剩下的就交给Struts2的拦截器来处理了.当然,我们需要进行相关配置. Struts2 ...

  8. Struts2全局异常处理

    1.在struts.xml中配置全局异常处理 在Action中抛出异常,此异常可以是action自己抛的,也可以是Service抛出来的,都会跳转到全局异常中,只有在当前Action中配置域全局异常返 ...

  9. Struts2 语法--异常处理

    1. UsersDAO.java里产生一个例外: System.out.println(1/0); 2. 调用DAO的UsersAction1.java 的execute方法, 加抛异常: publi ...

随机推荐

  1. 用C语言操纵Mysql

    以下代码块是用来连接数据库的通讯过程,要连接MYSQL,必须建立MYSQL实例,通过mysql_init初始化方能开始进行连接. typedef struct st_mysql { NET net; ...

  2. 验证你的邮箱是不是qq邮箱

    Console.WriteLine("请输入你的qq邮箱"); string yx = Console.ReadLine(); int a = yx.LastIndexOf(&qu ...

  3. paper 7:支持向量机系列四:Outliers —— 介绍支持向量机使用松弛变量处理 outliers 方法。

    在最开始讨论支持向量机的时候,我们就假定,数据是线性可分的,亦即我们可以找到一个可行的超平面将数据完全分开.后来为了处理非线性数据,使用 Kernel 方法对原来的线性 SVM 进行了推广,使得非线性 ...

  4. java post请求

    package com.jfbank.loan.intf.util; import java.io.IOException;import java.util.ArrayList;import java ...

  5. 【linux】自定义配置debian+openbox

    openbox确实是好东西阿,小巧,不开iceweasel时内存总使用量不到200M,功能又强大,不过限于我是菜鸟,openbox再强大也有限...debian装openbox是及其简单的,不过为了使 ...

  6. location.reload()加载时有弹出框

    解决办法: 1.试试 window.location.href=window.location.href 2.当前页有被post数据的时候reload就会提示刷新 可以尝试重新定向页面地址 3.rel ...

  7. keep your work after network broken

    如下设置可以保证在网络中断后tso仍然可以继续active,并等到下一次reconnect sys1.tcpparms(tnprof7d) -- Dataset name and PDS name b ...

  8. 视频处理控件TVideoGrabber中如何混合多个视频源(1)

    其实一个或是几个作为普通的视频源使用的TVideoGrabber组件,可以进行混合来作为一个TVideoGrabber组件使用,这些普通的组件可以是视频捕捉设备或是视频剪辑等.同时这个混合的组件独立于 ...

  9. 【翻译】了解ASP.NET MVC的HTML助手

    原文:Understanding HTML Helpers in ASP.NET MVC 作 者:Shailendra Chauhan works as Software Analyst at rep ...

  10. Delphi的DateToStr StrToDate格式灵活用法

    Delphi的DateToStr StrToDate格式灵活用法 2008-04-09 10:19 procedure TForm1.Button1Click(Sender: TObject);var ...