Serwlety - adnotacje

Do tej pory dowiedziałeś się, jak Servlet wykorzystuje deskryptor wdrażania (plik web.xml) do wdrażania aplikacji na serwerze WWW. Servlet API 3.0 wprowadził nowy pakiet o nazwie javax.servlet.annotation. Udostępnia typy adnotacji, których można używać do opisywania klasy serwletu. Jeśli używasz adnotacji, deskryptor wdrażania (web.xml) nie jest wymagany. Ale powinieneś użyć tomcat7 lub dowolnej późniejszej wersji tomcat.

Adnotacje mogą zastąpić równoważną konfigurację XML w pliku deskryptora wdrażania WWW (web.xml), taką jak deklaracja serwletu i mapowanie serwletu. Kontenery serwletów będą przetwarzać klasy z adnotacjami w czasie wdrażania.

Typy adnotacji wprowadzone w Servlet 3.0 to -

Sr.No. Adnotacja i opis
1

@WebServlet

Aby zadeklarować serwlet.

2

@WebInitParam

Aby określić parametr inicjalizacji.

3

@WebFilter

Aby zadeklarować filtr serwletów.

4

@WebListener

Aby zadeklarować WebListener

5

@HandlesTypes

Aby zadeklarować typy klas, które może obsługiwać ServletContainerInitializer.

6

@HttpConstraint

Ta adnotacja jest używana w adnotacji ServletSecurity do reprezentowania ograniczeń bezpieczeństwa, które mają być stosowane do wszystkich metod protokołu HTTP, dla których odpowiedni element HttpMethodConstraint NIE występuje w adnotacji ServletSecurity.

7

@HttpMethodConstraint

Ta adnotacja jest używana w adnotacji ServletSecurity do reprezentowania ograniczeń bezpieczeństwa w określonych wiadomościach protokołu HTTP.

8

@MultipartConfig

Adnotacja, która może być określona w klasie Servlet, wskazująca, że ​​instancje serwletu oczekują żądań zgodnych z typem MIME multipart / form-data.

9

@ServletSecurity

Ta adnotacja jest używana w klasie implementacji serwletu do określenia ograniczeń bezpieczeństwa, które mają być egzekwowane przez kontener serwletów w wiadomościach protokołu HTTP.

Tutaj omówiliśmy szczegółowo niektóre adnotacje.

@WebServlet

@WebServlet służy do deklarowania konfiguracji serwletu z kontenerem. Poniższa tabela zawiera listę atrybutów używanych do adnotacji serwletu WebServlet.

Sr.No. Atrybut i opis
1

String name

Nazwa serwletu

2

String[] value

Tablica wzorców adresów URL

3

String[] urlPatterns

Tablica wzorców adresów URL, do których ma zastosowanie ten filtr

4

Int loadOnStartup

Wartość całkowita daje wskazówkę dotyczącą kolejności uruchamiania

5

WebInitParam[] initParams

Tablica parametrów inicjalizacyjnych dla tego serwletu

6

Boolean asyncSupported

Operacja asynchroniczna obsługiwana przez ten serwlet

7

String smallIcon

Mała ikona tego serwletu, jeśli jest obecna

8

String largeIcon

Duża ikona tego serwletu, jeśli jest obecna

9

String description

Opis tego serwletu, jeśli występuje

10

String displayName

Wyświetl nazwę tego serwletu, jeśli jest obecny

Co najmniej jeden wzorzec adresu URL MUSI być zadeklarowany w pliku value lub urlPattern atrybut adnotacji, ale nie oba.

Plik value atrybut jest zalecany do użycia, gdy wzorzec adresu URL jest jedynym ustawianym atrybutem, w przeciwnym razie urlPattern należy użyć atrybutu.

Przykład

Poniższy przykład opisuje, jak używać adnotacji @WebServlet. Jest to prosty serwlet, który wyświetla tekstHello 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>");         
   }   
}

Skompilować Simple.java w zwykły sposób i umieść plik klasy w katalogu <Tomcat-installationdirectory> / webapps / ROOT / WEB-INF / classes.

Teraz spróbuj wywołać dowolny serwlet, uruchamiając http: // localhost: 8080 / Simple . Na stronie internetowej zobaczysz następujące dane wyjściowe.

Hello servlet

@WebInitParam

Adnotacja @WebInitParam służy do określania parametru inicjalizacji dla serwletu lub filtru. Jest używany w adnotacjach WebFilter lub WebSevlet. Poniższa tabela zawiera listę atrybutów używanych do adnotacji WebInitParam.

Sr.No. Atrybut i opis
1

String name

Nazwa parametru inicjalizacji

2

String value

Wartość parametru inicjalizacji

3

String description

Opis parametru inicjalizacji

Przykład

Poniższy przykład opisuje, jak używać adnotacji @WeInitParam wraz z adnotacją @WebServlet. Jest to prosty serwlet, który wyświetla tekstHello Servlet i wartość ciągu Hello World! które są pobierane z init parametry.

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

Skompilować Simple.java w zwykły sposób i umieść plik klasy w <Tomcat-installationdirectory>; / webapps / ROOT / WEB-INF / classes.

Teraz spróbuj wywołać dowolny serwlet, uruchamiając http: // localhost: 8080 / Simple . Na stronie internetowej zobaczysz następujące dane wyjściowe.

Hello Servlet

Hello World!

@Webfilter

To jest adnotacja używana do deklarowania filtru serwletu. Jest przetwarzany przez kontener w czasie wdrażania, a odpowiedni filtr jest stosowany do określonych wzorców adresów URL, serwletów i typów programów rozsyłających.

Plik @WebFilteradnotacja definiuje filtr w aplikacji internetowej. Ta adnotacja jest określona w klasie i zawiera metadane dotyczące deklarowanego filtru. Filtr z adnotacjami musi określać co najmniej jeden wzorzec adresu URL. W poniższej tabeli wymieniono atrybuty używane do adnotacji WebFilter.

Sr.No. Atrybut i opis
1

String filterName

Nazwa filtra

2

String[] urlPatterns

Zawiera tablicę wartości lub urlPatterns, do których stosuje się filtr

3

DispatcherType[] dispatcherTypes

Określa typy rozsyłacza (żądanie / odpowiedź), do którego ma zastosowanie filtr

4

String[] servletNames

Udostępnia tablicę nazw serwletów

5

String displayName

Nazwa filtra

6

String description

Opis filtra

7

WebInitParam[] initParams

Tablica parametrów inicjalizacji dla tego filtru

8

Boolean asyncSupported

Operacja asynchroniczna obsługiwana przez ten filtr

9

String smallIcon

Mała ikona tego filtra, jeśli jest obecna

10

String largeIcon

Duża ikona tego filtra, jeśli jest obecna

Przykład

W poniższym przykładzie opisano, jak używać adnotacji @WebFilter. Jest to prosty LogFilter, który wyświetla wartość parametru Inittest-parami aktualny czas na konsoli. Oznacza to, że filtr działa jak warstwa interfejsu między żądaniem a odpowiedzią. Tutaj używamy "/ *" dla urlPattern. Oznacza to, że ten filtr ma zastosowanie do wszystkich serwletów.

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*/ 
   } 
}

Skompilować Simple.java w zwykły sposób i umieść plik klasy w katalogu <Tomcat-installationdirectory> / webapps / ROOT / WEB-INF / classes.

Teraz spróbuj wywołać dowolny serwlet, uruchamiając http: // localhost: 8080 / Simple . Na stronie internetowej zobaczysz następujące dane wyjściowe.

Hello Servlet
  
Hello World!

Teraz otwórz konsolę serwletu. Tam znajdziesz wartośćinit parametr testparam i current timestamp wraz z powiadomieniami serwletu.