8.1 Bevezetés a szervlet megjegyzésekbe

A 7-es verziótól kezdődően a Tomcat támogatni kezdte a Servlet API 3.0 webservlet specifikációját . Konkrétan egy csomag jelent meg benne, melynek neve javax.servlet.annotation. Különféle típusú annotációkat tartalmaz, amelyekkel egy szervlet osztály annotációját lehet használni. Ha megjegyzést használ, akkor a telepítési leíró (web.xml) nem szükséges.

A leghasznosabb megjegyzések listája:

annotáció Leírás
1 @WebServlet Kijelenti a szervletet
2 @WebInitParam Megad egy inicializálási paramétert
3 @WebFilter Webszűrőt deklarál
4 @WebListener Kijelenti a web lisenert
5 @ServletSecurity Lehetővé teszi a biztonsági beállítások konfigurálását

Példa:

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

Egy annotáció elegendő egy szervlet deklarálásához és leképezéséhez, hogy kiszolgálja az összes olyan kérést, amely a . által megadott URL-re érkezik /api/*.

8.2 Szervlet-leképezés beállítása

A megjegyzés @WebServletszámos paraméterrel rendelkezik, amelyek lehetővé teszik az általa leírt szervlet nagyon rugalmas konfigurálását. Nézzük a főbbeket:

Tulajdonság Leírás
1 name Servlet egyedi név (mint a web.xml-ben)
2 displayName Ember által olvasható szervletnév
3 description Servlet leírása
4 value Beállítja az url-t a leképezéshez
5 urlPatterns Megadja a leképezendő URL-ek listáját (érték helyett használva)
6 initParams Lehetővé teszi a szervlet indítási paramétereinek beállítását
7 asyncSupported Megadja, hogy a szervlet futhat-e aszinkron módon (HTTP/2)
8 loadOnStartup Sorszám a szervlet indítási prioritásának vezérléséhez
9 smallIcon Beállít egy kis szervlet ikont
10 largeIcon Beállít egy nagy szervlet ikont

Itt van néhány érdekes pont.

Először is vegye figyelembe, hogy a valueés urlPatternscserélhető attribútumok. Mindkettő lehetővé teszi azoknak az URL-címeknek a meghatározását, amelyekhez a szervlet hozzá kell rendelnie.

Másodszor, a paraméter asyncSupportedjelzi, hogy a szervlet megfelelően feldolgozza-e az aszinkron kéréseket a HTTP/2 protokollon keresztül.

A harmadik fontos attribútum pedig initParamslehetővé teszi a ServletContextben elhelyezett paraméterek listájának beállítását.

Példa:

@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 Szűrőleképezés beállítása

Amint fentebb említettük, a szűrők a szervletek segédprogramtípusai, és úgy vannak beállítva, mint a szervletek. Íme az annotáció attribútumai @WebFilter:

Tulajdonság Leírás
1 filterName Szűrő egyedi név (mint a web.xml-ben)
2 displayName Ember által olvasható szűrőnév
3 description Szűrő leírása
4 value / urlPatterns Beállítja a leképezendő URL-ek listáját
5 dispatcherTypes Megadja a DispatcherTypes listát
6 servletNames Megadja azoknak a szervleteknek a listáját, amelyekre alkalmazni kell
7 initParams Lehetővé teszi a szűrő kezdő paramétereinek beállítását
8 asyncSupported Megadja, hogy a szűrő futhat-e aszinkron módon (HTTP/2)
9 smallIcon Beállít egy kis szűrő ikont
10 largeIcon Beállít egy nagy szűrő ikont

Példa egy szűrőre, amely elfogja az összes kérést meghatározott szervletekhez :

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

Példa több paraméterrel rendelkező szűrőre :

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

Példa egy adott típusú szűrőre a RequestDispatcher számára :

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

A következő előadásokból többet megtudhat a szűrők és szervletek céljáról.