8.1 Introduktion til servlet-annoteringer
Fra og med version 7 begyndte Tomcat at understøtte Servlet API 3.0 webservlet-specifikationen . Især dukkede en pakke op i den kaldet javax.servlet.annotation
. Den indeholder forskellige typer anmærkninger, der kan bruges til at annotere en servlet-klasse. Hvis du bruger en annotering, er implementeringsbeskrivelsen (web.xml) ikke påkrævet.
Liste over de mest nyttige anmærkninger:
anmærkning | Beskrivelse | |
---|---|---|
1 | @WebServlet |
Erklærer en servlet |
2 | @WebInitParam |
Angiver en initialiseringsparameter |
3 | @WebFilter |
Erklærer et webfilter |
4 | @WebListener |
Erklærer web lisener |
5 | @ServletSecurity |
Giver dig mulighed for at konfigurere sikkerhedsindstillinger |
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 annotation er nok til at erklære en servlet og tilknytte den til at betjene alle anmodninger, der kommer til URL'en givet af /api/*
.
8.2 Opsætning af servlet-mapping
Annoteringen har @WebServlet
mange parametre, der tillader meget fleksibel konfiguration af den servlet, den beskriver. Lad os tage et kig på de vigtigste:
Attribut | Beskrivelse | |
---|---|---|
1 | name |
Servlet unikt navn (som i web.xml) |
2 | displayName |
Navn på servlet, der kan læses af mennesker |
3 | description |
Servlet Beskrivelse |
4 | value |
Indstiller url til kortlægning |
5 | urlPatterns |
Angiver en liste over webadresser, der skal kortlægges (bruges i stedet for værdi) |
6 | initParams |
Giver dig mulighed for at indstille startparametrene for servlet'en |
7 | asyncSupported |
Angiver, at servlet'en kan køre asynkront (HTTP/2) |
8 | loadOnStartup |
Sekvensnummer til at styre servlets startprioritet |
9 | smallIcon |
Indstiller et lille servlet-ikon |
10 | largeIcon |
Indstiller et stort servlet-ikon |
Der er flere interessante punkter her.
Bemærk først, at value
og urlPatterns
er udskiftelige attributter. De giver dig begge mulighed for at angive en liste over URL'er, som servlet'en skal knyttes til.
For det andet angiver parameteren, asyncSupported
om servlet'en vil behandle asynkrone anmodninger korrekt over HTTP/2-protokollen.
Og den tredje vigtige egenskab er initParams
, den giver dig mulighed for at indstille en liste over parametre, der vil blive placeret 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 Opsætning af filtermapping
Som nævnt ovenfor er filtre en hjælpetype af servlets, og de er konfigureret som servlets. Her er de egenskaber, en annotering har @WebFilter
:
Attribut | Beskrivelse | |
---|---|---|
1 | filterName |
Filter unikt navn (som i web.xml) |
2 | displayName |
Menneskeligt læsbart filternavn |
3 | description |
Filterbeskrivelse |
4 | value / urlPatterns |
Indstiller en liste over webadresser, der skal kortlægges |
5 | dispatcherTypes |
Angiver en liste over DispatcherTypes |
6 | servletNames |
Angiver en liste over servlets, der skal anvendes til |
7 | initParams |
Giver dig mulighed for at indstille startparametrene for filteret |
8 | asyncSupported |
Angiver, at filteret kan køre asynkront (HTTP/2) |
9 | smallIcon |
Indstiller et lille filterikon |
10 | largeIcon |
Indstiller et stort filterikon |
Et eksempel på et filter, der opsnapper alle anmodninger til specifikke servlets :
@WebFilter(servletNames = {"MyOwnServlet", "UploadServlet"})
public class MyFilter implements Filter {
// implements Filter's methods here...
}
Et eksempel på et filter givet flere parametre :
@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å et filter givet 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 mere om formålet med filtre og servlets i de følgende foredrag.
GO TO FULL VERSION