SpringMVC异常处理.jpg
异常的处理
1.自定义一个异常类MyException 将所有的异常都统一捕获 变成一个唯一的异常 交给总管
2.自定义一个异常处理类(处理异常 做转发 响应) 实现规则
3.需要做一个配置 告知Spring帮我们将自定义的异常处理类管理起来
自定义异常
package exception;
/**
* 他是一个普通自定义异常
*/
public class MyException extends RuntimeException {
private String message;
public MyException(){}
public MyException(String message){
this.message = message;
}
@Override
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
自定义的异常处理类
package exception;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 这是一个自定义的异常处理类
* 原来的小总管不会帮我们处理
* 我们自己写类 自己定义处理规则
* 将这个类交个Spring管理
*/
@Component
public class ExceptionResolver implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
//1.验证一下捕获的异常是不是刚才我们抛出的那个
if(e instanceof MyException){
//2.证明Controller以及后面的处理确实产生了问题
// 但是还不想让用户看到
ModelAndView mv = new ModelAndView();
mv.addObject("errorMessage",e.getMessage());
mv.setViewName("error.jsp"); //跳转到自定义的错误页,此页面用户可见
return mv;
}
return null;
}
}
当controller中出现异常时,使用自定义异常进行捕获
@SessionAttributes("username") //将数据存入session作用域中
@Controller
public class UserController {
@RequestMapping("testException.do")
public String testException(){
System.out.println("controller执行啦");
//1.字符集
//2.接收参数(参数列表)
//3.找寻业务层方法处理逻辑------>可能会产生异常
try {
String s = null;
//s.length();//NullPointerException
} catch (Exception e){
e.printStackTrace();//打印后台开发人员可以看到 异常记录在文件 日志
throw new MyException("服务端业务层产生问题啦");
}
//4.正常的响应
return "TestException.jsp";
}
}
网友评论