标签: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