English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Annotazioni Servlet

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

@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 属性。

Esempio online

下面的示例描述了如何使用 @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

@WebInitParam 注解用于为 Servlet 或过滤器指定初始化参数。它在 WebFilter 或 webevlet 注解中使用。下表包含用于 WebInitParam 注解的属性列表。

N. Sr.Proprietà e descrizione
1

String name

初始化参数的名称

2

String value

初始化参数的值

3

String description

初始化参数的描述

Esempio online

@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!

@Webfilter

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 online

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.