异常处理流程:
思想:异常 捕获异常 跳转到正常界面告诉用户发生异常
1、自定义异常:
package exception;
//自定义异常类
public class SYSException extends Exception{
private String message;
public String getMessage() {//get能访问
return message;
}
public void setMessage(String message) {//set能更改
this.message = message;
}
public SYSException(String message) {//有参的构造函数 要求访问自定义类时 必须要传个参数
this.message = message;
}
}
模拟异常 发生异常了:
package springmvcYC;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import exception.SYSException;
//Controller执行页面 用于捕获异常 抛出 保证异常处理器能捕获到 并处理
@Controller
@RequestMapping("/User")
public class UserController {
@RequestMapping("/textException")
public String textException() throws SYSException {
System.out.println("textException...执行了");
//模拟异常
try {
int i=10/0;
}catch(Exception e){
e.printStackTrace();
throw new SYSException("查询所有的用户出现了异常");
}
return "abc";
}
}
捕获异常 并跳转到友好界面 主要的是实现了HandlerExceptionResolver接口:
package exception;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;
//异常处理器 跳转页面 页面好的显示
public class SysExceptionResolver implements HandlerExceptionResolver{
@Override
public ModelAndView resolveException(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2,
Exception arg3) {
// 获取到异常对象 并把它存起来 如果没有 就自动new一个自定义的异常
SYSException e = null;
if(arg3 instanceof SYSException) { //前面抛出异常 这里捕获 通过arg3 看arg3 和你自定义的异常是否一样
e = (SYSException) arg3;//做一个强转
}else {
e = new SYSException("系统正在维护...");
}
//因为是ModelAndCView 可以跳转到那个页面 这里可以跳转到 良好的显示页面
ModelAndView mv = new ModelAndView();
mv.addObject("errorMsg", e.getMessage());//e.getMessage这里是拿到throw new SYSException("查询所有的用户出现了异常");你所抛出的异常
mv.setViewName("error");//往你设置的地址跳
return mv; //最后在spring.xml中设置上 异常处理器
}
}
写了异常处理 没用 白说 配置异常处理器
<!-- 设置异常处理器 直接bean访问一下地址就行 地址是自己写的异常处理器的地址-->
<bean id="sysExceptionResolver" class="exception.SysExceptionResolver"></bean>