springmvc 自定义异常处理机制
来源:互联网 发布:黑客帝国动画版 知乎 编辑:程序博客网 时间:2024/06/05 09:13
本篇文章,我们讲解如何在springmvc中自定义异常处理机制,本文只是讲解一些基础的配置和用法,偏实用型
首先,我们看一下错误页面结构:
接下来,我们讲解具体的配置流程
1、首先,我们需要定义异常类CustomSimpleMappingExceptionResolver,它继承SimpleMappingExceptionResolver,具体实现如下(注意:需要修改对应的package路径)
package com.common.exception.inter;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.ModelAndView;import org.springframework.web.servlet.handler.SimpleMappingExceptionResolver;public class CustomSimpleMappingExceptionResolver extends SimpleMappingExceptionResolver{ @Override protected ModelAndView doResolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { // Expose ModelAndView for chosen error view. String viewName = determineViewName(ex, request); if (viewName != null) {// JSP格式返回 if (!(request.getHeader("accept").indexOf("application/json") > -1 || (request .getHeader("X-Requested-With")!= null && request .getHeader("X-Requested-With").indexOf("XMLHttpRequest") > -1))) { // 如果不是异步请求 // Apply HTTP status code for error views, if specified. // Only apply it if we're processing a top-level request. Integer statusCode = determineStatusCode(request, viewName); if (statusCode != null) { applyStatusCodeIfPossible(request, response, statusCode); } return getModelAndView(viewName, ex, request); } else {// JSON格式返回 try { PrintWriter writer = response.getWriter(); writer.write(ex.getMessage()); /*writer.flush();*/ } catch (IOException e) { e.printStackTrace(); } return null; } } else { return null; } } }
2、定义BusinessException类,它继承了Exception,具体实现如下,同样需要根据你自己的路径修改对应包名
package com.common.exception;public class BusinessException extends Exception{private static final long serialVersionUID = 1L; public BusinessException() { // TODO Auto-generated constructor stub } public BusinessException(String message) { super(message); // TODO Auto-generated constructor stub } public BusinessException(Throwable cause) { super(cause); // TODO Auto-generated constructor stub } public BusinessException(String message, Throwable cause) { super(message, cause); // TODO Auto-generated constructor stub } }
3、添加错误页面errorpage.jsp(在本文中我只给出这一个错误页面示例,大家如果要定义其他错误页面示例可根据前面的结构图自己实现)
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" isErrorPage="true"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%String path= request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>error page</title> <script type="text/javascript"> $(function(){ $("#center-div").center(true); }) </script> </head> <body style="margin: 0;padding: 0;background-color: #f5f5f5;"> <div id="center-div"> <table style="height: 100%; width: 600px; text-align: center;"> <tr> <td> <%= exception.getMessage()%> <p style="line-height: 12px; color: #666666; font-family: Tahoma, '宋体'; font-size: 12px; text-align: left;"> <a href="javascript:history.go(-1);">返回</a>!!! </p> </td> </tr> </table> </div> </body> </html>
4、在applicationContext.xml配置文件中添加以下配置,注意修改对应的类路径和错误页面路径,如果有多个错误页面,添加prop标签即可
<bean id="exceptionResolver" class="com.common.exception.inter.CustomSimpleMappingExceptionResolver"> <property name="exceptionMappings"> <props> <prop key="com.common.exception.BusinessException">error/errorpage</prop> </props> </property> </bean>
@RequestMapping(value="logout",method = RequestMethod.GET)public String logout(HttpServletRequest request,HttpServletResponse response) throws BusinessException{try {request.getSession().invalidate();} catch (Exception e) {throw new BusinessException("请求异常");}return "index";}
6、以上配置完成就已经实现了自定义异常,最后我们在web.xml配置文件添加以下配置,自定义一些常见错误页面,注意基础异常返回的错误页面直接根据web.xml中映射关系返回,不经过applicationContext.xml中的映射关系。
<!-- 自定义错误页面 --> <error-page> <error-code>400</error-code> <location>/WEB-INF/page/error/400.jsp</location> </error-page><error-page> <error-code>403</error-code> <location>/WEB-INF/page/error/403.jsp</location> </error-page> <error-page> <error-code>404</error-code> <location>/WEB-INF/page/error/404.jsp</location> </error-page> <error-page> <error-code>405</error-code> <location>/WEB-INF/page/error/405.jsp</location> </error-page> <error-page> <error-code>500</error-code> <location>/WEB-INF/page/error/500.jsp</location> </error-page> <error-page> <exception-type>java.lang.Exception</exception-type> <location>/WEB-INF/page/error/errorpage.jsp</location> </error-page> <error-page> <exception-type>java.lang.NullPointerException</exception-type> <location>/WEB-INF/page/error/errorpage.jsp</location> </error-page> <error-page> <exception-type>javax.servlet.ServletException</exception-type> <location>/WEB-INF/page/error/errorpage.jsp</location> </error-page>
0 0
- springmvc 自定义异常处理机制
- SpringMVC:异常处理机制与自定义异常处理
- springmvc 自定义异常处理
- 自定义异常处理机制
- springMVC 异常页面处理机制
- springmvc 统一处理异常机制
- SpringMVC异常处理机制详解
- SpringMVC统一异常处理机制
- springmvc的自定义异常处理
- springmvc自定义异常统一处理
- 自定义异常类(SpringMVC的异常处理)
- springMvc 自定义注解以及自定义异常处理
- c++自定义异常处理机制
- c++自定义异常处理机制 .
- springMVC入门--7.异常处理机制
- SpringMVC自定义拦截器与异常处理
- SpringMVC自定义拦截器与异常处理
- Springmvc异常处理【Springmvc】
- CSS3 pointer-events:none应用举例及扩展
- 关于下拉框option在IE下jquery方法hide()无效的解决办法
- 查看postgres数据库端口
- 模拟数据丢失(truncate table)
- redis与spring集成--不使用spring-data-redis
- springmvc 自定义异常处理机制
- 循环队列之循环队列长度和头尾指针关系
- oracle下lag和lead分析函数
- python post提交json 返回json值
- JAVA虚拟机学习实践2-实践
- iOS9新特性之(OC及Swift)实现3D Touch
- String类练习讲解-统计字符串中出现连续字符的次数
- win apache配置虚拟目录
- leetcode上的Sort a linked list using insertion sort