Manejo de excepciones Javaweb

Publicación de blog de referencia: https://www.cnblogs.com/andy-zhou/p/5317820.html

https://jingyan.baidu.com/article/d3b74d64cb430b1f77e60939.html

1. Manejador de excepciones

package com.hongao.agent.common;

import java.util.HashMap;
import java.util.Map;
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 com.alibaba.druid.support.json.JSONUtils;
import com.hongao.agent.consts.ErrorMessage;
import com.hongao.agent.consts.OssRespCodes;
import com.hongao.parent.exception.HaBizException;
import com.hongao.parent.exception.HaRtException;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.HandlerExceptionResolver;

/**
* @author eadela 
* @date 2017年12月18日 上午11:45:42
* @desc 异常处理器
*/
public class AgentExceptionResolver implements HandlerExceptionResolver {
	
	private final Logger logger = LoggerFactory.getLogger(getClass());
	
	@Override
	public ModelAndView resolveException(HttpServletRequest request,
            HttpServletResponse response, Object object, Exception exception) {
		// 判断是否ajax请求
        if (!(request.getHeader("accept").indexOf("application/json") > -1 || (request
                .getHeader("X-Requested-With") != null && request.getHeader(
                "X-Requested-With").indexOf("XMLHttpRequest") > -1))) {
            // 如果不是ajax,JSP格式返回
            // 为安全起见,只有业务异常我们对前端可见,否则否则统一归为系统异常
            Map<String, Object> map = new HashMap<String, Object>();
            map.put("success", false);
            if (exception instanceof HaBizException) {
                map.put(OssRespCodes.ERROR_MSG, exception.getMessage());
                logger.error("show business exception:{}", exception.getMessage());
            } else if (exception instanceof HaRtException) {
                map.put(OssRespCodes.ERROR_MSG, exception.getMessage());
                logger.error("show runtime exception:{}", exception.getMessage());
            } else {
                map.put(OssRespCodes.ERROR_MSG, ErrorMessage.SYS_EXCEPTION);
                logger.error("show exception:{}", ErrorMessage.SYS_EXCEPTION);
            }
            //对于非ajax请求,我们都统一跳转到error.jsp页面
            return new ModelAndView("error", map);
        } else {
        	Map<String, Object> map = new HashMap<String, Object>();
            // 如果是ajax请求,JSON格式返回
            try {
                response.setContentType("application/json;charset=UTF-8");
                PrintWriter writer = response.getWriter();
                
                map.put("success", false);
                // 为安全起见,只有业务异常我们对前端可见,否则统一归为系统异常
                if (exception instanceof HaBizException) {
                    map.put(OssRespCodes.ERROR_MSG, exception.getMessage());
                    logger.error("show business exception:{}",exception.getMessage());
                } else if (exception instanceof HaRtException) {
                    map.put(OssRespCodes.ERROR_MSG, exception.getMessage());
                    logger.error("show runtime exception:{}", exception.getMessage());
                } else {
                    map.put(OssRespCodes.ERROR_MSG, ErrorMessage.SYS_EXCEPTION);
                    logger.error("show exception:{}",ErrorMessage.SYS_EXCEPTION);
                }
                writer.write(JSONUtils.toJSONString(map));
                writer.flush();
                writer.close();
                return new ModelAndView("error");
            } catch (IOException e) {
            	logger.error("show exception error:{}",e.getMessage());
                map.put(OssRespCodes.ERROR_MSG, ErrorMessage.SYS_EXCEPTION);
                //异常中的异常返回到错误页面
                return new ModelAndView("error", map);
            }
        }
	}

}
2, carga de spring-mvc.xml

<!-- 异常处理类 -->
<bean id="exceptionResolver" class="com.hongao.agent.common.AgentExceptionResolver"></bean>
3. Página de error

<%@ page language="java" import="java.util.*" pageEncoding="utf-8" isErrorPage="true"%>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="zh-cmn">
<head>
</head>  
<body>

<div class="s_main_wrap s_no_top nicescroll">
    <div class="s_main_fixed_bg"></div>
    <div class="s_main">

        <div class="s_header_title">
            <span class="s_header_left">
                 <a href="#" οnclick=(history.back())><i class="icon iconfont"></i></a>
            </span>
            <span class="s_f18">错误消息</span>
        </div>
        <!-- end header title -->

		<h1>抱 歉!</h1> 
  		<div style="padding:2% 0;text-indent:2em;">尊敬的用户:我们致力于提供更好的服务,但人算不如天算,有些错误发生了,希望是在控制的范围内……如果问题重复出现,请向系统管理员反馈。</div>
		错误详情:<%= exception.getMessage() %> 
    </div>
	  <%-- <div> 
	    <center> 
	      <a href="${pageContext.request.contextPath}">回首页</a> | <a href="javascript:history.go(-1);">上一页</a> 
	    </center> 
	  </div>  --%>
</div>
<!-- end main -->


</body>
</html>
Prueba:

lanzar una nueva HaBizException ("XXXX");

Se pueden configurar 400, 500 errores en web.xml, hay un procesamiento de página de error


Publicado 64 artículos originales · Me gusta9 · Visita 110,000+

Supongo que te gusta

Origin blog.csdn.net/eadela/article/details/78983555
Recomendado
Clasificación