我们一般访问网页时,如果网页出现错误它会提示我们系统正在维护或系统出错,请重新尝试。那这样的提示怎么去做到呢。
异常处理思路
controller调用Service,Service调用Dao,异常都是向上抛出的,所以如果任一一层出现异常,最后都要丢到最上层由DispatcherServelt找异常处理器进行异常的处理。
SpringMVC的异常处理
1.自定义异常类
package com.exception;
public class QueryException extends Exception {
private String message;
@Override
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public QueryException(String message){
this.message=message;
}
}
2.编写异常处理器
package com.exception;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class QueryExceptionResolver implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
ModelAndView mv = new ModelAndView();
if(ex instanceof QueryException){
mv.addObject("errormsg",ex.getMessage());
}else{
mv.addObject("errormsg","系统异常...");
}
mv.setViewName("error");
return mv;
}
}
3.配置异常处理器
<bean id="queryExceptionResolver" class="com.exception.QueryExceptionResolver" />
4.控制器方法
@RequestMapping("/exceptionProcessor")
public String exceptionProcessor() throws Exception{
try{
//模拟执行service层代码时被抛出异常
int a = 10/0;
}catch (Exception ex){
throw new QueryException("没查到用户");
}
return "success";
}
重点在于是否实现了HandlerExceptionResolver接口,所以不需要你配置其他什么映射告,只需要在配置中声明即可。spring容器会在初始化的时候自己去筛选并对继承这个接口的类进行注册。