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.