码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-08-12 06:48:55      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:ssh


当在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 异常类的映射,同样可以捕获。



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

标签:ssh

原文地址:http://lsieun.blog.51cto.com/9210464/1837127

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!