SSH系列:(14)系统异常处理

当在JSP页面中发送了请求,请求被系统处理时可能会出现错误。如果没有处理在请求过程中出现的异常(错误),那么返回给用户的则是后台的异常信息页面;为避免直接将报错的页面呈现给用户,可对报错进行处理。

1、分层异常

在系统中的后台处理有一般分为3个层,分别是actionservicedao层,每个层次都有可能出现相应错误。

(1)Action层可能出现解析请求参数、返回结果有问题;

(2) Service 层则可能出现请求中要做的业务操作出现问题;出现了问题要根据实际情况判断是否会影响本次操作结果,action中要根据异常信息进行判断,然后确定是否操作成功;

(3)dao层也可能出现在操作数据库时出现错误;而此种错误一般都是致命的会影响操作结果。

因此,在3个层次中至少要有两种类型的异常信息来标识。

总的异常类: SysException.java

package com.rk.core.exception;

//注意,这是abstract类
public abstract class SysException extends Exception {
	private String errorMsg;

	public SysException() {
		super();
	}

	public SysException(String message, Throwable cause,
			boolean enableSuppression, boolean writableStackTrace) {
		super(message, cause, enableSuppression, writableStackTrace);
		errorMsg = message;
	}

	public SysException(String message, Throwable cause) {
		super(message, cause);
		errorMsg = message;
	}

	public SysException(String message) {
		super(message);
		errorMsg = message;
	}

	public SysException(Throwable cause) {
		super(cause);
	}

	// {{
	public String getErrorMsg() {
		return errorMsg;
	}

	public void setErrorMsg(String errorMsg) {
		this.errorMsg = errorMsg;
	}
	// }}
}

Action层异常类:AcitonException.java

package com.rk.core.exception;

public class ActionException extends SysException {

	public ActionException() {
		super("Action请求发生错误!");
	}

	public ActionException(String message) {
		super(message);
	}

}

Service层异常类:ServiceException.java

package com.rk.core.exception;

public class ServiceException extends SysException {

	public ServiceException() {
		super("Service业务操作错误!");
	}

	public ServiceException(String message) {
		super(message);
	}

}

2、异常处理

2.1、全局异常映射

在struts总配置文件(struts.xml)中配置一个包括全局异常映射全局结果的package,然后让其它所有的业务模块的struts配置文件(struts-*.xml)继承,之后便可处理由后台抛出的特定异常并处理。

struts.xml中的全局结果异常映射的关键部分

	<!-- 配置全局结果及异常映射 -->
    <package name="base-default" extends="struts-default" abstract="true">
        <!-- 返回结果类型 -->
        <!-- 全局返回结果 -->
        <global-results>
        	<result name="sysError">/WEB-INF/jsp/error.jsp</result>
        	<result name="input">/WEB-INF/jsp/error.jsp</result>
        </global-results>
        <!-- 全局异常映射 -->
        <global-exception-mappings>
        	<exception-mapping result="input" exception="java.lang.Exception"></exception-mapping>
        </global-exception-mappings>
    </package>

完整的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" />
	<!-- 配置拓展名为action -->
	<constant name="struts.action.extention" value="action" />
	<!-- 把主题配置成simple -->
	<constant name="struts.ui.theme" value="simple" />
	<!-- 设置创建对象的工厂 -->
	<constant name="struts.objectFactory" value="spring" />
    

	<!-- 配置全局结果及异常映射 -->
    <package name="base-default" extends="struts-default" abstract="true">
        <!-- 返回结果类型 -->
        <!-- 全局返回结果 -->
        <global-results>
        	<result name="sysError">/WEB-INF/jsp/error.jsp</result>
        	<result name="input">/WEB-INF/jsp/error.jsp</result>
        </global-results>
        <!-- 全局异常映射 -->
        <global-exception-mappings>
        	<exception-mapping result="input" exception="java.lang.Exception"></exception-mapping>
        </global-exception-mappings>
    </package>
    
    <!-- 包含test的struts配置文件 -->
	<include file="com/rk/test/config/struts-test.xml"/>
	<!-- 包含用户管理的struts配置文件 -->
	<include file="com/rk/tax/config/struts-user.xml"/>    
    
</struts>

在子业务模块中的sturts-*.xml中继承总配置文件中的package:

struts-user.xml (注意: extends="base-default")

<?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>
     <package name="user_package" namespace="/tax" extends="base-default">
        <action name="user_*" class="userAction" method="{1}">
            <result name="{1}">/WEB-INF/jsp/tax/user/{1}.jsp</result>
            <result name="list" type="redirectAction">
            	<param name="actionName">user_listUI</param>
            	<param name="namespace">/tax</param>
            </result>
        </action>
    </package>
</struts>

在具体的后台处理代码中抛出系统异常:

UserAction.java

	//列表页面
	public String listUI() throws ActionException
	{
		try {
			int i = 1 / 0;
			userList = userService.findAll();
		} catch (Exception e) {
			throw new ActionException("请求操作失败:" + e.getMessage());
		}
		return "listUI";
	}

如果在action中只抛出了ActionException,那么非此异常出现时,如果在全局异常映射中配置了java.lang.Exception 异常类的映射,同样可以捕获。

时间: 2024-07-30 10:17:29

SSH系列:(14)系统异常处理的相关文章

Linux运维系统工程师系列---14

进程管理 什么是程序?program 程序:完成某个功能的一段代码的集合 什么是进程? 进程是程序运行之后,在内存中的状态 如何产生一个进程? 执行一个程序或者命令就可以产生一个进程 提到进程,不得不说一个目录 /proc:是一个虚拟的文件系统,这个目录下的文件和目录都是保存在内存里的 [[email protected] ~]# ll -d /proc/ dr-xr-xr-x. 157 root root 0 Oct 10 00:33 /proc/ 大小是0,根本没有占用磁盘空间,就是假的.

SpringMVC经典系列-14自定义SpringMVC的拦截器---【LinusZhu】

注意:此文章是个人原创,希望有转载需要的朋友们标明文章出处,如果各位朋友们觉得写的还好,就给个赞哈,你的鼓励是我创作的最大动力,LinusZhu在此表示十分感谢,当然文章中如有纰漏,请联系[email protected],敬请朋友们斧正,谢谢. 这部分主要讲解SpringMVC的拦截器的部分,会带着大家完成定义拦截器的两种方式的实例,不多说了,开始-- SpringMVC的拦截器主要是用于拦截用户的请求,并且进行相应的处理,如:权限验证.判断登录等. 定义拦截器的两种方式,如下: 1. 实现接

金融系列14《QPBOC交易流程》

中国银行金融IC卡qPBOC交易时间(不含终端处理时间)要求:IC卡私钥长度1024位,交易时间 <= 500ms, 1152 <=600 ATR=3B8D800100814D220886601222275000014A CARD=6231200100000000217F Send:00A404000E325041592E5359532E4444463031 --->:6F30840E325041592E5359532E4444463031A51EBF0C1B61194F08A00000

GL_GL系列 - 总账系统基础(概念)

1. 分类账 分类账是公司财务记录的核心,任何事物处理都必须经过这个环节 主要分类账: 按4C定义的用于保存记录的主要分类账 科目表 日历 币种 子分类续航会计方法 辅助分类续航: 用于辅助目的, 跨国公司可借助其遵守多种法律要求 可不主要分类账不同: 科目表 日历 币种 会计方法 分类续航处理选项 分类账的基本要素 帐套 会计科目结构 - 会计期间 - 本为币币种 - 定义子分类账会计方法 总账中可与分类账共享的元素 账户结构 值集 段值 安全性规则 交叉验证规则 会计日历 期间 期间类型 币

[Android学习系列14]聊天通信的实现

说不定以后用得上 基于XMPP http://blog.csdn.net/lnb333666/article/details/7471292 http://www.oschina.net/code/snippet_150934_11012 [Android学习系列14]聊天通信的实现,码迷,mamicode.com

Java 集合系列 14 hashCode

java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java 集合系列 04 LinkedList详细介绍(源码解析)和使用示例 Java 集合系列 05 Vector详细介绍(源码解析)和使用示例 Java 集合系列 06 Stack详细介绍(源码解析)和使用示例 Java 集合系列 07 List总结(LinkedList, ArrayList等使用场景和

【SSH系列】静态代理&amp;&amp;动态代理

从设计模式说起 代理模式是二十三中设计模式中的一种,代理模式就是指由一个代理主题来操作真实的主题,真实的主题执行具体的业务操作,而代理主题负责其她相关业务,简而言之,代理模式可以由以下三个部分组成: a.抽象角色:通过接口或抽象类声明真实角色实现的业务方法. b.代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作. c.真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用.第一次接触代理模式的是在学习大话设计模式的时候,首先

struts2官方 中文教程 系列八:异常处理

在本教程中,我们将探讨如何启用Struts 2框架处理web应用程序生成的任何未捕获的异常.Struts 2提供了健壮的异常处理,包括能够自动记录任何未捕获的异常,并将用户重定向到错误web页面. 贴个本帖的地址,以免被爬:struts2官方 中文教程 系列八:异常处理  即 http://www.cnblogs.com/linghaoxinpian/p/6915066.html 下载本章节代码 全局异常处理(Global Exception Handling) 使用Struts 2框架,您可以

Skype For Business 2015实战系列14:创建Office Web App服务器场

Skype For Business 2015实战系列14:创建Office Web App服务器场 前面的操作中我们已经成功的安装了Office Web App Server,今天我们将创建Office Web App服务器场.具体步骤如下: 配置证书: 登陆到OWA服务器,打开服务器管理器,点击"工具"-"IIS管理器": 双击证书: 点击创建域证书: 输入通用名称及基本信息,点击下一步: 选择证书颁发机构并设置友好名称,点击完成: 完成以后我们的OWA使用的证

在windows中通过SSH访问linux系统(redhat)

SSH: 传统的网络服务程序,如:ftp.pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据.而且,这些服务程序的安全验证方式也是有其弱点的, 就是很容易受到“中间人”(man-in-the-middle)这种方式的攻击.所谓“中间人”的攻击方式, 就是“中间人”冒充真正的服务器接收你传给服务器的数据,然后再冒充你把数据传给真正的服务器.服务器和你之间的数据传送被“中间人”一转手做了手脚之后,就会出现很严重的问题.通过使用