8.1 Introduction aux annotations de servlet
À partir de la version 7, Tomcat a commencé à prendre en charge la spécification de servlet Web Servlet API 3.0 . En particulier, un package y est apparu appelé javax.servlet.annotation
. Il contient différents types d'annotations qui peuvent être utilisées pour annoter une classe de servlet. Si vous utilisez une annotation, le descripteur de déploiement (web.xml) n'est pas requis.
Liste des annotations les plus utiles :
annotation | Description | |
---|---|---|
1 | @WebServlet |
Déclare une servlet |
2 | @WebInitParam |
Spécifie un paramètre d'initialisation |
3 | @WebFilter |
Déclare un filtre Web |
4 | @WebListener |
Déclare le lecteur Web |
5 | @ServletSecurity |
Permet de configurer les paramètres de sécurité |
Exemple:
@WebServlet( urlPatterns = {"/api/*"} )
public class Example extends HttpServlet {
protected void doGet( HttpServletRequest request, HttpServletResponse response) throws Exception {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("Hello World!");
}
}
Une annotation suffit pour déclarer un servlet et le mapper pour servir toutes les requêtes qui arriveront à l'URL donnée par le /api/*
.
8.2 Configuration du mappage de servlet
L'annotation a @WebServlet
de nombreux paramètres qui permettent une configuration très flexible du servlet qu'elle décrit. Voyons les principales :
Attribut | Description | |
---|---|---|
1 | name |
Nom unique du servlet (comme dans web.xml) |
2 | displayName |
Nom de servlet lisible par l'homme |
3 | description |
Description du servlet |
4 | value |
Définit l'URL pour le mappage |
5 | urlPatterns |
Spécifie une liste d'URL à mapper (utilisée à la place de la valeur) |
6 | initParams |
Permet de définir les paramètres de démarrage du servlet |
7 | asyncSupported |
Spécifie que le servlet peut s'exécuter de manière asynchrone (HTTP/2) |
8 | loadOnStartup |
Numéro de séquence pour contrôler la priorité de démarrage du servlet |
9 | smallIcon |
Définit une petite icône de servlet |
dix | largeIcon |
Définit une grande icône de servlet |
Il y a plusieurs points intéressants ici.
Tout d'abord, notez que value
et urlPatterns
sont des attributs interchangeables. Ils vous permettent tous les deux de spécifier une liste d'URL vers lesquelles la servlet doit être mappée.
Deuxièmement, le paramètre asyncSupported
indique si le servlet traitera correctement les requêtes asynchrones via le protocole HTTP/2.
Et le troisième attribut important est initParams
, il vous permet de définir une liste de paramètres qui seront placés dans le ServletContext.
Exemple:
@WebServlet( urlPatterns = {"/sendFile", "/uploadFile"}, loadOnStartup = 1, asyncSupported = true, initParams = { @WebInitParam(name = "saveDir", value = "c:/uploaded"), @WebInitParam(name = "allowedTypes", value = "jpg,gif,png") } )
public class ImageUploadServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception {
String saveDir = getInitParameter("saveDir");
String fileTypes = getInitParameter("allowedTypes");
PrintWriter writer = response.getWriter();
writer.println("saveDir = " + saveDir);
writer.println("fileTypes = " + fileTypes);
}
}
8.3 Configuration du mappage des filtres
Comme mentionné ci-dessus, les filtres sont un type utilitaire de servlets, et ils sont configurés comme des servlets. Voici les attributs d'une annotation @WebFilter
:
Attribut | Description | |
---|---|---|
1 | filterName |
Nom unique du filtre (comme dans web.xml) |
2 | displayName |
Nom du filtre lisible par l'homme |
3 | description |
Description du filtre |
4 | value / urlPatterns |
Définit une liste d'URL à mapper |
5 | dispatcherTypes |
Spécifie une liste de DispatcherTypes |
6 | servletNames |
Spécifie une liste de servlets à appliquer |
7 | initParams |
Permet de définir les paramètres de démarrage du filtre |
8 | asyncSupported |
Spécifie que le filtre peut s'exécuter de manière asynchrone (HTTP/2) |
9 | smallIcon |
Définit une petite icône de filtre |
dix | largeIcon |
Définit une grande icône de filtre |
Un exemple de filtre qui intercepte toutes les requêtes vers des servlets spécifiques :
@WebFilter(servletNames = {"MyOwnServlet", "UploadServlet"})
public class MyFilter implements Filter {
// implements Filter's methods here...
}
Un exemple de filtre avec plusieurs paramètres :
@WebFilter( urlPatterns = "/uploadFilter", initParams = @WebInitParam(name = "fileTypes", value = "doc;xls;zip;txt;jpg;png;gif") )
public class UploadFilter implements Filter {
// implements Filter's methods here...
}
Un exemple de type de filtre donné pour RequestDispatcher :
@WebFilter( urlPatterns = "/admin", dispatcherTypes = {DispatcherType.REQUEST, DispatcherType.FORWARD} )
public class MyFilter implements Filter {
// implements Filter's methods here...
}
Vous en apprendrez plus sur le but des filtres et des servlets dans les conférences suivantes.
GO TO FULL VERSION