1. Classification des anomalies
Les exceptions Java sont divisées en deux catégories: "vérifier" et "non-chéri". Le mot «vérifier» signifie que lorsque le code est compilé, le compilateur vérifie s'il y a une exception (capture ou jetant). Pour les exceptions classées comme ayant besoin d'être vérifiées, si elles ne sont pas traitées, la compilation ne pourra pas être transmise.
Quand j'étais débutant, je me demande souvent pourquoi les exceptions devraient être traitées de cette manière? Plus tard, j'ai compris un peu, il n'y a que deux types d'anomalies: subjectif et objectif. L'un peut être évité dans la plupart des cas et l'autre ne peut être évité dans la plupart des cas.
Des exceptions comme NullPointerException sont principalement liées aux qualités des programmeurs (bien développées et testées, ils ne apparaîtront essentiellement pas après l'exécution du système). Ils peuvent essentiellement être évités. La syntaxe Java les a utilisées pour classer comme "exceptions non chérantes", qui ont également économisé des programmeurs et des compilateurs beaucoup de problèmes;
Les exceptions liées aux environnements externes tels que IOException sont presque inévitables (le réseau raccrochera un jour et l'autre). Cependant, lors de la rencontre de façon inattendue, le programme doit encore faire une différence, donc le compilateur doit exhorter le programmeur à vérifier et à voir si ces exceptions inattendues possibles ont été gérées. Lorsque l'objet d'exception est transmis à un nœud, le programme peut effectuer certaines mesures, telles que: renvoyer une invite à l'utilisateur ("Le système est occupé, veuillez réessayer"), en poussant un message d'exception à la plate-forme de surveillance, etc.
2. Traitement de retour unifié des exceptions
1. Traitement des conteneurs
Le suivant répertorie les méthodes de traitement de TomCat, les configurez sous web.xml et les gérez en fonction du code de retour HTTP ou du type d'exception:
<ror Error-Page> <Reur-Code> 404 </ Error-Code> <Location> /web-inf/views/error/404.jsp </ Location> </ Error-Page> <Reurr-Page> <Reurr-Page> <Reurrcode> 500 </ Error-Code> <pegit-type> java.lang.throwable </ exception-type> <l location> /web-inf/views/error/throwable.jsp </ location> </ error-page>
Inconvénients: ne peut pas gérer les demandes qui n'ont pas besoin de retourner HTML, comme Ajax;
2. Traitement du cadre
Le suivant répertorie les méthodes de traitement de Spring MVC
(1) Utilisez le SimplemappingExceptionResolver, le gestionnaire d'exceptions simples inclus dans Spring MVC;
(2) Implémentez l'interface HandlerexceptionResolver Except Handler Custom Upin; (Il est recommandé de l'utiliser et peut prendre en charge l'Ajax et d'autres extensions)
(3) Utilisez l'annotation @ExceptionHandler pour implémenter la gestion des exceptions;
Type (1), Configurez sous Spring-Mvc.xml
<! - Accédez à l'exception lancée par le contrôleur à une vue spécifique -> <an Bean> <propriété name = "exceptionmappings"> <props> <! - Différentes exceptions sauter séparément-> <! - Vous pouvez personnaliser différentes exceptions -> <prop> key = "com.test.myexception1"> / error / e1 </prop> <prop> <! - if you.myexception2 "> / error / o! Vous souhaitez personnaliser les exceptions, configurez simplement les éléments suivants -> <prop key = "java.lang.throwable"> / error / 500 </prop> </props> </ propriété> </ bean>
Inconvénients: ne peut pas gérer les demandes qui n'ont pas besoin de retourner HTML;
Type (2), Classe d'implémentation de l'interface personnalisée HandlerexceptionResolver
/ ** * Handler d'exception personnalisé: prend en charge ajax * @author wangxu * * / public class MyExceptionHandler implémente handlerexceptionResolver {public ModelAndView ResololException (httpsservletRequest request, httpservletResponse réponse, objet handler, exception ex) {/ * différencier ajax * / boolean isajax = request.getheader ("x-requied-with")! = null && "xmlhttprequest" .equals (request .getheader ("x-requied-with"). toString ()); if (! Isajax) {if (ex instanceof com.test.myException1) {return new ModelAndView ("/ Error / E1"); } else if (ex instanceof com.test.myException1) {return new ModelAndView ("/ error / e2"); } else {return new ModelandView ("/ Error / 500"); }} String JSONRES = "{/" Message / ": /" "+" Exception système "+" / "}"; // Structure personnalisée et doctorat de premier plan Printwriter out = null; try {out = réponse.getWriter (); request.SetcharAtterencoding ("UTF-8"); Response.SetContentType ("Text / PLAIN; charset = utf-8"); Out.print (JSONRES); out.flush (); } catch (ioException e) {e.printStackTrace (); } enfin {out.close (); } return null; }}Et enregistrer le processeur sous Spring-Mvc.xml
<bean id = "exceptionhandler" />
Avantages: il peut gérer les demandes AJAX, et il est également pratique pour le codage de mettre en œuvre des extensions fonctionnelles, telles que la surveillance des exceptions, etc.
Type (3), @ExceptionHandler Annotation
@ControllerPublic class TestExceptionHandlerController {@ExceptionHandler ({myException1.class}) Exception de chaîne publique (MyException1 e) {return "/ error / e1"; } @RequestMapping ("/ Mary") public void test () {Throw new MyException1 ("No Money!"); }}Inconvénients: la méthode de @ExceptionHandler doit être sous le même contrôleur que la méthode de lancer d'éventuelles exceptions. (Non recommandé)
3. Combinaison
Dans les projets réels, lors de la gestion des retours uniformes d'exceptions, certaines exceptions ou extensions personnalisées seront remises au cadre, et la cartographie du code de retour HTTP sera remise au conteneur, car le code de retour HTTP est plus extérieur, certains ne peuvent pas atteindre le cadre, et certains ne sont pas une exception au cadre (comme 404 et Spring MVC). Le cadre fonctionne dans le conteneur. Lorsque le cadre prend l'exception en premier et le renvoie, le conteneur ne sera plus mappé.
Ce qui précède concerne cet article, j'espère qu'il sera utile à l'apprentissage de tout le monde.