8.1 Introduktion til servlet-annoteringer

Fra og med version 7 begyndte Tomcat at understøtte Servlet API 3.0 webservlet-specifikationen . Især dukkede en pakke op i den kaldet javax.servlet.annotation. Den indeholder forskellige typer anmærkninger, der kan bruges til at annotere en servlet-klasse. Hvis du bruger en annotering, er implementeringsbeskrivelsen (web.xml) ikke påkrævet.

Liste over de mest nyttige anmærkninger:

anmærkning Beskrivelse
1 @WebServlet Erklærer en servlet
2 @WebInitParam Angiver en initialiseringsparameter
3 @WebFilter Erklærer et webfilter
4 @WebListener Erklærer web lisener
5 @ServletSecurity Giver dig mulighed for at konfigurere sikkerhedsindstillinger

Eksempel:

@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!");
    }
}

En annotation er nok til at erklære en servlet og tilknytte den til at betjene alle anmodninger, der kommer til URL'en givet af /api/*.

8.2 Opsætning af servlet-mapping

Annoteringen har @WebServletmange parametre, der tillader meget fleksibel konfiguration af den servlet, den beskriver. Lad os tage et kig på de vigtigste:

Attribut Beskrivelse
1 name Servlet unikt navn (som i web.xml)
2 displayName Navn på servlet, der kan læses af mennesker
3 description Servlet Beskrivelse
4 value Indstiller url til kortlægning
5 urlPatterns Angiver en liste over webadresser, der skal kortlægges (bruges i stedet for værdi)
6 initParams Giver dig mulighed for at indstille startparametrene for servlet'en
7 asyncSupported Angiver, at servlet'en kan køre asynkront (HTTP/2)
8 loadOnStartup Sekvensnummer til at styre servlets startprioritet
9 smallIcon Indstiller et lille servlet-ikon
10 largeIcon Indstiller et stort servlet-ikon

Der er flere interessante punkter her.

Bemærk først, at valueog urlPatternser udskiftelige attributter. De giver dig begge mulighed for at angive en liste over URL'er, som servlet'en skal knyttes til.

For det andet angiver parameteren, asyncSupportedom servlet'en vil behandle asynkrone anmodninger korrekt over HTTP/2-protokollen.

Og den tredje vigtige egenskab er initParams, den giver dig mulighed for at indstille en liste over parametre, der vil blive placeret i ServletContext.

Eksempel:

@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 Opsætning af filtermapping

Som nævnt ovenfor er filtre en hjælpetype af servlets, og de er konfigureret som servlets. Her er de egenskaber, en annotering har @WebFilter:

Attribut Beskrivelse
1 filterName Filter unikt navn (som i web.xml)
2 displayName Menneskeligt læsbart filternavn
3 description Filterbeskrivelse
4 value / urlPatterns Indstiller en liste over webadresser, der skal kortlægges
5 dispatcherTypes Angiver en liste over DispatcherTypes
6 servletNames Angiver en liste over servlets, der skal anvendes til
7 initParams Giver dig mulighed for at indstille startparametrene for filteret
8 asyncSupported Angiver, at filteret kan køre asynkront (HTTP/2)
9 smallIcon Indstiller et lille filterikon
10 largeIcon Indstiller et stort filterikon

Et eksempel på et filter, der opsnapper alle anmodninger til specifikke servlets :

@WebFilter(servletNames = {"MyOwnServlet", "UploadServlet"})
public class MyFilter implements Filter {
    // implements Filter's methods here...
}

Et eksempel på et filter givet flere parametre :

@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...
}

Et eksempel på et filter givet typer for RequestDispatcher :

@WebFilter(
        urlPatterns = "/admin",
        dispatcherTypes = {DispatcherType.REQUEST, DispatcherType.FORWARD}
)
public class MyFilter implements Filter {
    // implements Filter's methods here...
}

Du vil lære mere om formålet med filtre og servlets i de følgende foredrag.