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 @WebServletmulț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 urlPatternssunt 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 asyncSupportedindică 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.
GO TO FULL VERSION