目录
- 异常处理
- [SpringMVC框架 - 异常处理](#SpringMVC框架 - 异常处理)
异常处理
什么叫异常处理?
异常处理 :是指程序在运行过程中出现错误或异常情况时,通过特定机制来捕获、处理和恢复的过程。
异常处理机制
- 捕获异常:try - catch - finally
- 声明异常:throws
- 抛出异常:throw
- 自定义异常
为什么要进行异常处理?
为了增强程序的健壮性和可用性。
- 防止程序崩溃;
- 将错误处理代码与核心业务逻辑分离;
- 提供错误信息和定位问题;
- 确保资源被正确释放
如果不进行异常处理,会造成什么问题?
- 程序崩溃
- 资源泄露
- 数据不一致
- 安全问题
异常处理的场景
- I/O操作
- 网络通信
- 数据库操作
- 参数验证
SpringMVC框架 - 异常处理
异常处理思路
Controller层调用Service层,Service层调用Dao层,异常都是向上抛出,最终由DispatcherServlet(前端控制器)找异常处理器进行异常的处理。
使用try - catch处理异常
java
package com.qcby.demo3;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@RequestMapping("/role")
@Controller
public class RoleController {
/**
* 自己处理异常
* @return
*/
@RequestMapping("/findAll.do")
public String findAll(){
try {
System.out.println("执行了......");
// 模拟异常
int a = 10/0;
}catch (Exception e){
e.printStackTrace();
}
return "suc";
}
}
自定义异常处理
-
Controller代码
javapackage com.qcby.demo3; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @RequestMapping("/role") @Controller public class RoleController { /** * 使用异常处理器方式 * @return */ @RequestMapping("/findAll.do") public String findAll(){ System.out.println("执行了......"); // 模拟异常 int a = 10/0; return "suc"; } } -
自定义异常类
javapackage com.qcby.demo3; // 普通类继承异常类, 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; } } -
自定义异常处理器
javapackage com.qcby.demo3; import org.springframework.web.servlet.HandlerExceptionResolver; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * 异常处理器 */ public class SysExceptionResolver implements HandlerExceptionResolver { /** * 程序出现异常,调用异常处理器中的方法 * @param httpServletRequest * @param httpServletResponse * @param o * @param e * @return */ @Override public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) { // 在控制台打印异常信息 e.printStackTrace(); // 做强转 SysException exception = null; // 判断 // instanceof父子类之间的强转,判断是否为某个类的真身 if(e instanceof SysException){ exception = (SysException)e; }else { exception = new SysException("系统正在维护,请联系管理员"); } // 存入异常提示信息 ModelAndView mv = new ModelAndView(); mv.addObject("errorMsg",e.getMessage()); // 设置跳转的页面 mv.setViewName("error"); return mv; } } -
在springmvc.xml中配置异常处理器
xml<!--配置异常处理器--> <bean id="sysExceptionResolver" class="com.qcby.demo3.SysExceptionResolver"></bean> -
jsp页面
jsp<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>错误提示页面</title> </head> <body> <h3>错误的友好提示页面</h3> <a href="/role/findAll.do">异常处理器</a> ${errorMsg} </body> </html>