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

传统方法

public String execute() throws Exception {
try{
//... return SUCCESS;
}catch(SQLException ex) { // SQL异常,返回ERROR
ex.printStackTrace();
return ERROR;
}catch(InvalidInputException ex) { // Invalid异常,返回ERROR
ex.printStackTrace();
return ERROR;
}catch(exception1 ex) { // 自定义异常
ex.printStackTrace();
return "result1";
}
}

Struts2方法

Strut2框架在struts.xml文件中配置异常通常有两种方式:全局异常配置和局部异常配置。分别通过<global-exception-mappings../>标签和<exception-mapping../>标签来配置。

下面模拟一个用户登录的场景,根据不同的输入,抛出不同的异常,然后将由struts2处理。

1. 创建登录页面(login.jsp)

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>异常测试页面</title>
</head>
<body>
<center>
<s:form action="user" theme="xhtml">
<s:textfield label="Name(应该为admin)" name="name"/>
<s:textfield label="Age(应该为18)" name="age" />
<s:textfield label="Tel(应该为13800138000)" name="tel"/>
<s:submit></s:submit>
</s:form>
</center>
</body>
</html>

2. 创建三个异常显示页面

loginException.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>自定义异常SecurityException</title>
</head>
<body>
<h4>
<font color="red"><s:property value="exception.message"/></font><br/>
<s:property value="exceptionStack"/>
</h4>
</body>
</html>

Exception.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>全局定义异常Excepition</title>
</head>
<body>
<h4>
<font color="red"><s:property value="exception.message"/></font><br/>
<s:property value="exceptionStack"/>
</h4>
</body>
</html>

SQLException.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>全局定义异常SQLException</title>
</head>
<body>
<h4>
<font color="red"><s:property value="exception.message"/></font><br/>
<s:property value="exceptionStack"/>
</h4>
</body>
</html>

3. 创建Action类

package com.clzhang.struts2.demo10;

import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport {
private static final long serialVersionUID = 1L; private String name;
private String age;
private String tel; public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
} @Override
public String execute() throws Exception {
if (!getName().equals("admin")) {
throw new SecurityException("用户名错误,应该为admin!"); } else if (!getAge().equals("18")) {
throw new Exception("年龄错误,应该为18岁!");
} else if (!getTel().equals("13800138000")) {
throw new java.sql.SQLException();
} else {
return SUCCESS;
}
}
}

4. 创建自定义异常类

package com.clzhang.struts2.demo10;

public class SecurityException extends Exception {
private static final long serialVersionUID = 1L; public SecurityException() {
super();
} private String message;
public SecurityException(String message) {
this.message = message;
} public String getMessage() {
return message;
}
}

5. 修改struts.xml

加入如下代码:

        <global-results>
<result name="Exception">/struts2/demo10/Exception.jsp</result>
<result name="SQLException">/struts2/demo10/SQLException.jsp</result>
</global-results> <global-exception-mappings>
<exception-mapping exception="java.sql.SQLException" result="SQLException"/>
<exception-mapping exception="java.lang.Exception" result="Exception"/>
</global-exception-mappings> <action name="user" class="com.clzhang.struts2.demo10.UserAction">
<exception-mapping exception="com.clzhang.struts2.demo10.SecurityException" result="login"/>
<result name="login">/struts2/demo10/loginException.jsp </result>
<result>/struts2/demo10/success.jsp</result>
</action>

6. 启动Tomcat,测试

打开IE,输入地址:http://127.0.0.1:8080/st/struts2/demo10/login.jsp

结果如下:

直接提交(用户名不为admin),则抛出SecurityException,转到loginException.jsp;

输入用户名admin,再次提交,则抛出Exception,转到Exception.jsp;

输入用户名admin,年龄18,再次提交,则抛出SQLException,转到SQLException.jsp;

最后,输全三个输入(admin/18/13800138000),再次提交,转到成功页面!

struts2:异常处理的更多相关文章

  1. 16.怎样自学Struts2之Struts2异常处理[视频]

    16.怎样自学Struts2之Struts2异常处理[视频] 之前写了一篇"打算做一个视频教程探讨怎样自学计算机相关的技术",优酷上传不了,仅仅好传到百度云上: http://pa ...

  2. struts2 异常处理3板斧

    板斧1:找不到action的错误 在struts.xml中参考如下配置 <struts> ... <package name="default" namespac ...

  3. struts2异常处理及类型转换

    一.struts2对异常的处理 1.自定义局部异常: <action> <exception-mapping result="sonException" exce ...

  4. struts2异常处理机制

    一.处理一般异常(javaBean异常) struts2进行异常处理首先需要添加exception拦截器,而默认拦截器栈已经加入了这个拦截器,所以不用特意的声明.在Struts 2框架中,采用声明式异 ...

  5. Struts2 异常处理

    Struts提供了一个更简单的方式来处理未捕获的异常,并将用户重定向到一个专门的错误页面.您可以轻松地Struts配置到不同的异常有不同的错误页面. Struts的异常处理所使用的“exception ...

  6. Struts2 - 异常处理: exception-mapping 元素

    异常处理: exception-mapping 元素 在action方法中添加 int i=1/0; 请求action后,结果为: 在struts.xml中添加异常处理:exception-mappi ...

  7. struts2异常处理,global-results定义全局结果处理

    <global-results>定义全局结果处理 一般发生异常之后 结果返回errHandler 因为errHandler是由<global-exception-mappings&g ...

  8. Struts2异常处理配置

    <package name="lee" extends="struts-default"> <!--定义全局结构映射 --> <g ...

  9. struts2异常处理

    <global-results> <result name="nullException">/WEB-INF/exception/nullException ...

  10. Struts2、Spring MVC4 框架下的ajax统一异常处理

    本文算是struts2 异常处理3板斧.spring mvc4:异常处理 后续篇章,普通页面出错后可以跳到统一的错误处理页面,但是ajax就不行了,ajax的本意就是不让当前页面发生跳转,仅局部刷新, ...

随机推荐

  1. oracle 查看运行中sql

    sys用户登录 SELECT b.sid oracleID, b.username 登录Oracle用户名, b.serial#, spid 操作系统ID, paddr, sql_text 正在执行的 ...

  2. Dynamic CRM 2013学习笔记(二十)字段改变事件的二种实现方法

    CRM里有二种方式实现字段change事件,一种是在form里,一种完全通过js来实现.本文介绍下二者的用途及区别. 1. Form里用法 这种方式估计其实也是添加一个js的function. 这种方 ...

  3. ASP.NET Core 源码阅读笔记(2) ---Microsoft.Extensions.DependencyInjection生命周期管理

    在上一篇文章中我们主要分析了ASP.NET Core默认依赖注入容器的存储和解析,这一篇文章主要补充一下上一篇文章忽略的一些细节:有关服务回收的问题,即服务的生命周期问题.有关源码可以去GitHub上 ...

  4. Salesforce 快速查看被引入Package的组件

    在 Salesforce Package 生成一个新版本的时候,由于经常需要去检查有哪些新的组件将要被引入 Package 中,这个在有众多组件的情况下检查起来会有点眼花缭乱,为了方便,就想着用 JS ...

  5. [WinAPI] API 6 [操作驱动器挂载点]

    驱动器挂载点,又可以称作卷挂载点.挂载点实际上是操作系统或者用户设置的,用来进入一个逻辑驱动器或者卷的入口.在设置了卷的挂载点后,用户或者应用程序可以使用卷标或者指定的挂载点来进入卷.比如在“C:\” ...

  6. 微软MSDN订阅用户已可提前手工下载Windows 10安装包

    在Windows 10发布之夜,当全世界都在翘首以盼Windows 10免费发布推送的到来,MSDN订阅用户可以立马享受一项令人项目的特殊待遇:手工下载Windows 10完整安装包+免费使用的激活密 ...

  7. 挑灯熬夜看《Build 2015 Keynote》图文笔记

    又是一年微软Build大会时间,网络上流传各种微软新品发布的消息终于也要揭晓了,一直熬夜到凌晨3点,好久没有这么兴奋了. 微软给力的很嘛! Satya nadella开始讲解 首先回顾微软的传统和技术 ...

  8. python获取当前日期前后N天或N月的日期

    # -*- coding: utf-8 -*- '''获取当前日期前后N天或N月的日期''' from time import strftime, localtime from datetime im ...

  9. paip.spring 获取bean getBean 没有beanid的情况下

    paip.spring 获取bean  getBean 没有beanid的情况下 spring能自动扫描带有注解的bean文件.. 作者Attilax  艾龙,  EMAIL:1466519819@q ...

  10. 如何使用代码动态的获取和设置ImageView的宽度和高度?

    http://blog.csdn.net/wulianghuan/article/details/8644144 国内某金融企业的一道面试题:如何在代码中获得一个ImageVIew的高度和宽度? 相信 ...