Streben 2 - Ausnahmebehandlung

StrutsBietet eine einfachere Möglichkeit, nicht erfasste Ausnahmen zu behandeln und Benutzer auf eine dedizierte Fehlerseite umzuleiten. Sie können Struts einfach so konfigurieren, dass für verschiedene Ausnahmen unterschiedliche Fehlerseiten vorhanden sind.

Struts erleichtert die Ausnahmebehandlung durch die Verwendung des Interceptors "Ausnahme". Der Interceptor "Ausnahme" ist Teil des Standardstapels, sodass Sie keine zusätzlichen Schritte ausführen müssen, um ihn zu konfigurieren. Es ist sofort einsatzbereit und kann verwendet werden.

Sehen wir uns ein einfaches Hello World-Beispiel mit einigen Änderungen in der Datei HelloWorldAction.java an. Hier haben wir bewusst eine NullPointer-Ausnahme in unsere eingeführtHelloWorldAction Aktionscode.

package com.tutorialspoint.struts2;

import com.opensymphony.xwork2.ActionSupport;

public class HelloWorldAction extends ActionSupport{
   private String name;

   public String execute(){
      String x = null;
      x = x.substring(0);
      return SUCCESS;
   }
   
   public String getName() {
      return name;
   }

   public void setName(String name) {
      this.name = name;
   }
}

Lassen Sie uns den Inhalt von behalten HelloWorld.jsp wie folgt -

<%@ page contentType = "text/html; charset = UTF-8" %>
<%@ taglib prefix = "s" uri = "/struts-tags" %>

<html>
   <head>
      <title>Hello World</title>
   </head>
   
   <body>
      Hello World, <s:property value = "name"/>
   </body>
</html>

Es folgt der Inhalt von index.jsp - -

<%@ page language = "java" contentType = "text/html; charset = ISO-8859-1"
   pageEncoding = "ISO-8859-1"%>
<%@ taglib prefix = "s" uri = "/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
   "http://www.w3.org/TR/html4/loose.dtd">

<html>
   <head>
      <title>Hello World</title>
   </head>
   
   <body>
      <h1>Hello World From Struts2</h1>
      <form action = "hello">
         <label for = "name">Please enter your name</label><br/>
         <input type = "text" name = "name"/>
         <input type = "submit" value = "Say Hello"/>
      </form>
   </body>
</html>

Ihre struts.xml sollte aussehen wie -

<?xml version = "1.0" Encoding = "UTF-8"?>
<!DOCTYPE struts PUBLIC
   "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
   "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
   <constant name = "struts.devMode" value = "true" />
   <package name = "helloworld" extends = "struts-default">
     
      <action name = "hello" 
         class = "com.tutorialspoint.struts2.HelloWorldAction" 
         method = "execute">
         <result name = "success">/HelloWorld.jsp</result>
      </action>

   </package>
</struts>

Klicken Sie nun mit der rechten Maustaste auf den Projektnamen und klicken Sie auf Export > WAR Fileum eine War-Datei zu erstellen. Stellen Sie diese WAR dann im Webanwendungsverzeichnis von Tomcat bereit. Starten Sie abschließend den Tomcat-Server und versuchen Sie, auf die URL zuzugreifenhttp://localhost:8080/HelloWorldStruts2/index.jsp. Daraufhin wird der folgende Bildschirm angezeigt:

Geben Sie einen Wert "Struts2" ein und senden Sie die Seite. Sie sollten die folgende Seite sehen -

Wie im obigen Beispiel gezeigt, leistet der Standard-Ausnahmeabfangjäger hervorragende Arbeit bei der Behandlung der Ausnahme.

Lassen Sie uns jetzt eine eigene Fehlerseite für unsere Ausnahme erstellen. Erstellen Sie eine Datei mit dem NamenError.jsp mit folgenden Inhalten -

<%@ page language = "java" contentType = "text/html; charset = ISO-8859-1"
	pageEncoding = "ISO-8859-1"%>
<%@ taglib prefix = "s" uri = "/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
   "http://www.w3.org/TR/html4/loose.dtd">

<html>
   <head>
      <title></title>
   </head>
   
   <body>
      This is my custom error page
   </body>
</html>

Lassen Sie uns nun Struts so konfigurieren, dass diese Fehlerseite im Falle einer Ausnahme verwendet wird. Lassen Sie uns das ändernstruts.xml wie folgt -

<?xml version = "1.0" Encoding = "UTF-8"?>
<!DOCTYPE struts PUBLIC
   "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
   "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
   <constant name = "struts.devMode" value = "true" />
   <package name = "helloworld" extends = "struts-default">
   
      <action name = "hello" 
         class = "com.tutorialspoint.struts2.HelloWorldAction" 
         method = "execute">
         <exception-mapping exception = "java.lang.NullPointerException"
         result = "error" />
         <result name = "success">/HelloWorld.jsp</result>
         <result name = "error">/Error.jsp</result>
      </action>

   </package>
</struts>

Wie im obigen Beispiel gezeigt, haben wir jetzt Struts so konfiguriert, dass die dedizierte Error.jsp für die NullPointerException verwendet wird. Wenn Sie das Programm jetzt erneut ausführen, wird nun die folgende Ausgabe angezeigt:

Darüber hinaus verfügt das Struts2-Framework über einen Interceptor zum Protokollieren der Ausnahmen. Indem wir dem Logger ermöglichen, die nicht erfassten Ausnahmen zu protokollieren, können wir einfach die Stapelverfolgung überprüfen und herausfinden, was schief gelaufen ist

Globale Ausnahmezuordnungen

Wir haben gesehen, wie wir mit aktionsspezifischen Ausnahmen umgehen können. Wir können global eine Ausnahme festlegen, die für alle Aktionen gilt. Um beispielsweise dieselben NullPointerException-Ausnahmen abzufangen, könnten wir hinzufügen<global-exception-mappings...> Das Tag im Tag <package ...> und sein Tag <result ...> sollten wie folgt im Tag <action ...> in der Datei struts.xml hinzugefügt werden.

<?xml version = "1.0" Encoding = "UTF-8"?>
<!DOCTYPE struts PUBLIC
   "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
   "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
   <constant name = "struts.devMode" value = "true" />
   <package name = "helloworld" extends = "struts-default">
      <global-exception-mappings>
         <exception-mapping exception = "java.lang.NullPointerException"
         result = "error" />
      </global-exception-mappings>

      <action name = "hello" 
         class = "com.tutorialspoint.struts2.HelloWorldAction" 
         method = "execute">
         <result name = "success">/HelloWorld.jsp</result>
         <result name = "error">/Error.jsp</result>
      </action>

   </package>
</struts>