8.1 Introduktion till servletkommentarer

Från och med version 7 började Tomcat stödja Servlet API 3.0- webservletspecifikationen . I synnerhet dök det upp ett paket som heter javax.servlet.annotation. Den innehåller olika typer av kommentarer som kan användas för att kommentera en servletklass. Om du använder en anteckning krävs inte distributionsbeskrivningen (web.xml).

Lista över de mest användbara anteckningarna:

anteckning Beskrivning
1 @WebServlet Deklarerar en servlet
2 @WebInitParam Anger en initialiseringsparameter
3 @WebFilter Deklarerar ett webbfilter
4 @WebListener Deklarerar webblysenaren
5 @ServletSecurity Låter dig konfigurera säkerhetsinställningar

Exempel:

@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 anteckning räcker för att deklarera en servlet och mappa den för att betjäna alla förfrågningar som kommer till URL:en som ges av /api/*.

8.2 Ställa in servlet-mappning

Anteckningen har @WebServletmånga parametrar som tillåter mycket flexibel konfiguration av servleten den beskriver. Låt oss ta en titt på de viktigaste:

Attribut Beskrivning
1 name Servlets unika namn (som i web.xml)
2 displayName Mänskligt läsbart servletnamn
3 description Servlet Beskrivning
4 value Ställer in webbadressen för mappning
5 urlPatterns Anger en lista med webbadresser som ska mappas (används istället för värde)
6 initParams Låter dig ställa in startparametrarna för servleten
7 asyncSupported Anger att servleten kan köras asynkront (HTTP/2)
8 loadOnStartup Sekvensnummer för att styra servletstartprioritet
9 smallIcon Ställer in en liten servletikon
10 largeIcon Ställer in en stor servletikon

Det finns flera intressanta punkter här.

Först, notera att valueoch urlPatternsär utbytbara attribut. De låter dig båda ange en lista med webbadresser som servleten ska mappas till.

För det andra indikerar parametern asyncSupportedom servleten korrekt kommer att behandla asynkrona förfrågningar över HTTP/2-protokollet.

Och det tredje viktiga attributet är initParams, det låter dig ställa in en lista med parametrar som kommer att placeras i ServletContext.

Exempel:

@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 Ställa in filterkartläggning

Som nämnts ovan är filter en verktygstyp av servlets, och de är konfigurerade som servlets. Här är attributen som en kommentar har @WebFilter:

Attribut Beskrivning
1 filterName Filtrera unikt namn (som i web.xml)
2 displayName Mänskligt läsbart filternamn
3 description Filterbeskrivning
4 value / urlPatterns Ställer in en lista över webbadresser som ska kartläggas
5 dispatcherTypes Anger en lista över DispatcherTypes
6 servletNames Anger en lista över servlets som ska tillämpas på
7 initParams Låter dig ställa in startparametrarna för filtret
8 asyncSupported Anger att filtret kan köras asynkront (HTTP/2)
9 smallIcon Ställer in en liten filterikon
10 largeIcon Ställer in en stor filterikon

Ett exempel på ett filter som fångar upp alla förfrågningar till specifika servlets :

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

Ett exempel på ett filter med flera parametrar :

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

Ett exempel på ett filter givna typer för RequestDispatcher :

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

Du kommer att lära dig mer om syftet med filter och servlets i följande föreläsningar.