8.1 Introduksjon til servlet-kommentarer

Fra og med versjon 7 begynte Tomcat å støtte Servlet API 3.0 webservlet-spesifikasjonen . Spesielt dukket det opp en pakke i den kalt javax.servlet.annotation. Den inneholder ulike typer merknader som kan brukes til å kommentere en servlet-klasse. Hvis du bruker en merknad, er ikke distribusjonsbeskrivelsen (web.xml) nødvendig.

Liste over de mest nyttige kommentarene:

merknad Beskrivelse
1 @WebServlet Erklærer en servlet
2 @WebInitParam Angir en initialiseringsparameter
3 @WebFilter Erklærer et nettfilter
4 @WebListener Erklærer nettliseneren
5 @ServletSecurity Lar deg konfigurere sikkerhetsinnstillinger

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 merknad er nok til å erklære en servlet og tilordne den for å betjene alle forespørsler som kommer til URL-en gitt av /api/*.

8.2 Sette opp servletmapping

Merknaden har @WebServletmange parametere som tillater svært fleksibel konfigurasjon av servleten den beskriver. La oss ta en titt på de viktigste:

Egenskap Beskrivelse
1 name Servlet unikt navn (som i web.xml)
2 displayName Navn på servlet som kan leses av mennesker
3 description Servlet Beskrivelse
4 value Angir url for kartlegging
5 urlPatterns Angir en liste over nettadresser som skal kartlegges (brukes i stedet for verdi)
6 initParams Lar deg angi startparametrene til servleten
7 asyncSupported Angir at servleten kan kjøre asynkront (HTTP/2)
8 loadOnStartup Sekvensnummer for å kontrollere servletstartprioritet
9 smallIcon Setter et lite servlet-ikon
10 largeIcon Angir et stort servlet-ikon

Det er flere interessante punkter her.

Først, merk at valueog urlPatternser utskiftbare attributter. Begge lar deg spesifisere en liste over nettadresser som servleten skal kartlegges til.

For det andre indikerer parameteren asyncSupportedom servleten vil behandle asynkrone forespørsler riktig over HTTP/2-protokollen.

Og den tredje viktige egenskapen er initParams, den lar deg sette en liste over parametere som vil bli plassert 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 Sette opp filterkartlegging

Som nevnt ovenfor er filtre en verktøytype servlets, og de er konfigurert som servlets. Her er attributtene en merknad har @WebFilter:

Egenskap Beskrivelse
1 filterName Filter unikt navn (som i web.xml)
2 displayName Menneskelig lesbart filternavn
3 description Filterbeskrivelse
4 value / urlPatterns Angir en liste over nettadresser som skal kartlegges
5 dispatcherTypes Angir en liste over DispatcherTypes
6 servletNames Angir en liste over servlets som skal brukes på
7 initParams Lar deg angi startparametrene til filteret
8 asyncSupported Angir at filteret kan kjøre asynkront (HTTP/2)
9 smallIcon Angir et lite filterikon
10 largeIcon Angir et stort filterikon

Et eksempel på et filter som fanger opp alle forespørsler til spesifikke servlets :

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

Et eksempel på et filter gitt flere parametere :

@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å filtergitte 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 mer om formålet med filtre og servletter i de følgende forelesningene.