8.1 Introduzione alle annotazioni servlet
A partire dalla versione 7, Tomcat ha iniziato a supportare la specifica servlet web Servlet API 3.0 . In particolare, è apparso un pacchetto chiamato javax.servlet.annotation
. Contiene vari tipi di annotazioni che possono essere utilizzate per annotare una classe servlet. Se utilizzi un'annotazione, il descrittore di distribuzione (web.xml) non è richiesto.
Elenco delle annotazioni più utili:
annotazione | Descrizione | |
---|---|---|
1 | @WebServlet |
Dichiara un servlet |
2 | @WebInitParam |
Specifica un parametro di inizializzazione |
3 | @WebFilter |
Dichiara un filtro web |
4 | @WebListener |
Dichiara il web listener |
5 | @ServletSecurity |
Consente di configurare le impostazioni di sicurezza |
Esempio:
@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!");
}
}
Un'annotazione è sufficiente per dichiarare un servlet e mapparlo per soddisfare tutte le richieste che arriveranno all'URL fornito dal file /api/*
.
8.2 Impostazione della mappatura servlet
L'annotazione ha @WebServlet
molti parametri che consentono una configurazione molto flessibile del servlet che descrive. Diamo uno sguardo ai principali:
Attributo | Descrizione | |
---|---|---|
1 | name |
Nome univoco del servlet (come in web.xml) |
2 | displayName |
Nome servlet leggibile dall'utente |
3 | description |
Descrizione servlet |
4 | value |
Imposta l'URL per la mappatura |
5 | urlPatterns |
Specifica un elenco di URL da mappare (utilizzato al posto del valore) |
6 | initParams |
Consente di impostare i parametri di avvio del servlet |
7 | asyncSupported |
Specifica che il servlet può essere eseguito in modo asincrono (HTTP/2) |
8 | loadOnStartup |
Numero di sequenza per controllare la priorità di avvio del servlet |
9 | smallIcon |
Imposta una piccola icona servlet |
10 | largeIcon |
Imposta una grande icona servlet |
Ci sono diversi punti interessanti qui.
Innanzitutto, nota che value
e urlPatterns
sono attributi intercambiabili. Entrambi consentono di specificare un elenco di URL a cui il servlet deve mappare.
In secondo luogo, il parametro asyncSupported
indica se il servlet elaborerà correttamente le richieste asincrone sul protocollo HTTP/2.
E il terzo attributo importante è initParams
, ti consente di impostare un elenco di parametri che verranno inseriti nel ServletContext.
Esempio:
@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 Impostazione della mappatura dei filtri
Come accennato in precedenza, i filtri sono un tipo di utilità di servlet e sono configurati come servlet. Ecco gli attributi di un'annotazione @WebFilter
:
Attributo | Descrizione | |
---|---|---|
1 | filterName |
Filtro nome univoco (come in web.xml) |
2 | displayName |
Nome del filtro leggibile dall'uomo |
3 | description |
Filtro Descrizione |
4 | value / urlPatterns |
Imposta un elenco di URL da mappare |
5 | dispatcherTypes |
Specifica un elenco di DispatcherTypes |
6 | servletNames |
Specifica un elenco di servlet a cui applicare |
7 | initParams |
Consente di impostare i parametri iniziali del filtro |
8 | asyncSupported |
Specifica che il filtro può essere eseguito in modo asincrono (HTTP/2) |
9 | smallIcon |
Imposta una piccola icona di filtro |
10 | largeIcon |
Imposta un'icona di filtro grande |
Un esempio di filtro che intercetta tutte le richieste a servlet specifici :
@WebFilter(servletNames = {"MyOwnServlet", "UploadServlet"})
public class MyFilter implements Filter {
// implements Filter's methods here...
}
Un esempio di un filtro dati più 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 esempio di tipi di filtro dati per RequestDispatcher :
@WebFilter(
urlPatterns = "/admin",
dispatcherTypes = {DispatcherType.REQUEST, DispatcherType.FORWARD}
)
public class MyFilter implements Filter {
// implements Filter's methods here...
}
Imparerai di più sullo scopo di filtri e servlet nelle lezioni seguenti.