404页面映射
异常 : 可控 代码里面能够处理的 不可控 URL错误链接等
springMVC 内置异常处理解析器
SpringMVC 通过实现HandlerExceptionResolver接口处理程序的异常
通过DispatcherServlet.properties 文件能够看到默认解析器
org.springframework.web.servlet.HandlerExceptionResolver=org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver,\
org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver,\
org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver
org.springframework.web.servlet.HandlerExceptionResolver 默认处理类
org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver
处理 @ExceptionHandler
org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver
解析 @ResponseStatus 注释类型的异常
org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver
按照不同类型分别对异常进行解析
通过 HandlerExceptionResolver Ctrl+H 可以看到实现类
AbstractHandlerMethodExceptionResolver 是ExceptionHandlerExceptionResolver的父类。
SimpleMappingExceptionResolver 通常配置的异常类和view的对应关系解析异常。
@ResponseStatus() 定义返回状态码
@ResponseStatus(code= HttpStatus.FORBIDDEN)
public String mytest(@RequestParam("name") String name){
return "view";
}
类中异常处理 本类
1、添加控制器方法@ExceptionHandler(Exception.class)
@ExceptionHandler(Exception.class)
public ModelAndView handlerException(Exception ex){
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("error");
modelAndView.addObject("ex",ex);
System.out.println(ex.getMessage());//日志记录
return modelAndView;
}
2、添加error.jsp
<div style="color:blue;"><%=((Exception)request.getAttribute("ex")).getMessage()%></div>
JAVA捕获打印异常栈 信息
@ExceptionHandler(Exception.class)
public ModelAndView handlerException(Exception ex){
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("error");
modelAndView.addObject("ex",ex);
//获取异常栈信息 BEGIN
StringWriter stringWriter = new StringWriter();
PrintWriter printWriter = new PrintWriter(stringWriter);
ex.printStackTrace(printWriter);
System.out.println(stringWriter.toString());
//获取异常栈信息 END
System.out.println(ex.getMessage());//日志记录
return modelAndView;
}
全局异常处理
@ControllerAdvice
public class MyException {
@ExceptionHandler(Exception.class)
public ModelAndView handleException(Exception ex){
System.out.println("Controller Advice ex");
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("error");
modelAndView.addObject("ex",ex);
StringWriter stringWriter = new StringWriter();
PrintWriter printWriter = new PrintWriter(stringWriter);
ex.printStackTrace(printWriter);
System.out.println(stringWriter.toString());
System.out.println(ex.getMessage());
return modelAndView;
}
}
异常处理 同类中的优先级最高 其次是精度高的优先
@ExceptionHandler(MissingServletRequestParameterException.class)
JSON请求判断
1、根据类或方法上的注解
public ModelAndView handleExceptionMissingParameter(Exception ex, HandlerMethod handlerMethod,HttpServletRequest httpServletRuest, HttpServletResponse httpServletResponse){
//根据用户请求的方法是否设置返回JSON
Annotation annotation = handlerMethod.getClass().getAnnotation(RestController.class);
Annotation annotation1 = handlerMethod.getMethod().getAnnotation(ResponseBody.class);
if(annotation!=null ||annotation1!=null){
//判断json请求类型
}
2、根据头部信息
String header = httpServletRuest.getHeader("Content-Type");
System.out.println(header);
if(header !=null && header.indexOf("application/json") != -1 ){
ModelAndView modelAndView = new ModelAndView(new MappingJackson2JsonView());
modelAndView.addObject("code", HttpStatus.INTERNAL_SERVER_ERROR.value());
modelAndView.addObject("message",ex.getMessage());
return modelAndView;
}else{
System.out.println("MissingServletRequestParameterException do");
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("error");
modelAndView.addObject("ex",ex);
StringWriter stringWriter = new StringWriter();
PrintWriter printWriter = new PrintWriter(stringWriter);
ex.printStackTrace(printWriter);
System.out.println(stringWriter.toString());
System.out.println(ex.getMessage());
return modelAndView;
}
404等错误代码配置
1、spring xml配置
<mvc:resources mapping="/**/*.html" location="/"></mvc:resources>
2、创建业务页面
3、web.xml中配置
<error-page>
<error-code>404</error-code>
<location>/error.html</location>
</error-page>