Servlet - Annotazioni

Finora, hai imparato come Servlet utilizza il descrittore di distribuzione (file web.xml) per distribuire la tua applicazione in un server web. Servlet API 3.0 ha introdotto un nuovo pacchetto chiamato javax.servlet.annotation. Fornisce tipi di annotazione che possono essere utilizzati per annotare una classe servlet. Se si utilizza l'annotazione, il descrittore di distribuzione (web.xml) non è richiesto. Ma dovresti usare tomcat7 o qualsiasi versione successiva di tomcat.

Le annotazioni possono sostituire la configurazione XML equivalente nel file descrittore di distribuzione web (web.xml) come la dichiarazione del servlet e la mappatura del servlet. I contenitori servlet elaboreranno le classi annotate al momento della distribuzione.

I tipi di annotazione introdotti in Servlet 3.0 sono:

Sr.No. Annotazione e descrizione
1

@WebServlet

Per dichiarare un servlet.

2

@WebInitParam

Per specificare un parametro di inizializzazione.

3

@WebFilter

Per dichiarare un filtro servlet.

4

@WebListener

Per dichiarare un WebListener

5

@HandlesTypes

Per dichiarare i tipi di classe che un ServletContainerInitializer può gestire.

6

@HttpConstraint

Questa annotazione viene utilizzata all'interno dell'annotazione ServletSecurity per rappresentare i vincoli di sicurezza da applicare a tutti i metodi del protocollo HTTP per i quali NON si verifica un elemento HttpMethodConstraint corrispondente all'interno dell'annotazione ServletSecurity.

7

@HttpMethodConstraint

Questa annotazione viene utilizzata all'interno dell'annotazione ServletSecurity per rappresentare i vincoli di sicurezza su messaggi di protocollo HTTP specifici.

8

@MultipartConfig

Annotazione che può essere specificata su una classe Servlet, che indica che le istanze del Servlet si aspettano richieste conformi al tipo MIME multipart / form-data.

9

@ServletSecurity

Questa annotazione viene utilizzata su una classe di implementazione Servlet per specificare i vincoli di sicurezza che devono essere applicati da un contenitore Servlet sui messaggi del protocollo HTTP.

Qui abbiamo discusso in dettaglio alcune delle annotazioni.

@WebServlet

Il @WebServlet viene utilizzato per dichiarare la configurazione di un Servlet con un contenitore. La seguente tabella contiene l'elenco degli attributi utilizzati per l'annotazione WebServlet.

Sr.No. Attributo e descrizione
1

String name

Nome del servlet

2

String[] value

Matrice di pattern URL

3

String[] urlPatterns

Matrice di pattern URL a cui si applica questo filtro

4

Int loadOnStartup

Il valore intero fornisce il suggerimento per l'ordine di avvio

5

WebInitParam[] initParams

Matrice di parametri di inizializzazione per questo servlet

6

Boolean asyncSupported

Operazione asincrona supportata da questo servlet

7

String smallIcon

Piccola icona per questo Servlet, se presente

8

String largeIcon

Icona grande per questo Servlet, se presente

9

String description

Descrizione di questo Servlet, se presente

10

String displayName

Visualizza il nome di questo servlet, se presente

Almeno un pattern URL DEVE essere dichiarato nel file value o urlPattern attributo dell'annotazione, ma non entrambi.

Il value è consigliato per l'uso quando il pattern URL è l'unico attributo impostato, altrimenti il urlPattern deve essere utilizzato l'attributo.

Esempio

Il seguente esempio descrive come utilizzare l'annotazione @WebServlet. È un semplice servlet che visualizza il testoHello 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>");         
   }   
}

Compilare Simple.java nel solito modo e metti il ​​tuo file di classe in <Tomcat-installationdirectory> / webapps / ROOT / WEB-INF / classes.

Ora prova a chiamare qualsiasi servlet semplicemente eseguendo http: // localhost: 8080 / Simple . Vedrai il seguente output sulla pagina web.

Hello servlet

@WebInitParam

L'annotazione @WebInitParam viene utilizzata per specificare un parametro di inizializzazione per un servlet o un filtro. Viene utilizzato all'interno di annotazioni WebFilter o WebSevlet. La tabella seguente contiene l'elenco degli attributi utilizzati per l'annotazione WebInitParam.

Sr.No. Attributo e descrizione
1

String name

Nome del parametro di inizializzazione

2

String value

Valore del parametro di inizializzazione

3

String description

Descrizione del parametro di inizializzazione

Esempio

L'esempio seguente descrive come utilizzare l'annotazione @WeInitParam insieme all'annotazione @WebServlet. È un semplice servlet che visualizza il testoHello Servlet e il valore della stringa Hello World! che sono presi da init parametri.

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

Compilare Simple.java nel solito modo e metti il ​​tuo file di classe in <Tomcat-installationdirectory>; / webapps / ROOT / WEB-INF / classes.

Ora prova a chiamare qualsiasi servlet semplicemente eseguendo http: // localhost: 8080 / Simple . Vedrai il seguente output sulla pagina web.

Hello Servlet

Hello World!

@Webfilter

Questa è l'annotazione utilizzata per dichiarare un filtro servlet. Viene elaborato dal contenitore al momento della distribuzione e il filtro corrispondente viene applicato ai pattern URL, ai servlet e ai tipi di dispatcher specificati.

Il @WebFilterl'annotazione definisce un filtro in un'applicazione web. Questa annotazione è specificata su una classe e contiene metadati sul filtro dichiarato. Il filtro annotato deve specificare almeno un pattern URL. La tabella seguente elenca gli attributi utilizzati per l'annotazione WebFilter.

Sr.No. Attributo e descrizione
1

String filterName

Nome del filtro

2

String[] urlPatterns

Fornisce una matrice di valori o urlPattern a cui si applica il filtro

3

DispatcherType[] dispatcherTypes

Specifica i tipi di dispatcher (richiesta / risposta) a cui si applica il filtro

4

String[] servletNames

Fornisce un array di nomi di servlet

5

String displayName

Nome del filtro

6

String description

Descrizione del filtro

7

WebInitParam[] initParams

Matrice di parametri di inizializzazione per questo filtro

8

Boolean asyncSupported

Operazione asincrona supportata da questo filtro

9

String smallIcon

Piccola icona per questo filtro, se presente

10

String largeIcon

Icona grande per questo filtro, se presente

Esempio

L'esempio seguente descrive come utilizzare l'annotazione @WebFilter. È un semplice LogFilter che mostra il valore di Init-paramtest-parame il timestamp dell'ora corrente sulla console. Ciò significa che il filtro funziona come un livello di interfaccia tra la richiesta e la risposta. Qui usiamo "/ *" per urlPattern. Significa che questo filtro è applicabile a tutti i servlet.

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*/ 
   } 
}

Compilare Simple.java nel solito modo e metti il ​​tuo file di classe in <Tomcat-installationdirectory> / webapps / ROOT / WEB-INF / classes.

Ora prova a chiamare qualsiasi servlet semplicemente eseguendo http: // localhost: 8080 / Simple . Vedrai il seguente output sulla pagina web.

Hello Servlet
  
Hello World!

Ora, apri la console servlet. Lì troverai il valore diinit parametro testparam e il current timestamp insieme ai messaggi di notifica servlet.