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 @WebServlet
viele 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 value
und urlPatterns
austauschbare Attribute sind. In beiden Fällen können Sie eine Liste von URLs angeben, denen das Servlet zugeordnet werden soll.
Zweitens gibt der Parameter asyncSupported
an, 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.