English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Fino ad ora, hai capito come Servlet utilizza il file di descrizione del deploy (web.xml) per distribuire l'applicazione sul server Web. L'API Servlet 3.0 ha introdotto un nuovo pacchetto chiamato javax.servlet.annotation. Fornisce i tipi di annotazione utilizzabili per annotare le classi Servlet. Se si utilizzano le annotazioni, non è necessario il file di descrizione del deploy (web.xml). Ma dovrebbe utilizzare tomcat7 o versioni successive.
Le annotazioni possono sostituire la configurazione XML equivalente nel file di descrizione Web (web.xml), ad esempio le dichiarazioni servlet e le mappature servlet. Il contenitore servlet gestirà le classi annotate durante il deploy.
I tipi di annotazione introdotti in Servlet 3.0 sono
N. Sr. | Annotazioni e descrizioni |
---|---|
1 | @WebServlet Declara il servlet |
2 | @WebInitParam Specificare i parametri di inizializzazione |
3 | @WebFilter Declara il filtraggio del servlet |
4 | @WebListener Declara WebListener |
5 | @HandlesTypes Declara i tipi di classe che possono essere gestiti da ServletContainerInitializer. |
6 | @HttpConstraint Questa annotazione viene utilizzata nel contesto dell'annotazione ServletSecurity per rappresentare le restrizioni di sicurezza da applicare a tutti i metodi di protocollo HTTP, per i quali non esiste un elemento HttpMethodConstraint corrispondente nell'annotazione ServletSecurity. |
7 | @HttpMethodConstraint Questa annotazione viene utilizzata nel contesto dell'annotazione ServletSecurity per rappresentare le restrizioni di sicurezza per messaggi di protocollo HTTP specifici. |
8 | @MultipartConfig 可以在 Servlet 类上指定的注解,表示 Servlet 的实例期望符合多部分/表单数据 MIME 类型的请求。 |
9 | @ServletSecurity 此注解用于 Servlet 实现类,以指定 Servlet 容器对 HTTP 协议消息实施的安全约束。 |
这里我们已经详细讨论了一些注解。
@WebServlet 用于声明带有容器的 Servlet 的配置。下表包含用于 WebServlet 注解的属性列表。
N. Sr. | Proprietà e descrizione |
---|---|
1 | String name Servlet 的名称 |
2 | String[] value URL 模式数组 |
3 | String[] urlPatterns 应用此筛选器的 URL 模式数组 |
4 | Int loadOnStartup 整数值给出启动排序提示 |
5 | WebInitParam[] initParams Servlet 初始化数组参数 |
6 | Boolean asyncSupported Servlet 支持的异步操作 |
7 | String smallIcon Servlet 的小图标,如果有的话 |
8 | String largeIcon Servlet 的大图标,如果有的话 |
9 | String description Servlet 的描述,如果存在的话 |
10 | String displayName 显示此 Servlet 的名称(如果存在) |
必须在注解的 value 或 urlPattern 属性中声明至少一个 URL 模式,但不能同时声明这两个属性。
当 URL 模式是唯一要设置的属性时,建议使用 value 属性,否则应使用 urlPattern 属性。
下面的示例描述了如何使用 @WebServlet 注解。它是一个显示文本 Hello servlet 的简单 servlet。
import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebInitParam; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet(value = "/Simple") public class Simple extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.print("<html><body>"); out.print("<h3>Hello Servlet</h3>"); out.print("</body></html>");
Compila Simple.java come al solito e metti i file classe nel <tomcat-installationdirectory>/webapps/ROOT/WEB-INF/classes.
Ora prova a chiamare qualsiasi servlet tramite l'esecuzione di http://localhost:8080/Simple. Vedrai il seguente output nella pagina web.
Hello servlet
@WebInitParam 注解用于为 Servlet 或过滤器指定初始化参数。它在 WebFilter 或 webevlet 注解中使用。下表包含用于 WebInitParam 注解的属性列表。
N. Sr. | Proprietà e descrizione |
---|---|
1 | String name 初始化参数的名称 |
2 | String value 初始化参数的值 |
3 | String description 初始化参数的描述 |
@WebInitParam 注解用于为 Servlet 或过滤器指定初始化参数。它在 WebFilter 或 webevlet 注解中使用。下表包含用于 WebInitParam 注解的属性列表。
import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebInitParam; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet(value = "/Simple", initParams = { @WebInitParam(name = "foo", value = "Hello "), @WebInitParam(name = "bar", value = " World!") } public class Simple extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.print("<html><body>"); out.print("<h3>Hello Servlet</h3>"); out.println(getInitParameter("foo")); out.println(getInitParameter("bar")); out.print("</body></html>");
Compila Simple.java come al solito e metti i file classe nel <tomcat-installationdirectory>/webapps/ROOT/WEB-INF/classes.
Ora prova a chiamare qualsiasi servlet tramite l'esecuzione di http://localhost:8080/Simple. Vedrai il seguente output nella pagina web.
Hello Servlet Hello World!
Questa è l'annotazione utilizzata per dichiarare il filtro servlet. È gestita dal container durante il deploy e applica il filtro corrispondente ai modelli di URL, servlet e tipo di dispatcher specificati.
@WebFilter annotazione definisce i filtri dell'applicazione web. Questa annotazione è specificata nella classe e contiene metadati relativi al filtro dichiarato. I filtri annotati devono specificare almeno un modello di URL. La tabella sottostante elenca le proprietà dell'annotazione WebFilter.
N. Sr. | Proprietà e descrizione |
---|---|
1 | String filterName Nome del filtro |
2 | String[] urlPatterns Fornisce i valori del filtro applicativo o l'array di urlPatterns |
3 | DispatcherType[] dispatcherTypes Specifica il tipo di scheduler (richiesta/risposta) applicato al filtro |
4 | String[] servletNames Array che fornisce il nome del servlet |
5 | String displayName Nome del filtro |
6 | String description Descrizione del filtro |
7 | WebInitParam[] initParams Parametri di inizializzazione dell'array di questo filtro |
8 | Boolean asyncSupported Operazioni asincrone supportate dal filtro |
9 | String smallIcon Piccola icona del filtro (se esistente) |
10 | String largeIcon Grande icona del filtro (se esistente) |
Esempio di utilizzo dell'annotazione @WebFilter. È una semplice LogFilter che visualizza Init param test Il valore del parametro e il timestamp corrente. Questo significa che il funzionamento del filtro è simile a una interfaccia tra richiesta e risposta. Qui usiamo "/*" per rappresentare urlPattern. Questo significa che questo filtro si applica a tutti i servlet.
import java.io.IOException; import javax.servlet.annotation.WebFilter; import javax.servlet.annotation.WebInitParam; import javax.servlet.*; import java.util.*; // Implementazione della classe filtrante @WebFilter(urlPatterns = {"/*"}, initParams = { @WebInitParam(name = "test-param", value = "Parametro di Inizializzazione") public class LogFilter implements Filter { public void init(FilterConfig config) throws ServletException { // Ottiene i parametri di inizializzazione String testParam = config.getInitParameter("test-param"); // Stampa init parametri System.out.println("Test Param: " + testParam); public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // Registrare il timestamp corrente. System.out.println("Time " + new Date().toString()); // Passare la richiesta alla catena di filtri chain.doFilter(request, response); public void destroy() { /* Chiamare prima di eliminare l'istanza del filtro Servizi forniti dal container web*/
Compila Simple.java come al solito e metti i file classe nel <tomcat-installationdirectory>/webapps/ROOT/WEB-INF/classes.
Ora prova a chiamare qualsiasi servlet tramite l'esecuzione di http://localhost:8080/Simple. Vedrai il seguente output nella pagina web.
Hello Servlet Hello World!
Ora, apri la console di servlet. Lì, troverai i parametri di inizializzazione testparam e il timestamp corrente insieme al messaggio di notifica servlet.