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.