1: 异常处理思
系统中异常包括两类:预期异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发、测试通过手段减少运行时异常的发生。系统的dao、service、controller出现异常都通过throws Exception向上抛出,最后由springmvc前端控制器交由异常处理器进行异常处理,下面是我从网上找到的一张图,
一般处理异常时,通常是通过日志记录异常信息,然后通知维护人员,最后给出用户提示,如网络电缆没有插好等等......
自定义异常类
public class CustomException extends Exception {
private String message; // 异常信息
//提供有参构造
public CustomException(String msg){
this.message = msg;
}
@Override
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
定义异常处理类
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springf
ramework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
import java.io.StringWriter;
public class CustomExceptionResolver implements HandlerExceptionResolver {
private Logger log = LoggerFactory.getLogger(CustomExceptionResolver.class);
@Override
public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object handler, Exception exception) {
String message;
if(exception instanceof CustomException){
//是预期异常
CustomException ex = (CustomException) exception;
//获取我们自定义的异常信息
message = ex.getMessage();
} else {
//运行时异常 友好提示....
message = "网络电缆有问题,请稍后再试..........";
//异常信息打印到日志
// exception.getMessage();
StringWriter s = new StringWriter();
PrintWriter printWriter = new PrintWriter(s);
exception.printStackTrace(printWriter);
s.toString();
log.error(s.toString());
//发送异常信息,省略
// xxxxx
}
//跳转错误页面
ModelAndView mView = new ModelAndView();
mView.addObject("message",message); //设置错误消息
mView.setViewName("error");//跳转错误页面,使用了视图视图解析器,这是逻辑路径
return mView;
}
}
异常处理器配置
springMvc 配置文件里需要配置配置
<!--异常处理器配置,需要注意的是,id必须是"handlerExceptionResolver"-->
<bean id="handlerExceptionResolver" class="cn.csdn.controller.exectionResolver.CustomExceptionResolver"/>