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.