标签:ssh
当在JSP页面中发送了请求,请求被系统处理时可能会出现错误。如果没有处理在请求过程中出现的异常(错误),那么返回给用户的则是后台的异常信息页面;为避免直接将报错的页面呈现给用户,可对报错进行处理。
1、分层异常
在系统中的后台处理有一般分为3个层,分别是action、service和dao层,每个层次都有可能出现相应错误。
(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
原文地址:http://lsieun.blog.51cto.com/9210464/1837127