1. Clasificación de anomalías
Las excepciones de Java se dividen en dos categorías: "Verificar" y "No check". La palabra "verificar" significa que cuando se compila el código, el compilador verificará si hay algún manejo de excepciones (atrapar o vomitar). Para las excepciones clasificadas que necesitan ser verificadas, si no se procesan, la compilación no podrá aprobarse.
Cuando era principiante, a menudo me pregunto por qué se deben manejar excepciones de esta manera. Más tarde entendí un poco, solo hay dos tipos de anormalidades: subjetivo y objetivo. Uno se puede evitar en la mayoría de los casos y el otro no se puede evitar en la mayoría de los casos.
Las excepciones como NullPointerException están en su mayoría vinculadas a las cualidades de los programadores (bien desarrolladas y probadas, básicamente no aparecerán después de que se ejecute el sistema). Básicamente se pueden evitar. La sintaxis de Java los usó para clasificarse como "excepciones sin cheque", que también guardó muchos problemas a los programadores y compiladores;
Las excepciones relacionadas con entornos externos como IOException son casi inevitables (la red colgará un día y el otro). Sin embargo, cuando se encuentra inesperadamente, el programa aún necesita marcar la diferencia, por lo que el compilador necesita instar al programador a verificar y ver si estas posibles excepciones inesperadas se han manejado. Cuando el objeto de excepción se pasa a un nodo, el programa puede realizar algunas medidas, como: devolver un mensaje al usuario ("El sistema está ocupado, intente nuevamente"), presionando un mensaje de excepción a la plataforma de monitoreo, etc.
2. Procesamiento de devolución unificado de excepciones
1. Procesamiento de contenedores
Los siguientes enumeran los métodos de procesamiento de TomCat, configúalos en Web.xml y manejalos de acuerdo con el código de retorno HTTP o el tipo de excepción:
<Enma-Page> <En Error-Code> 404 </Error-Code> <ocation> /webinf/views/error/404.jsp </bocation> </etring-page> <etrete-page> <etronset-page> <error-code> 500 </error-coode> <boation> /web-inf/views/error/500.jsp </boation> </error-page> <bage-page-page>-page> <Sception-Type> java.lang.throwable </excepcion-type> <boation> /webinf/views/error/throwable.jsp </bocation> </error-Page>
Desventajas: no se pueden manejar solicitudes que no necesitan devolver HTML, como AJAX;
2. Procesamiento de marco
Los siguientes enumera los métodos de procesamiento de Spring MVC
(1) Use SimpleMappingExceptionResolver, el simple manejador de excepciones incluido en Spring MVC;
(2) implementar la interfaz HandleRexceptionResolver Handler de excepciones personalizadas; (Se recomienda usarlo y puede admitir AJAX y otras extensiones)
(3) Use la anotación @ExceptionHandler para implementar el manejo de excepciones;
Tipo (1), configure en Spring-MVC.XML
< <
Desventajas: No se puede manejar solicitudes que no necesiten devolver HTML;
Tipo (2), la clase de implementación de la interfaz personalizada HandleRexceptionResolver
/** * Handler de excepciones personalizados: admite AJAX * @Author Wangxu * */public class MyExceptionHandler implementa HandLerExceptionResolver {public ModelAndView ResolveException (HttpServletRequest Solicitud, HttPservletResponse Response, Object Handler, Exception ex) {/ * Diferiate Ajax */Boolean isAjax = request.getheader ("X-solicitada con")! = null && "xmlhttprequest" .equals (request .getheader ("x-requisito-with"). toString ()); if (! isajax) {if (ex instanceof com.test.myexception1) {return new ModelAndView ("/error/e1"); } else if (ex instanciaf com.test.myexception1) {return new ModelAndView ("/error/e2"); } else {return new ModelAndView ("/Error/500"); }} String jsonres = "{/" mensaje/":/" " +" Excepción del sistema " +"/"}"; // Estructura personalizada y acoplamiento en primer plano PrintWriter out = null; intente {out = respuesta.getwriter (); request.setcharacterEncoding ("UTF-8"); Response.setContentType ("Text/Plain; Charset = UTF-8"); out.print (jsonres); out.flush (); } catch (ioException e) {E.PrintStackTrace (); } finalmente {out.close (); } return null; }}Y registre el procesador en Spring-Mvc.xml
<bean id = "excepcionHandler"/>
Ventajas: puede manejar las solicitudes de AJAX, y también es conveniente para la codificación para implementar extensiones funcionales, como monitoreo de excepciones, etc.
Tipo (3), @ExceptionHandler Annotation
@ControllerPublic TestExceptionHandlerController {@ExceptionHandler ({myException1.class}) Exception public String (MyException1 e) {return "/error/e1"; } @RequestMapping ("/Mary") public void test () {Throw New MyException1 ("¡Sin dinero!"); }}Desventajas: el método de @ExceptionHandler debe estar bajo el mismo controlador que el método de posibles excepciones de lanzamiento. (No recomendado)
3. Combinación
En proyectos reales, al manejar devoluciones uniformes de excepciones, algunas excepciones o extensiones personalizadas se entregarán al marco, y la asignación del código de retorno HTTP se entregará al contenedor, porque el código de retorno HTTP es más externo, algunos no pueden llegar al marco, y otros no son una excepción al marco (como 404 y resorte MVC). El marco se ejecuta en el contenedor. Cuando el marco toma la excepción primero y la devuelve, el contenedor ya no se asignará.
Lo anterior se trata de este artículo, espero que sea útil para el aprendizaje de todos.