Servlets - anotações

Até agora, você aprendeu como o Servlet usa o descritor de implantação (arquivo web.xml) para implantar seu aplicativo em um servidor web. Servlet API 3.0 introduziu um novo pacote chamado javax.servlet.annotation. Ele fornece tipos de anotação que podem ser usados ​​para anotar uma classe de servlet. Se você usar anotação, o descritor de implantação (web.xml) não é necessário. Mas você deve usar tomcat7 ou qualquer versão posterior do tomcat.

As anotações podem substituir a configuração XML equivalente no arquivo descritor de implementação da web (web.xml), como declaração de servlet e mapeamento de servlet. Os contêineres de servlet processarão as classes anotadas no momento da implantação.

Os tipos de anotação introduzidos no Servlet 3.0 são -

Sr. Não. Anotação e descrição
1

@WebServlet

Para declarar um servlet.

2

@WebInitParam

Para especificar um parâmetro de inicialização.

3

@WebFilter

Para declarar um filtro de servlet.

4

@WebListener

Para declarar um WebListener

5

@HandlesTypes

Para declarar os tipos de classe que um ServletContainerInitializer pode manipular.

6

@HttpConstraint

Essa anotação é usada na anotação ServletSecurity para representar as restrições de segurança a serem aplicadas a todos os métodos de protocolo HTTP para os quais um elemento HttpMethodConstraint correspondente NÃO ocorre na anotação ServletSecurity.

7

@HttpMethodConstraint

Essa anotação é usada na anotação ServletSecurity para representar restrições de segurança em mensagens de protocolo HTTP específicas.

8

@MultipartConfig

Anotação que pode ser especificada em uma classe de Servlet, indicando que as instâncias do Servlet esperam pedidos que estejam em conformidade com o tipo MIME multipart / form-data.

9

@ServletSecurity

Esta anotação é usada em uma classe de implementação de Servlet para especificar restrições de segurança a serem aplicadas por um contêiner de Servlet em mensagens de protocolo HTTP.

Aqui, discutimos algumas das Anotações em detalhes.

@WebServlet

O @WebServlet é usado para declarar a configuração de um Servlet com um contêiner. A tabela a seguir contém a lista de atributos usados ​​para anotação WebServlet.

Sr. Não. Atributo e descrição
1

String name

Nome do Servlet

2

String[] value

Matriz de padrões de URL

3

String[] urlPatterns

Matriz de padrões de URL aos quais este filtro se aplica

4

Int loadOnStartup

O valor inteiro dá a você a dica de ordem de inicialização

5

WebInitParam[] initParams

Matriz de parâmetros de inicialização para este Servlet

6

Boolean asyncSupported

Operação assíncrona suportada por este Servlet

7

String smallIcon

Pequeno ícone para este Servlet, se presente

8

String largeIcon

Ícone grande para este Servlet, se presente

9

String description

Descrição deste Servlet, se presente

10

String displayName

Exibir o nome deste Servlet, se presente

Pelo menos um padrão de URL DEVE ser declarado no value ou urlPattern atributo da anotação, mas não ambos.

o value atributo é recomendado para uso quando o padrão de URL é o único atributo sendo definido, caso contrário, o urlPattern atributo deve ser usado.

Exemplo

O exemplo a seguir descreve como usar a anotação @WebServlet. É um servlet simples que exibe o textoHello 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>");         
   }   
}

Compilar Simple.java da maneira usual e coloque seu arquivo de classe em <Tomcat-installationdirectory> / webapps / ROOT / WEB-INF / classes.

Agora tente chamar qualquer servlet executando http: // localhost: 8080 / Simple . Você verá a seguinte saída na página da web.

Hello servlet

@WebInitParam

A anotação @WebInitParam é usada para especificar um parâmetro de inicialização para um Servlet ou Filtro. É usado em anotações WebFilter ou WebSevlet. A tabela a seguir contém a lista de atributos usados ​​para a anotação WebInitParam.

Sr. Não. Atributo e descrição
1

String name

Nome do parâmetro de inicialização

2

String value

Valor do parâmetro de inicialização

3

String description

Descrição do parâmetro de inicialização

Exemplo

O exemplo a seguir descreve como usar a anotação @WeInitParam junto com a anotação @WebServlet. É um servlet simples que exibe o textoHello Servlet e o valor da string Hello World! que são retirados do init parâmetros.

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>");         
   }   
}

Compilar Simple.java da maneira usual e coloque seu arquivo de classe em <Tomcat-installationdirectory>; / webapps / ROOT / WEB-INF / classes.

Agora tente chamar qualquer servlet executando http: // localhost: 8080 / Simple . Você verá a seguinte saída na página da web.

Hello Servlet

Hello World!

@Webfilter

Esta é a anotação usada para declarar um filtro de servlet. Ele é processado pelo contêiner no momento da implementação e o filtro correspondente aplicado aos padrões de URL, servlets e tipos de dispatcher especificados.

o @WebFiltera anotação define um filtro em um aplicativo da web. Essa anotação é especificada em uma classe e contém metadados sobre o filtro que está sendo declarado. O filtro anotado deve especificar pelo menos um padrão de URL. A tabela a seguir lista os atributos usados ​​para anotações do WebFilter.

Sr. Não. Atributo e descrição
1

String filterName

Nome do filtro

2

String[] urlPatterns

Fornece matriz de valores ou urlPatterns aos quais o filtro se aplica

3

DispatcherType[] dispatcherTypes

Especifica os tipos de despachante (Solicitação / Resposta) aos quais o filtro se aplica

4

String[] servletNames

Fornece uma série de nomes de servlet

5

String displayName

Nome do filtro

6

String description

Descrição do filtro

7

WebInitParam[] initParams

Matriz de parâmetros de inicialização para este filtro

8

Boolean asyncSupported

Operação assíncrona suportada por este filtro

9

String smallIcon

Pequeno ícone para este filtro, se presente

10

String largeIcon

Ícone grande para este filtro, se presente

Exemplo

O exemplo a seguir descreve como usar a anotação @WebFilter. É um LogFilter simples que exibe o valor de Init-paramtest-parame o carimbo de data / hora atual no console. Isso significa que o filtro funciona como uma camada de interface entre a solicitação e a resposta. Aqui usamos "/ *" para urlPattern. Isso significa que este filtro é aplicável a todos os servlets.

import java.io.IOException; 
import javax.servlet.annotation.WebFilter; 
import javax.servlet.annotation.WebInitParam; 
import javax.servlet.*; 
import java.util.*;  

// Implements Filter class

@WebFilter(urlPatterns = {"/*"}, initParams = { 
   @WebInitParam(name = "test-param", value = "Initialization Paramter")}) 
public class LogFilter implements Filter {
   
   public void init(FilterConfig config) throws ServletException { 
      // Get init parameter  
      String testParam = config.getInitParameter("test-param");
            
      //Print the init parameter  
      System.out.println("Test Param: " + testParam);  
   } 

   public void doFilter(ServletRequest request, ServletResponse response,
      FilterChain chain) throws IOException, ServletException { 
	  
      // Log the current timestamp. 
      System.out.println("Time " + new Date().toString());  
         
      // Pass request back down the filter chain 
      chain.doFilter(request,response); 
   }

   public void destroy( ) {
      /* Called before the Filter instance is removed  
      from service by the web container*/ 
   } 
}

Compilar Simple.java da maneira usual e coloque seu arquivo de classe em <Tomcat-installationdirectory> / webapps / ROOT / WEB-INF / classes.

Agora tente chamar qualquer servlet executando http: // localhost: 8080 / Simple . Você verá a seguinte saída na página da web.

Hello Servlet
  
Hello World!

Agora, abra o console do servlet. Lá, você encontrará o valor doinit parâmetro testparam e a current timestamp junto com mensagens de notificação de servlet.