8.1 Einführung in Servlet-Annotationen

Ab Version 7 unterstützt Tomcat die Web-Servlet-Spezifikation Servlet API 3.0 . Insbesondere erschien darin ein Paket mit dem Namen javax.servlet.annotation. Es enthält verschiedene Arten von Annotationen, die zum Annotieren einer Servlet-Klasse verwendet werden können. Wenn Sie eine Annotation verwenden, ist der Bereitstellungsdeskriptor (web.xml) nicht erforderlich.

Liste der nützlichsten Anmerkungen:

Anmerkung Beschreibung
1 @WebServlet Deklariert ein Servlet
2 @WebInitParam Gibt einen Initialisierungsparameter an
3 @WebFilter Deklariert einen Webfilter
4 @WebListener Deklariert den Web-Lizenzgeber
5 @ServletSecurity Ermöglicht Ihnen, Sicherheitseinstellungen zu konfigurieren

Beispiel:

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

Eine Annotation reicht aus, um ein Servlet zu deklarieren und es so zuzuordnen, dass es alle Anfragen bedient, die an die durch das angegebene URL eingehen /api/*.

8.2 Servlet-Mapping einrichten

Die Annotation verfügt über @WebServletviele Parameter, die eine sehr flexible Konfiguration des von ihr beschriebenen Servlets ermöglichen. Werfen wir einen Blick auf die wichtigsten:

Attribut Beschreibung
1 name Eindeutiger Servlet-Name (wie in web.xml)
2 displayName Für Menschen lesbarer Servlet-Name
3 description Servlet-Beschreibung
4 value Legt die URL für die Zuordnung fest
5 urlPatterns Gibt eine Liste der zuzuordnenden URLs an (wird anstelle des Werts verwendet).
6 initParams Ermöglicht Ihnen, die Startparameter des Servlets festzulegen
7 asyncSupported Gibt an, dass das Servlet asynchron ausgeführt werden kann (HTTP/2).
8 loadOnStartup Sequenznummer zur Steuerung der Servlet-Startpriorität
9 smallIcon Legt ein kleines Servlet-Symbol fest
10 largeIcon Legt ein großes Servlet-Symbol fest

Hier gibt es mehrere interessante Punkte.

Beachten Sie zunächst, dass valueund urlPatternsaustauschbare Attribute sind. In beiden Fällen können Sie eine Liste von URLs angeben, denen das Servlet zugeordnet werden soll.

Zweitens gibt der Parameter asyncSupportedan, ob das Servlet asynchrone Anfragen über das HTTP/2-Protokoll korrekt verarbeitet.

Und das dritte wichtige Attribut ist initParams: Es ermöglicht Ihnen, eine Liste von Parametern festzulegen, die im ServletContext platziert werden.

Beispiel:

@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 Filterzuordnung einrichten

Wie oben erwähnt, sind Filter ein Dienstprogrammtyp von Servlets und werden wie Servlets konfiguriert. Hier sind die Attribute, die eine Anmerkung hat @WebFilter:

Attribut Beschreibung
1 filterName Eindeutiger Filtername (wie in web.xml)
2 displayName Für Menschen lesbarer Filtername
3 description Filterbeschreibung
4 value / urlPatterns Legt eine Liste der zuzuordnenden URLs fest
5 dispatcherTypes Gibt eine Liste von DispatcherTypes an
6 servletNames Gibt eine Liste von Servlets an, auf die angewendet werden soll
7 initParams Ermöglicht Ihnen, die Startparameter des Filters festzulegen
8 asyncSupported Gibt an, dass der Filter asynchron ausgeführt werden kann (HTTP/2).
9 smallIcon Legt ein kleines Filtersymbol fest
10 largeIcon Legt ein großes Filtersymbol fest

Ein Beispiel für einen Filter, der alle Anfragen an bestimmte Servlets abfängt :

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

Ein Beispiel für einen Filter mit mehreren Parametern :

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

Ein Beispiel für einen Filter mit bestimmten Typen für RequestDispatcher :

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

In den folgenden Vorlesungen erfahren Sie mehr über den Zweck von Filtern und Servlets.