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 @WebServlet
må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 value
och 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 asyncSupported
om 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.
GO TO FULL VERSION