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 @WebServletveel 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 valueen urlPatternsverwisselbare 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 asyncSupportedaan 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.