在异常处理时,如果没有加异常处理器则会在页面提示出错误信息,这样对用户不友好。所以需要加上异常处理器,需要编写一个异常处理类实现Handler-ExceptionResolver接口。这样再出现错误时前端控制器就会调用异常处理方法来处理异常,并转移到友好页面。
1、没加异常处理器
1.1 index.jsp内容
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>
<h3>异常处理</h3>
<a href="user/testException01">异常处理(没有加异常处理器)</a>
<%--<a href="user/testException02">异常处理(加了异常处理器)</a>--%>
</body>
</html>
1.2 controller层
@Controller
@RequestMapping("/user")
public class UserController {
/**
* 模拟异常(没加异常处理器),异常直接向上抛,
* 由于没有异常处理器最终异常会抛给页面,造成
* 用户不友好的感官体验。
*/
@RequestMapping("/testException01")
public String testException01() throws Exception{
System.out.printf("testException执行了");
int i=10/0;
//由于没有捕获异常所以不能返回“success”,也就无法跳转到success.jsp页面。
return "success";
}
1.3 页面显示效果
可以看到异常直接在页面显示。
2、加了异常处理器
2.0 在springmvc.xml中配置异常处理器bean
<bean id="sysExceptionResolver" class="cn.itcast.controller.SysExceptionResolver"></bean>
2.1 index.jsp内容
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>
<h3>异常处理</h3>
<%--<a href="user/testException01">异常处理(没有加异常处理器)</a>--%>
<a href="user/testException02">异常处理(加了异常处理器)</a>
</body>
</html>
2.2 controller层
@Controller
@RequestMapping("/user")
public class UserController {
//
// /**
// * 模拟异常(没加异常处理器),异常直接向上抛,
// * 由于没有异常处理器最终异常会抛给页面,造成
// * 用户不友好的感官体验。
// */
// @RequestMapping("/testException01")
// public String testException01() throws Exception{
// System.out.printf("testException执行了");
// int i=10/0;
// return "success";
// }
/**
* 模拟异常(加了异常处理器)
*/
@RequestMapping("/testException02")
public String testException02() throws SysException{
System.out.printf("testException执行了");
try {
//模拟异常
int i=10/0;
} catch (Exception e) {
//打印异常信息
throw new SysException("查询所有用户出现错误");
}
return "success";
}
}
2.3 抛出新异常SysException(提示信息用)。
public class SysException extends Exception {
//存储提示信息
private String message;
@Override
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public SysException(String message) {
this.message = message;
}
}
2.4 编写异常处理类
*/
public class SysExceptionResolver implements HandlerExceptionResolver {
/**
* 处理异常业务逻辑
* @param request
* @param response
* @param handler
* @param ex
* @return
*/
@Override
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
SysException e=null;
if (ex instanceof SysException)
e=(SysException) ex;
else
e=new SysException("系统正在维护......");
ModelAndView mv=new ModelAndView();
mv.addObject("errorMsg",e.getMessage());
mv.setViewName("error");
//正确跳转到error.jsp
return mv;
}
}
2.5 页面效果
3 异常处理器具体步骤示意图
来源:CSDN
作者:fengzhuzhigu
链接:https://blog.csdn.net/u013915286/article/details/104340663