8.1 Introduksjon til servlet-kommentarer
Fra og med versjon 7 begynte Tomcat å støtte Servlet API 3.0 webservlet-spesifikasjonen . Spesielt dukket det opp en pakke i den kalt javax.servlet.annotation
. Den inneholder ulike typer merknader som kan brukes til å kommentere en servlet-klasse. Hvis du bruker en merknad, er ikke distribusjonsbeskrivelsen (web.xml) nødvendig.
Liste over de mest nyttige kommentarene:
merknad | Beskrivelse | |
---|---|---|
1 | @WebServlet |
Erklærer en servlet |
2 | @WebInitParam |
Angir en initialiseringsparameter |
3 | @WebFilter |
Erklærer et nettfilter |
4 | @WebListener |
Erklærer nettliseneren |
5 | @ServletSecurity |
Lar deg konfigurere sikkerhetsinnstillinger |
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 merknad er nok til å erklære en servlet og tilordne den for å betjene alle forespørsler som kommer til URL-en gitt av /api/*
.
8.2 Sette opp servletmapping
Merknaden har @WebServlet
mange parametere som tillater svært fleksibel konfigurasjon av servleten den beskriver. La oss ta en titt på de viktigste:
Egenskap | Beskrivelse | |
---|---|---|
1 | name |
Servlet unikt navn (som i web.xml) |
2 | displayName |
Navn på servlet som kan leses av mennesker |
3 | description |
Servlet Beskrivelse |
4 | value |
Angir url for kartlegging |
5 | urlPatterns |
Angir en liste over nettadresser som skal kartlegges (brukes i stedet for verdi) |
6 | initParams |
Lar deg angi startparametrene til servleten |
7 | asyncSupported |
Angir at servleten kan kjøre asynkront (HTTP/2) |
8 | loadOnStartup |
Sekvensnummer for å kontrollere servletstartprioritet |
9 | smallIcon |
Setter et lite servlet-ikon |
10 | largeIcon |
Angir et stort servlet-ikon |
Det er flere interessante punkter her.
Først, merk at value
og urlPatterns
er utskiftbare attributter. Begge lar deg spesifisere en liste over nettadresser som servleten skal kartlegges til.
For det andre indikerer parameteren asyncSupported
om servleten vil behandle asynkrone forespørsler riktig over HTTP/2-protokollen.
Og den tredje viktige egenskapen er initParams
, den lar deg sette en liste over parametere som vil bli plassert 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 Sette opp filterkartlegging
Som nevnt ovenfor er filtre en verktøytype servlets, og de er konfigurert som servlets. Her er attributtene en merknad har @WebFilter
:
Egenskap | Beskrivelse | |
---|---|---|
1 | filterName |
Filter unikt navn (som i web.xml) |
2 | displayName |
Menneskelig lesbart filternavn |
3 | description |
Filterbeskrivelse |
4 | value / urlPatterns |
Angir en liste over nettadresser som skal kartlegges |
5 | dispatcherTypes |
Angir en liste over DispatcherTypes |
6 | servletNames |
Angir en liste over servlets som skal brukes på |
7 | initParams |
Lar deg angi startparametrene til filteret |
8 | asyncSupported |
Angir at filteret kan kjøre asynkront (HTTP/2) |
9 | smallIcon |
Angir et lite filterikon |
10 | largeIcon |
Angir et stort filterikon |
Et eksempel på et filter som fanger opp alle forespørsler til spesifikke servlets :
@WebFilter(servletNames = {"MyOwnServlet", "UploadServlet"})
public class MyFilter implements Filter {
// implements Filter's methods here...
}
Et eksempel på et filter gitt flere parametere :
@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å filtergitte 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 mer om formålet med filtre og servletter i de følgende forelesningene.
GO TO FULL VERSION