8.1 Inleiding tot servletannotaties
Vanaf versie 7 begon Tomcat de Servlet API 3.0 webservletspecificatie te ondersteunen . Er verscheen met name een pakket genaamd javax.servlet.annotation
. Het bevat verschillende soorten annotaties die kunnen worden gebruikt om een servletklasse te annoteren. Als u een annotatie gebruikt, is de implementatiedescriptor (web.xml) niet vereist.
Lijst met de meest bruikbare annotaties:
annotatie | Beschrijving | |
---|---|---|
1 | @WebServlet |
Declareert een servlet |
2 | @WebInitParam |
Specificeert een initialisatieparameter |
3 | @WebFilter |
Verklaart een webfilter |
4 | @WebListener |
Verklaart de web lisener |
5 | @ServletSecurity |
Hiermee kunt u beveiligingsinstellingen configureren |
Voorbeeld:
@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!");
}
}
Eén annotatie is genoeg om een servlet te declareren en toe te wijzen om alle verzoeken te verwerken die naar de URL komen die door het /api/*
.
8.2 Instellen van servlettoewijzing
De annotatie heeft @WebServlet
veel parameters die een zeer flexibele configuratie van de beschreven servlet mogelijk maken. Laten we de belangrijkste eens bekijken:
Attribuut | Beschrijving | |
---|---|---|
1 | name |
Servlet unieke naam (zoals in web.xml) |
2 | displayName |
Voor mensen leesbare servletnaam |
3 | description |
Servlet-beschrijving |
4 | value |
Stelt de URL voor mapping in |
5 | urlPatterns |
Specificeert een lijst met URL's die moeten worden toegewezen (gebruikt in plaats van waarde) |
6 | initParams |
Hiermee kunt u de startparameters van de servlet instellen |
7 | asyncSupported |
Specificeert dat de servlet asynchroon kan draaien (HTTP/2) |
8 | loadOnStartup |
Volgnummer om de startprioriteit van de servlet te regelen |
9 | smallIcon |
Stelt een klein servletpictogram in |
10 | largeIcon |
Stelt een groot servletpictogram in |
Er zijn hier verschillende interessante punten.
Merk allereerst op dat value
en urlPatterns
verwisselbare attributen zijn. Beide stellen u in staat een lijst met URL's op te geven waarnaar de servlet moet verwijzen.
Ten tweede geeft de parameter asyncSupported
aan of de servlet asynchrone verzoeken via het HTTP/2-protocol correct verwerkt.
En het derde belangrijke attribuut is initParams
, hiermee kunt u een lijst met parameters instellen die in de ServletContext worden geplaatst.
Voorbeeld:
@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 Filtermapping instellen
Zoals hierboven vermeld, zijn filters servlets van het type hulpprogramma en ze zijn geconfigureerd als servlets. Dit zijn de kenmerken die een annotatie heeft @WebFilter
:
Attribuut | Beschrijving | |
---|---|---|
1 | filterName |
Filter unieke naam (zoals in web.xml) |
2 | displayName |
Voor mensen leesbare filternaam |
3 | description |
Filterbeschrijving |
4 | value / urlPatterns |
Stelt een lijst met URL's in om in kaart te brengen |
5 | dispatcherTypes |
Specificeert een lijst met DispatcherTypes |
6 | servletNames |
Specificeert een lijst met servlets waarop moet worden toegepast |
7 | initParams |
Hiermee kunt u de startparameters van het filter instellen |
8 | asyncSupported |
Geeft aan dat het filter asynchroon kan worden uitgevoerd (HTTP/2) |
9 | smallIcon |
Stelt een klein filterpictogram in |
10 | largeIcon |
Stelt een groot filterpictogram in |
Een voorbeeld van een filter dat alle verzoeken aan specifieke servlets onderschept :
@WebFilter(servletNames = {"MyOwnServlet", "UploadServlet"})
public class MyFilter implements Filter {
// implements Filter's methods here...
}
Een voorbeeld van een filter met meerdere parameters :
@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...
}
Een voorbeeld van een filter gegeven typen voor RequestDispatcher :
@WebFilter(
urlPatterns = "/admin",
dispatcherTypes = {DispatcherType.REQUEST, DispatcherType.FORWARD}
)
public class MyFilter implements Filter {
// implements Filter's methods here...
}
In de volgende colleges leer je meer over het doel van filters en servlets.
GO TO FULL VERSION