8.1 Introducere în adnotările servlet
Începând cu versiunea 7, Tomcat a început să accepte specificația de servlet web Servlet API 3.0 . În special, a apărut un pachet numit javax.servlet.annotation
. Conține diferite tipuri de adnotări care pot fi folosite pentru a adnota o clasă de servlet. Dacă utilizați o adnotare, atunci descriptorul de implementare (web.xml) nu este necesar.
Lista celor mai utile adnotări:
adnotare | Descriere | |
---|---|---|
1 | @WebServlet |
Declara un servlet |
2 | @WebInitParam |
Specifică un parametru de inițializare |
3 | @WebFilter |
Declara un filtru web |
4 | @WebListener |
Declara utilizatorul web |
5 | @ServletSecurity |
Vă permite să configurați setările de securitate |
Exemplu:
@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!");
}
}
O adnotare este suficientă pentru a declara un servlet și a-l mapa pentru a servi toate solicitările care vor ajunge la adresa URL dată de /api/*
.
8.2 Configurarea mapării servlet-urilor
Adnotarea are @WebServlet
mulți parametri care permit configurarea foarte flexibilă a servlet-ului pe care îl descrie. Să aruncăm o privire la cele principale:
Atribut | Descriere | |
---|---|---|
1 | name |
Nume unic servlet (ca în web.xml) |
2 | displayName |
Nume servlet care poate fi citit de om |
3 | description |
Descrierea servletului |
4 | value |
Setează adresa URL pentru mapare |
5 | urlPatterns |
Specifică o listă de adrese URL de mapat (utilizate în loc de valoare) |
6 | initParams |
Vă permite să setați parametrii de pornire ai servlet-ului |
7 | asyncSupported |
Specifică faptul că servletul poate rula asincron (HTTP/2) |
8 | loadOnStartup |
Numărul de secvență pentru a controla prioritatea de pornire a servlet-ului |
9 | smallIcon |
Setează o pictogramă mică de servlet |
10 | largeIcon |
Setează o pictogramă servlet mare |
Există mai multe puncte interesante aici.
În primul rând, rețineți că value
și urlPatterns
sunt atribute interschimbabile. Ambele vă permit să specificați o listă de adrese URL la care ar trebui să mapați servletul.
În al doilea rând, parametrul asyncSupported
indică dacă servletul va procesa corect cererile asincrone prin protocolul HTTP/2.
Și al treilea atribut important este initParams
, vă permite să setați o listă de parametri care vor fi plasați în ServletContext.
Exemplu:
@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 Configurarea mapării filtrului
După cum am menționat mai sus, filtrele sunt un tip utilitar de servlet-uri și sunt configurate ca servlet-uri. Iată atributele pe care le are o adnotare @WebFilter
:
Atribut | Descriere | |
---|---|---|
1 | filterName |
Filtrați numele unic (ca în web.xml) |
2 | displayName |
Nume filtru care poate fi citit de om |
3 | description |
Descriere filtru |
4 | value / urlPatterns |
Setează o listă de adrese URL pentru a mapa |
5 | dispatcherTypes |
Specifică o listă de DispatcherTypes |
6 | servletNames |
Specifică o listă de servlet-uri la care să se aplice |
7 | initParams |
Vă permite să setați parametrii de pornire ai filtrului |
8 | asyncSupported |
Specifică faptul că filtrul poate rula asincron (HTTP/2) |
9 | smallIcon |
Setează o pictogramă de filtru mică |
10 | largeIcon |
Setează o pictogramă mare de filtru |
Un exemplu de filtru care interceptează toate solicitările către anumite servlet-uri :
@WebFilter(servletNames = {"MyOwnServlet", "UploadServlet"})
public class MyFilter implements Filter {
// implements Filter's methods here...
}
Un exemplu de filtru dat cu mai mulți parametri :
@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...
}
Un exemplu de filtru date tipuri pentru RequestDispatcher :
@WebFilter(
urlPatterns = "/admin",
dispatcherTypes = {DispatcherType.REQUEST, DispatcherType.FORWARD}
)
public class MyFilter implements Filter {
// implements Filter's methods here...
}
Veți afla mai multe despre scopul filtrelor și servlet-urilor în următoarele prelegeri.