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.