CRM-系统异常和错误的简单处理
当我们我系统出现错误和异常时,为了让用户得到更好的体验,不看到抽象错误界面,
并且为了让我开发人员更好的对系统错误进行快速的查找和处理,我们应该对整个系统的错误和异常进行处理。
这里只是做了简单处理。怎么深入,我还没学过。。。。。。。。。
异常处理
系统可能出现的异常:(异常分类)
dao: 比较致命的操作异常,是会有很大可能影响整次的请求
service: 业务层的异常信息需要自定义
action: 控制层的异常信息需要自定义
项目使用了SSH框架。
全局异常映射
在struts总配置文件(struts.xml)中配置一个包括 全局异常映射和全局结果的package,然后让其它所有的业务模块的struts配置文件(*-struts.xml)
继承后便可处理由后台抛出的特定异常并处理。在总配置文件struts.xml中:
//系统异常
public abstract class SysException extends Exception {
private String errorMsg;
public SysException() {
super();
}
public SysException(String message) {
super(message);
errorMsg = message;
}
public String getErrorMsg() {
return errorMsg;
}
public void setErrorMsg(String errorMsg) {
this.errorMsg = errorMsg;
}
}
public class ServiceException extends SysException {
public ServiceException() {
super("业务操作错误!");
}
public ServiceException(String message) {
super(message);
}
}
<!-- 配置全局结果及异常映射 -->
<package name="base-default" extends="struts-default">
<!-- 全局返回结果 -->
<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="sysError" exception="com.suixin.core.exception.SysException"></exception-mapping>
<exception-mapping result="input" exception="java.lang.Exception"></exception-mapping>
</global-exception-mappings>
</package>
在子业务模块中的*-sturts.xml中继承总配置文件中的package:、
<package name="user-action" namespace="/nsfw" extends="base-default">
</package>
//在具体的后台处理代码中抛出系统异常:
public String listUI() throws ActionException{
try {
userList = userService.findObjects();
} catch (ServiceException e) {
//捕获Service异常,根据异常信息判断是否影响本次操作
throw new ActionException("请求失败"+e.getMessage());
}
return "listUI";
}
->如果在action中只抛出了ActionException,那么非此异常出现时,如果在全局异常映射中配置了java.lang.Exception 异常类的映射,同样可以捕获。
制定返回类型(StrutsResultSupport)
在有特殊情况时;如果没有异常信息,但是有错误并且有错误信息等内容;此时也需要进行友好的错误处理的话,
那么可以借助StrutsResultSupport 返回结果类型来实现特定处理。此种方式先需要继承StrutsResultSupport ,
然后可以在子类中获取本次请求的相关信息,再根据相关信息进行结果处理:
public class SysResultAction extends StrutsResultSupport {
@Override
protected void doExecute(String arg0, ActionInvocation invocation) throws Exception {
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
BaseAction action = (BaseAction)invocation.getAction();
//do something
System.out.println("进入了 SysResultAction ...");
}
}
在struts.xml总配置文件中定义全局处理类型和全局处理结果:
<!-- 配置全局结果及异常映射 -->
<package name="base-default" extends="struts-default">
<!-- 返回结果类型 -->
<result-types>
<result-type name="error" class="cn.itcast.core.action.SysResultAction"></result-type>
</result-types>
<!-- 全局返回结果 -->
<global-results>
<result name="error" type="error">/WEB-INF/jsp/error.jsp</result>
<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="sysError" exception="cn.itcast.core.exception.SysException"></exception-mapping>
<exception-mapping result="input" exception="java.lang.Exception"></exception-mapping>
</global-exception-mappings>
</package>