1 SpringMVC异常处理分析和搭建环境
在编写程序的时候,通常会出现异常,我们通常希望我们能够让我们的页面跳转到一个比较友好的页面。
从客户端浏览器发送请求,请求会先到达前端控制器,前端控制器会调用我们的处理器controller,controller调用我们的业务层service,最后service调用持久层完成数据库的操作。
当我们出现了异常,异常默认都是向上抛出来的,即向相反的方向抛出异常,比如service调用dao,dao出了问题,它会把异常抛给service,service会把异常抛出给controller类,controller也可以把异常抛给前端控制器,如果什么都不做,那么异常就会给页面了,页面就会直接看到错误的提示信息。
用户希望出错时系统能够给出一个友好的提示
我们需要再提供一个组件,即异常处理器组件。
我们需要提供一个异常处理器的对象,此时前端控制器就不会把异常抛给页面,而是交给异常处理器,由异常处理器处理异常。处理完后跳转到一个友好的提示页面,然后响应给用户一个友好的错误提示页面。
2 SpringMVC异常处理之演示程序异常
@RequestMapping("/testException")
public String testException() throws Exception{
System.out.println("testException执行了.......");
//模拟异常
int i=10/0;
return "success";
}
<h3>异常处理</h3>
<a href="user/testException">异常处理</a>
所以我们需要写异常处理器来帮助我们处理异常
2 SpringMVC异常处理之异常处理代码编写
1.编写自定义异常的类(做提示信息)
2.编写异常异常处理器(需要实现HandlerExceptionResolver)
3.配置异常处理器(异常处理器最终决定跳转到提示页面)
ctrl+alt+t可以添加try/catch
<h3>异常处理</h3>
<a href="user/testException">异常处理</a>
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;
}
}
controller
@RequestMapping("/testException")
public String testException() throws SysException {
System.out.println("testException执行了.......");
try {
//模拟异常,要捕获异常.出了问题,先捕获。
int i=10/0;
} catch (Exception e) {
//打印异常信息
e.printStackTrace();
//抛出自定义异常信息
throw new SysException("查询所有用户出现错误了....");
}
return "success";
}
SysExceptionResolver
/*异常处理器对象*/
public class SysExceptionResolver implements HandlerExceptionResolver{
/*当Controller把异常抛过来,就会调处理器,这个方法就会正常的执行了
* 本方法是处理异常业务逻辑
* request请求,response响应,o表示当前处理器的对象,ex是当前抛出的异常对象
* */
@Override
public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception ex) {
//获取到异常对象
SysException e=null;
if(ex instanceof SysException){
e=(SysException)ex;
}else{
e=new SysException("系统正在维护....");
}
//创建modelandview对象
ModelAndView mv=new ModelAndView();
mv.addObject("errorMsg",e.getMessage());
mv.setViewName("error");
return mv;
}
}
springmvc.xml
<!--配置异常处理器-->
<bean id="sysExceptionResolver" class="cn.yujie.exception.SysExceptionResolver"></bean>
error.jsp
<h3>${errorMsg}</h3>