SpringMVC框架 - 异常处理 - 指南
目录
异常处理
什么叫异常处理?
异常处理:是指程序在运行过程中出现错误或异常情况时,通过特定机制来捕获、处理和恢复的过程。
异常处理机制
- 捕获异常:try - catch - finally
- 声明异常:throws
- 抛出异常:throw
- 自定义异常
为什么要进行异常处理?
为了增强程序的健壮性和可用性。
- 防止程序崩溃;
- 将错误处理代码与核心业务逻辑分离;
- 提供错误信息和定位问题;
- 确保资源被正确释放
如果不进行异常处理,会造成什么问题?
- 程序崩溃
- 资源泄露
- 数据不一致
- 安全问题
异常处理的场景
- I/O操作
- 网络通信
- 数据库操作
- 参数验证
SpringMVC框架 - 异常处理
异常处理思路
Controller层调用Service层,Service层调用Dao层,异常都是向上抛出,最终由DispatcherServlet(前端控制器)找异常处理器进行异常的处理。
使用try - catch处理异常
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代码
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(){ System.out.println("执行了……"); // 模拟异常 int a = 10/0; return "suc"; } } - 自定义异常类
package 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; } } - 自定义异常处理器
package 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中配置异常处理器
<!--配置异常处理器--> <bean id="sysExceptionResolver" class="com.qcby.demo3.SysExceptionResolver"></bean> - jsp页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>错误提示页面 错误的友好提示页面
异常处理器 ${errorMsg}
浙公网安备 33010602011771号