Spring - Exemple de gestion des exceptions

L'exemple suivant montre comment écrire une application Web simple à l'aide de Spring MVC Framework, qui peut gérer une ou plusieurs exceptions déclenchées dans ses contrôleurs. Pour commencer, mettons en place un IDE Eclipse fonctionnel et suivons les étapes suivantes pour développer une application Web basée sur un formulaire dynamique à l'aide de Spring Web Framework -

Étape La description
1 Créez un projet Web dynamique avec un nom HelloWeb et créez un package com.tutorialspoint sous le dossier src dans le projet créé.
2 Faites glisser et déposez ci-dessous Spring et d'autres bibliothèques dans le dossier WebContent / WEB-INF / lib .
3 Créez une classe Java Student , StudentController et SpringException sous le package com.tutorialspoint .
4 Créez les fichiers de configuration Spring Web.xml et HelloWeb-servlet.xml dans le dossier WebContent / WEB-INF .
5 Créez un sous-dossier avec un nom jsp sous le dossier WebContent / WEB-INF . Créez une vue des fichiers student.jsp , result.jsp , error.jsp et ExceptionPage.jsp sous le sous-dossier jsp .
6 La dernière étape consiste à créer le contenu de tous les fichiers source et de configuration et à exporter l'application comme expliqué ci-dessous.

Voici le contenu de Student.java fichier

package com.tutorialspoint;

public class Student {
   private Integer age;
   private String name;
   private Integer id;

   public void setAge(Integer age) {
      this.age = age;
   }
   public Integer getAge() {
      return age;
   }
   public void setName(String name) {
      this.name = name;
   }
   public String getName() {
      return name;
   }
   public void setId(Integer id) {
      this.id = id;
   }
   public Integer getId() {
      return id;
   }
}

Voici le contenu de SpringException.java fichier

package com.tutorialspoint;

public class SpringException extends RuntimeException{
   private String exceptionMsg;
   
   public SpringException(String exceptionMsg) {
      this.exceptionMsg = exceptionMsg;
   }
   public String getExceptionMsg(){
      return this.exceptionMsg;
   }
   public void setExceptionMsg(String exceptionMsg) {
      this.exceptionMsg = exceptionMsg;
   }
}

Voici le contenu de StudentController.javafichier. Ici, vous devez annoter une méthode de service à l'aide de @ExceptionHandler où vous pouvez spécifier une ou plusieurs exceptions à gérer. Si vous spécifiez plusieurs exceptions, vous pouvez utiliser des valeurs séparées par des virgules.

package com.tutorialspoint;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.ui.ModelMap;

@Controller
public class StudentController {
   @RequestMapping(value = "/student", method = RequestMethod.GET)
   public ModelAndView student() {
      return new ModelAndView("student", "command", new Student());
   }
   @RequestMapping(value = "/addStudent", method = RequestMethod.POST)
   @ExceptionHandler({SpringException.class})
   public String addStudent( @ModelAttribute("HelloWeb")Student student, 
      ModelMap model) {
      
      if(student.getName().length() < 5 ){
         throw new SpringException("Given name is too short");
      } else {
         model.addAttribute("name", student.getName());
      }
      
      if( student.getAge() < 10 ){
         throw new SpringException("Given age is too low");
      } else {
         model.addAttribute("age", student.getAge());
      }
      model.addAttribute("id", student.getId());
      return "result";
   }
}

Voici le contenu du fichier de configuration Spring Web web.xml

<web-app id = "WebApp_ID" version = "2.4"
   xmlns = "http://java.sun.com/xml/ns/j2ee" 
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://java.sun.com/xml/ns/j2ee 
   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
 
   <display-name>Spring Exception Handling</display-name>
 
   <servlet>
      <servlet-name>HelloWeb</servlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      <load-on-startup>1</load-on-startup>
   </servlet>
   
   <servlet-mapping>
      <servlet-name>HelloWeb</servlet-name>
      <url-pattern>/</url-pattern>
   </servlet-mapping>
  
</web-app>

Voici le contenu d'un autre fichier de configuration Spring Web HelloWeb-servlet.xml

<beans xmlns = "http://www.springframework.org/schema/beans"
   xmlns:context = "http://www.springframework.org/schema/context"
   axmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation = "http://www.springframework.org/schema/beans     
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
   http://www.springframework.org/schema/context 
   http://www.springframework.org/schema/context/spring-context-3.0.xsd">

   <context:component-scan base-package = "com.tutorialspoint" />

   <bean class = "org.springframework.web.servlet.view.InternalResourceViewResolver">
      <property name = "prefix" value = "/WEB-INF/jsp/" />
      <property name = "suffix" value = ".jsp" />
   </bean>

   <bean class = "org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
      <property name = "exceptionMappings">
         <props>
            <prop key = "com.tutorialspoint.SpringException">
               ExceptionPage
            </prop>
         </props>
      </property>
      <property name = "defaultErrorView" value = "error"/>
   </bean>

</beans>

Ici, vous avez spécifié ExceptionPage comme vue d'exception au cas où SpringException se produirait, s'il existe un autre type d'exception, une erreur de vue générique se produira.

Voici le contenu du fichier de vue Spring student.jsp

<%@taglib uri = "http://www.springframework.org/tags/form" prefix = "form"%>
<html>
   <head>
      <title>Spring MVC Exception Handling</title>
   </head>

   <body>
      <h2>Student Information</h2>
      <form:form method = "POST" action = "/HelloWeb/addStudent">
         <table>
            <tr>
               <td><form:label path = "name">Name</form:label></td>
               <td><form:input path = "name" /></td>
            </tr>
            <tr>
               <td><form:label path = "age">Age</form:label></td>
               <td><form:input path = "age" /></td>
            </tr>
            <tr>
               <td><form:label path = "id">id</form:label></td>
               <td><form:input path = "id" /></td>
            </tr>
            <tr>
               <td colspan = "2"><input type = "submit" value = "Submit"/></td>
            </tr>
         </table>  
      </form:form>
   </body>
   
</html>

Voici le contenu du fichier de vue Spring error.jsp

<html>
   <head>
      <title>Spring Error Page</title>
   </head>

   <body>
      <p>An error occured, please contact webmaster.</p>
   </body>
</html>

Voici le contenu du fichier de vue Spring ExceptionPage.jsp. Ici, vous accéderez à l'instance d'exception via $ {exception}.

<%@taglib uri = "http://www.springframework.org/tags/form" prefix = "form"%>
<html>
   <head>
      <title>Spring MVC Exception Handling</title>
   </head>

   <body>
      <h2>Spring MVC Exception Handling</h2>
      <h3>${exception.exceptionMsg}</h3>
   </body>
</html>

Voici le contenu du fichier de vue Spring result.jsp

<%@taglib uri = "http://www.springframework.org/tags/form" prefix = "form"%>
<html>
   <head>
      <title>Spring MVC Form Handling</title>
   </head>

   <body>
      <h2>Submitted Student Information</h2>
      
      <table>
         <tr>
            <td>Name</td>
            <td>${name}</td>
         </tr>
         <tr>
            <td>Age</td>
            <td>${age}</td>
         </tr>
         <tr>
            <td>ID</td>
            <td>${id}</td>
         </tr>
      </table>  
   </body>
   
</html>

Enfin, voici la liste des bibliothèques Spring et autres à inclure dans votre application Web. Il vous suffit de faire glisser ces fichiers et de les déposerWebContent/WEB-INF/lib dossier.

  • commons-logging-x.y.z.jar
  • org.springframework.asm-x.y.z.jar
  • org.springframework.beans-x.y.z.jar
  • org.springframework.context-x.y.z.jar
  • org.springframework.core-x.y.z.jar
  • org.springframework.expression-x.y.z.jar
  • org.springframework.web.servlet-x.y.z.jar
  • org.springframework.web-x.y.z.jar
  • spring-web.jar

Une fois que vous avez terminé de créer les fichiers source et de configuration, exportez votre application. Faites un clic droit sur votre application et utilisez leExport > WAR File option et enregistrez votreHelloWeb.warfichier dans le dossier webapps de Tomcat .

Démarrez maintenant votre serveur Tomcat et assurez-vous que vous pouvez accéder à d'autres pages Web à partir du dossier Webapps à l'aide d'un navigateur standard. Essayez maintenant d'accéder à l'URLhttp://localhost:8080/HelloWeb/student. Si tout va bien avec votre application Web Spring et, vous devriez voir le résultat suivant.

Entrez les valeurs comme indiqué ci-dessus et cliquez sur le bouton Soumettre. Si tout va bien avec votre application Web Spring, vous devriez voir le résultat suivant.