假设我们在UserAction的listUI方法中加入一句错误代码:
然后我们来访问我们的我用户列http://localhost/HpuTax/tax/user_listUI.action,那么便会看到这种错误界面:
系统可能出现的异常:(异常分类)
dao: 比较致命的操作异常,是会有很大可能影响整次的请求
service: 业务层的异常信息需要自定义
action: 控制层的异常信息需要自定义
我们在核心代码包中创建我们的全局异常以及各层异常处理类:
SysException.java:
ServiceException.java:
ActionException.java:
我们下面来使用一下这些异常类,我们在UserServiceImpl中故意出一个错误:
然后在Action层捕获异常:
接下来我们配置总的全局异常处理配置,我们在struts的配置文件struts.xml中加入以下代码:
然后编写error.jsp界面:
然后让我们的user的struts配置中使用我们的异常处理(把extends从struts-default改为base-default):
然后我们查看用户列表来测试一下:
- //列表页面
- public String listUI(){
- int i=1/0;
- userList=userService.findObjects();
- return "listUI";
- }
系统可能出现的异常:(异常分类)
dao: 比较致命的操作异常,是会有很大可能影响整次的请求
service: 业务层的异常信息需要自定义
action: 控制层的异常信息需要自定义
我们在核心代码包中创建我们的全局异常以及各层异常处理类:
SysException.java:
- package cn.edu.hpu.tax.core.exception;
- public abstract class SysException extends Exception{
- //错误信息
- private String errorMsg;
- public String getErrorMsg() {
- return errorMsg;
- }
- public void setErrorMsg(String errorMsg) {
- this.errorMsg = errorMsg;
- }
- //下面几个全是不同的构造方法
- public SysException() {
- super();
- // TODO Auto-generated constructor stub
- }
- public SysException(String message, Throwable cause,
- boolean enableSuppression, boolean writableStackTrace) {
- super(message, cause, enableSuppression, writableStackTrace);
- // TODO Auto-generated constructor stub
- }
- 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);
- }
- }
ServiceException.java:
- package cn.edu.hpu.tax.core.exception;
- public class ServiceException extends SysException{
- public ServiceException() {
- //业务层的默认错误信息
- super("业务操作错误!");
- }
- public ServiceException(String message) {
- super(message);
- }
- }
ActionException.java:
- package cn.edu.hpu.tax.core.exception;
- public class ActionException extends SysException{
- public ActionException() {
- super("请求发生错误!");
- }
- public ActionException(String message) {
- super(message);
- }
- }
我们下面来使用一下这些异常类,我们在UserServiceImpl中故意出一个错误:
- @Override
- public List<User> findObjects() throws ServiceException{
- try {
- int i = 1 / 0;
- } catch (Exception e) {
- throw new ServiceException("service 出错!"+e.getMessage());
- }
- return userDao.findObjects();
- }
然后在Action层捕获异常:
- //列表页面
- public String listUI() throws SysException{
- try {
- userList=userService.findObjects();
- } catch (ServiceException e) {
- throw new ActionException("action 出现异常!"+e.getMessage());
- }
- return "listUI";
- }
接下来我们配置总的全局异常处理配置,我们在struts的配置文件struts.xml中加入以下代码:
- <!-- 配置全局结果集异常映射 -->
- <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="cn.edu.hpu.tax.core.exception.SysException"/>
- <exception-mapping result="input" exception="java.lang.Exception"/>
- </global-exception-mappings>
- </package>
然后编写error.jsp界面:
- <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
- <%@ taglib prefix="s" uri="/struts-tags" %>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <title>系统异常信息</title>
- </head>
- <body>
- <img src="<%=request.getContextPath() %>/images/common/error.jpg">
- <br>
- <s:if test="exception.errorMsg != '' && exception.errorMsg != null">
- <s:property value="exception.errorMsg"/>
- </s:if>
- <s:else>
- 操作失败!<s:property value="exception.message"/>
- </s:else>
- </body>
- </html>
然后让我们的user的struts配置中使用我们的异常处理(把extends从struts-default改为base-default):
- <package name="user-action" namespace="/tax" extends="base-default">
然后我们查看用户列表来测试一下:
发现弹出了我们自定义的错误界面,并且阐述了哪几层出现错误,最终错误的原因。