Servlets - Annotations

Jusqu'à présent, vous avez appris comment Servlet utilise le descripteur de déploiement (fichier web.xml) pour déployer votre application sur un serveur Web. Servlet API 3.0 a introduit un nouveau package appelé javax.servlet.annotation. Il fournit des types d'annotations qui peuvent être utilisés pour annoter une classe de servlet. Si vous utilisez une annotation, le descripteur de déploiement (web.xml) n'est pas requis. Mais vous devez utiliser tomcat7 ou toute version ultérieure de tomcat.

Les annotations peuvent remplacer la configuration XML équivalente dans le fichier descripteur de déploiement Web (web.xml), comme la déclaration de servlet et le mappage de servlet. Les conteneurs de servlet traiteront les classes annotées au moment du déploiement.

Les types d'annotations introduits dans Servlet 3.0 sont -

Sr.No. Annotation et description
1

@WebServlet

Pour déclarer un servlet.

2

@WebInitParam

Pour spécifier un paramètre d'initialisation.

3

@WebFilter

Pour déclarer un filtre de servlet.

4

@WebListener

Pour déclarer un WebListener

5

@HandlesTypes

Pour déclarer les types de classe qu'un ServletContainerInitializer peut gérer.

6

@HttpConstraint

Cette annotation est utilisée dans l'annotation ServletSecurity pour représenter les contraintes de sécurité à appliquer à toutes les méthodes de protocole HTTP pour lesquelles un élément HttpMethodConstraint correspondant ne se produit PAS dans l'annotation ServletSecurity.

sept

@HttpMethodConstraint

Cette annotation est utilisée dans l'annotation ServletSecurity pour représenter les contraintes de sécurité sur des messages de protocole HTTP spécifiques.

8

@MultipartConfig

Annotation qui peut être spécifiée sur une classe Servlet, indiquant que les instances du Servlet attendent des demandes conformes au type MIME multipart / form-data.

9

@ServletSecurity

Cette annotation est utilisée sur une classe d'implémentation Servlet pour spécifier les contraintes de sécurité à appliquer par un conteneur Servlet sur les messages de protocole HTTP.

Ici, nous avons discuté en détail de certaines des annotations.

@WebServlet

Le @WebServlet est utilisé pour déclarer la configuration d'un servlet avec un conteneur. Le tableau suivant contient la liste des attributs utilisés pour l'annotation WebServlet.

Sr.No. Attribut et description
1

String name

Nom du servlet

2

String[] value

Tableau de modèles d'URL

3

String[] urlPatterns

Tableau de modèles d'URL auxquels ce filtre s'applique

4

Int loadOnStartup

La valeur entière vous donne l'indication de commande de démarrage

5

WebInitParam[] initParams

Tableau de paramètres d'initialisation pour ce servlet

6

Boolean asyncSupported

Opération asynchrone prise en charge par ce servlet

sept

String smallIcon

Petite icône pour ce servlet, si présent

8

String largeIcon

Grande icône pour ce servlet, si présent

9

String description

Description de ce servlet, si présent

dix

String displayName

Afficher le nom de ce servlet, s'il est présent

Au moins un modèle d'URL DOIT être déclaré dans l'un ou l'autre value ou urlPattern attribut de l'annotation, mais pas les deux.

le value est recommandé pour une utilisation lorsque le modèle d'URL est le seul attribut défini, sinon urlPattern l'attribut doit être utilisé.

Exemple

L'exemple suivant décrit comment utiliser l'annotation @WebServlet. C'est un simple servlet qui affiche le texteHello Servlet.

import java.io.IOException; 
import java.io.PrintWriter; 
import javax.servlet.ServletException; 
import javax.servlet.annotation.WebInitParam; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
@WebServlet(value = "/Simple") 
public class Simple extends HttpServlet {

   private static final long serialVersionUID = 1L; 

   protected void doGet(HttpServletRequest request, HttpServletResponse response)  
      throws ServletException, IOException { 
   
      response.setContentType("text/html");   
      PrintWriter out = response.getWriter();   
      out.print("<html><body>");   
      out.print("<h3>Hello Servlet</h3>");   
      out.print("</body></html>");         
   }   
}

Compiler Simple.java de la manière habituelle et placez votre fichier de classe dans <Tomcat-installationdirectory> / webapps / ROOT / WEB-INF / classes.

Maintenant, essayez d'appeler n'importe quel servlet en exécutant simplement http: // localhost: 8080 / Simple . Vous verrez la sortie suivante sur la page Web.

Hello servlet

@WebInitParam

L'annotation @WebInitParam est utilisée pour spécifier un paramètre d'initialisation pour un servlet ou un filtre. Il est utilisé dans les annotations WebFilter ou WebSevlet. Le tableau suivant contient la liste des attributs utilisés pour l'annotation WebInitParam.

Sr.No. Attribut et description
1

String name

Nom du paramètre d'initialisation

2

String value

Valeur du paramètre d'initialisation

3

String description

Description du paramètre d'initialisation

Exemple

L'exemple suivant décrit comment utiliser l'annotation @WeInitParam avec l'annotation @WebServlet. C'est un simple servlet qui affiche le texteHello Servlet et la valeur de la chaîne Hello World! qui sont tirés du init paramètres.

import java.io.IOException; 
import java.io.PrintWriter; 
import javax.servlet.ServletException; 
import javax.servlet.annotation.WebInitParam; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse;

@WebServlet(value = "/Simple", initParams = { 
   @WebInitParam(name = "foo", value = "Hello "), 
   @WebInitParam(name = "bar", value = " World!") 
}) 
public class Simple extends HttpServlet {

   private static final long serialVersionUID = 1L; 

   protected void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {   
      
      response.setContentType("text/html");   
      PrintWriter out = response.getWriter();   
      out.print("<html><body>");   
      out.print("<h3>Hello Servlet</h3>");   
      out.println(getInitParameter("foo")); 
      out.println(getInitParameter("bar")); 
      out.print("</body></html>");         
   }   
}

Compiler Simple.java de la manière habituelle et placez votre fichier de classe dans <Tomcat-installationdirectory>; / webapps / ROOT / WEB-INF / classes.

Maintenant, essayez d'appeler n'importe quel servlet en exécutant simplement http: // localhost: 8080 / Simple . Vous verrez la sortie suivante sur la page Web.

Hello Servlet

Hello World!

@Webfilter

Il s'agit de l'annotation utilisée pour déclarer un filtre de servlet. Il est traité par le conteneur au moment du déploiement et le filtre correspondant est appliqué aux modèles d'URL, servlets et types de répartiteur spécifiés.

le @WebFilterl'annotation définit un filtre dans une application Web. Cette annotation est spécifiée sur une classe et contient des métadonnées sur le filtre déclaré. Le filtre annoté doit spécifier au moins un modèle d'URL. Le tableau suivant répertorie les attributs utilisés pour l'annotation WebFilter.

Sr.No. Attribut et description
1

String filterName

Nom du filtre

2

String[] urlPatterns

Fournit un tableau de valeurs ou de URLPatterns auxquels le filtre s'applique

3

DispatcherType[] dispatcherTypes

Spécifie les types de répartiteur (demande / réponse) auxquels le filtre s'applique

4

String[] servletNames

Fournit un tableau de noms de servlet

5

String displayName

Nom du filtre

6

String description

Description du filtre

sept

WebInitParam[] initParams

Tableau de paramètres d'initialisation pour ce filtre

8

Boolean asyncSupported

Opération asynchrone prise en charge par ce filtre

9

String smallIcon

Petite icône pour ce filtre, le cas échéant

dix

String largeIcon

Grande icône pour ce filtre, le cas échéant

Exemple

L'exemple suivant décrit comment utiliser l'annotation @WebFilter. C'est un simple LogFilter qui affiche la valeur de Init-paramtest-paramet l'horodatage de l'heure actuelle sur la console. Cela signifie que le filtre fonctionne comme une couche d'interface entre la demande et la réponse. Ici, nous utilisons "/ *" pour urlPattern. Cela signifie que ce filtre est applicable à toutes les servlets.

import java.io.IOException; 
import javax.servlet.annotation.WebFilter; 
import javax.servlet.annotation.WebInitParam; 
import javax.servlet.*; 
import java.util.*;  

// Implements Filter class

@WebFilter(urlPatterns = {"/*"}, initParams = { 
   @WebInitParam(name = "test-param", value = "Initialization Paramter")}) 
public class LogFilter implements Filter {
   
   public void init(FilterConfig config) throws ServletException { 
      // Get init parameter  
      String testParam = config.getInitParameter("test-param");
            
      //Print the init parameter  
      System.out.println("Test Param: " + testParam);  
   } 

   public void doFilter(ServletRequest request, ServletResponse response,
      FilterChain chain) throws IOException, ServletException { 
	  
      // Log the current timestamp. 
      System.out.println("Time " + new Date().toString());  
         
      // Pass request back down the filter chain 
      chain.doFilter(request,response); 
   }

   public void destroy( ) {
      /* Called before the Filter instance is removed  
      from service by the web container*/ 
   } 
}

Compiler Simple.java de la manière habituelle et placez votre fichier de classe dans <Tomcat-installationdirectory> / webapps / ROOT / WEB-INF / classes.

Maintenant, essayez d'appeler n'importe quel servlet en exécutant simplement http: // localhost: 8080 / Simple . Vous verrez la sortie suivante sur la page Web.

Hello Servlet
  
Hello World!

Maintenant, ouvrez la console de servlet. Là, vous trouverez la valeur duinit paramètre testparam et le current timestamp ainsi que des messages de notification de servlet.