1. Anomalieklassifizierung
Java-Ausnahmen sind in zwei Kategorien unterteilt: "Check" und "Nicht-Check". Das Wort "Check" bedeutet, dass der Compiler beim Kompilieren des Codes prüft, ob eine Ausnahmebehandlung vorliegt (fangen oder übergeben). Bei Ausnahmen, die als überprüft eingestuft werden, kann die Zusammenstellung nicht übergeben werden, wenn sie nicht verarbeitet werden müssen.
Als ich Anfänger war, frage ich mich oft, warum Ausnahmen auf diese Weise behandelt werden sollten? Später verstand ich ein wenig, es gibt nur zwei Arten von Anomalien: subjektiv und objektiv. Einer kann in den meisten Fällen vermieden werden und der andere kann in den meisten Fällen nicht vermieden werden.
Ausnahmen wie nullPointerexception sind hauptsächlich mit den Qualitäten der Programmierer verbunden (gut entwickelt und getestet, sie werden im Grunde nicht nach dem Ausführen des Systems auftauchen). Sie können im Grunde vermieden werden. Die Java-Syntax verwendete sie als "Nicht-Check-Ausnahmen", wodurch auch Programmierer und Compiler viel Schwierigkeiten gerettet wurden.
Ausnahmen im Zusammenhang mit externen Umgebungen wie IOException sind fast unvermeidlich (das Netzwerk wird eines Tages und an den anderen auflegen). Wenn jedoch unerwartet begegnet wird, muss das Programm jedoch noch einen Unterschied machen, sodass der Compiler den Programmierer auffordern muss, zu überprüfen, ob diese möglichen unerwarteten Ausnahmen behandelt wurden. Wenn das Ausnahmeobjekt an einen Knoten übergeben wird, kann das Programm einige Maßnahmen ausführen, wie z.
2. Einheitliche Renditeverarbeitung von Ausnahmen
1. Containerverarbeitung
Im Folgenden werden die Verarbeitungsmethoden von Tomcat aufgeführt, konfigurieren Sie sie unter web.xml und verarbeiten Sie sie gemäß dem HTTP -Rückgabecode oder aus Ausnahmetyp:
<Fehlerpage> <Fehlercode> 404 </fehlercode> <position> /web-inf/views/error/404.jsp </location> </fehler-page> <fehler-page> <fehler-page> <fehler-code> 500 </fehlercode> <position> /web-inf/vage <exception-type> java.lang.throwable </exception-type> <position> /web-inf/views/error/throwable.jsp </location> </fehler-page>
Nachteile: Anfragen, die HTML wie Ajax nicht zurückgeben müssen;
2. Rahmenverarbeitung
Im Folgenden werden die Verarbeitungsmethoden von Spring MVC aufgeführt
(1) Verwenden Sie den SimpleMappingExceptionResolver, den einfachen Ausnahmebehandler, der in Spring MVC enthalten ist.
(2) implementieren Sie den Benutzeroberflächen -Handler mit Handler mit Handler. (Es wird empfohlen, es zu verwenden, und kann Ajax und andere Erweiterungen unterstützen.)
(3) Verwenden Sie die @ExceptionHandler -Annotation, um die Ausnahmebehandlung zu implementieren.
Typ (1), konfigurieren Sie unter Spring-MVC.xml
<!-- Go to the exception thrown by the Controller to a specific view --> <bean> <property name="exceptionMappings"> <props> <!-- Different exceptions jump separately-> <!-- You can customize different exceptions--> <prop key="com.test.MyException1">/error/e1</prop> <prop key="com.test.MyException2">/error/e2</prop> <!-Wenn Sie keine Ausnahmen anpassen möchten, konfigurieren Sie einfach die folgenden-> <propet key = "java.lang.throwable">/error/500 </prop> </props> </property> </bean>
Nachteile: Anfragen, die keine HTML zurückgeben müssen;
Typ (2), die Implementierungsklasse der benutzerdefinierten HandlexceptionResolver -Schnittstelle
/** * benutzerdefinierter Ausnahmebehandler: Unterstützt Ajax * @Author Wangxu * */public class myExceptionHandler implementiert HandlexceptionResolver {public modelAndView ResolveException (httpServletRequest -Anforderung, httpServletResponse -Antwort, Objekte, Ausnahme, Ausnahme) {/ * differenzieren ajax */boolean isajax = request.getheader ("x-requested-with")! If (! } else if (ex instanceof com.test.myException1) {return New ModelAndView ("/error/e2"); } else {neuer modelAndView zurückgeben ("/error/500"); }} String jsonres = "{/" message/":/" " +" System Exception " +"/"}"; // benutzerdefinierte Struktur und Vordergrund -Docking -Printwriter out = null; try {out = response.getWriter (); request.setcharactercoding ("utf-8"); Antwort.SetContentType ("text/plain; charSet = utf-8"); out.print (jsonres); out.flush (); } catch (ioException e) {e.printstacktrace (); } endlich {out.close (); } return null; }}Und registrieren Sie den Prozessor unter Spring-MVC.xml
<bean id = "exceptionHandler"/>
Vorteile: Es kann AJAX -Anfragen bearbeiten, und es ist auch für die Implementierung von funktionalen Erweiterungen wie Ausnahmeüberwachung usw. bequem.
Typ (3), @ExceptionHandler Annotation
@ControllerPublic class TestExceptionHandlerController {@ExceptionHandler ({myException1.class}) public String -Ausnahme (myException1 e) {return "/error/e1"; } @RequestMapping ("/mary") public void test () {neue myException1 ("Nein Geld!"); }}Nachteile: Die Methode von @ExceptionHandler muss unter demselben Controller wie die Methode für mögliche Ausnahmen sein. (Nicht empfohlen)
3. Kombination
Bei den tatsächlichen Projekten werden beim Umgang mit einheitlichen Rückgaben von Ausnahmen einige benutzerdefinierte Ausnahmen oder Erweiterungen an den Framework übergeben, und die Zuordnung des HTTP -Rückkehrcode wird dem Container übergeben, da der HTTP -Rückgabercode mehr den Framework ist, und einige sind keine Ausnahme des Rahmens (z. B. 404 und Feder MVC). Das Framework läuft im Container. Wenn das Framework die Ausnahme zuerst nimmt und zurückgibt, wird der Container nicht mehr zugeordnet.
Das Obige dreht sich alles um diesen Artikel, ich hoffe, es wird für das Lernen aller hilfreich sein.