Struts 2 - Gestion des exceptions

Strutsfournit un moyen plus simple de gérer les exceptions non interceptées et de rediriger les utilisateurs vers une page d'erreur dédiée. Vous pouvez facilement configurer Struts pour avoir différentes pages d'erreur pour différentes exceptions.

Struts facilite la gestion des exceptions grâce à l'utilisation de l'intercepteur "exception". L'intercepteur "d'exception" est inclus dans la pile par défaut, vous n'avez donc rien à faire de plus pour le configurer. Il est prêt à l'emploi et prêt à être utilisé.

Voyons un exemple simple de Hello World avec quelques modifications dans le fichier HelloWorldAction.java. Ici, nous avons délibérément introduit une exception NullPointer dans notreHelloWorldAction code d'action.

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;
   }
}

Gardons le contenu de HelloWorld.jsp comme suit -

<%@ 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>

Voici le contenu de 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>

Votre struts.xml devrait ressembler à -

<?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>

Maintenant, faites un clic droit sur le nom du projet et cliquez sur Export > WAR Filepour créer un fichier War. Déployez ensuite ce WAR dans le répertoire webapps de Tomcat. Enfin, démarrez le serveur Tomcat et essayez d'accéder à l'URLhttp://localhost:8080/HelloWorldStruts2/index.jsp. Cela produira l'écran suivant -

Entrez une valeur "Struts2" et soumettez la page. Vous devriez voir la page suivante -

Comme indiqué dans l'exemple ci-dessus, l'intercepteur d'exceptions par défaut fait un excellent travail de gestion de l'exception.

Créons maintenant une page d'erreur dédiée pour notre exception. Créez un fichier appeléError.jsp avec le contenu suivant -

<%@ 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>

Configurons maintenant Struts pour utiliser cette page d'erreur en cas d'exception. Modifions lestruts.xml comme suit -

<?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>

Comme indiqué dans l'exemple ci-dessus, nous avons maintenant configuré Struts pour utiliser le Error.jsp dédié pour NullPointerException. Si vous réexécutez le programme maintenant, vous verrez maintenant la sortie suivante -

En plus de cela, le framework Struts2 est livré avec un intercepteur de «journalisation» pour enregistrer les exceptions. En permettant à l'enregistreur de consigner les exceptions non interceptées, nous pouvons facilement consulter la trace de la pile et déterminer ce qui n'a pas fonctionné

Mappages d'exceptions globales

Nous avons vu comment nous pouvons gérer une exception spécifique à une action. Nous pouvons définir une exception globalement qui s'appliquera à toutes les actions. Par exemple, pour attraper les mêmes exceptions NullPointerException, nous pourrions ajouter<global-exception-mappings...> La balise à l'intérieur de la balise <package ...> et sa balise <result ...> doivent être ajoutées à l'intérieur de la balise <action ...> dans le fichier struts.xml comme suit -

<?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>