English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Até agora, você já aprendeu como o Servlet usa o arquivo de descrição de deployment (web.xml) para deployar o aplicativo no servidor web. API Servlet 3A versão 3.0 introduziu um novo pacote chamado javax.servlet.annotation. que oferece tipos de anotações que podem ser usados para anotar classes Servlet. Se usar anotações, não é necessário o arquivo de descrição de deployment (web.xml). Mas você deve usar tomcat7ou qualquer versão mais alta do tomcat.
As anotações podem substituir a configuração XML equivalente no arquivo de descrição de deployment web.xml, por exemplo, declarações de servlet e mapeamentos de servlet. O contêiner servlet processará classes anotadas durante a depuração.
Servlet 3O tipo de anotação introduzido na versão 3.0 é
Sr.No. | Anotações e descrições |
---|---|
1 | @WebServlet Declara servlet |
2 | @WebInitParam Especifica os parâmetros de inicialização |
3 | @WebFilter Declara o filtro servlet |
4 | @WebListener Declara WebListener |
5 | @HandlesTypes Declara o tipo de classe que ServletContainerInitializer pode lidar. |
6 | @HttpConstraint Esta anotação é usada na anotação ServletSecurity para representar as restrições de segurança a serem aplicadas a todos os métodos do protocolo HTTP, para os quais não há elementos HttpMethodConstraint correspondentes na anotação ServletSecurity. |
7 | @HttpMethodConstraint Esta anotação é usada na anotação ServletSecurity para representar as restrições de segurança de mensagens específicas do protocolo HTTP. |
8 | @MultipartConfig Anotação que pode ser especificada na classe Servlet, indicando que a instância do Servlet espera que os dados sejam conformes a multipart/Requisições com tipo MIME de dados de formulário. |
9 | @ServletSecurity Esta anotação é usada para Servlet implementação de classe, para especificar as restrições de segurança que o container do Servlet aplica às mensagens do protocolo HTTP. |
Já discutimos detalhadamente algumas anotações.
@WebServlet é usado para declarar a configuração do Servlet com o container. A tabela a seguir contém a lista de propriedades usadas na anotação WebServlet.
Sr.No. | Atributos e descrição |
---|---|
1 | String name Nome do Servlet |
2 | String[] value Array de padrões de URL |
3 | String[] urlPatterns Array de padrões de URL para este filtro de aplicação |
4 | Int loadOnStartup O valor inteiro fornece uma sugestão de classificação de inicialização |
5 | WebInitParam[] initParams Parâmetros de array de inicialização do Servlet |
6 | Boolean asyncSupported Operações assíncronas suportadas pelo Servlet |
7 | String smallIcon Pequeno ícone do Servlet, se houver |
8 | String largeIcon Grande ícone do Servlet, se houver |
9 | String description Descrição do Servlet, se existir |
10 | String displayName Exibir o nome deste Servlet (se existir) |
É necessário declarar pelo menos um padrão de URL na propriedade value ou urlPattern da anotação, mas não pode declarar ambas as propriedades ao mesmo tempo.
Quando a propriedade a ser configurada é o padrão de URL, é recomendável usar a propriedade value, senão deve usar a propriedade urlPattern.
O exemplo a seguir descreve como usar a anotação @WebServlet. É um servlet simples que exibe o texto Hello 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>"); } }
Compile Simple.java da maneira usual e coloque os arquivos de classe dentro de <tomcat-installationdirectory>/webapps/ROOT/WEB-INF/classes.
Agora, tente executar http://localhost:8080/Chame qualquer servlet simplesmente. Você verá a seguinte saída no web page.
Hello servlet
@WebInitParam anotação é usada para especificar parâmetros de inicialização para Servlet ou filtro. Ela é usada nas anotações WebFilter ou webevlet. A tabela a seguir contém a lista de propriedades usadas na anotação WebInitParam.
Sr.No. | Atributos 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 |
@WebInitParam anotação é usada para especificar parâmetros de inicialização para Servlet ou filtro. Ela é usada nas anotações WebFilter ou webevlet. A tabela a seguir contém a lista de propriedades usadas na anotação 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>"); } }
Compile Simple.java da maneira usual e coloque os arquivos de classe dentro de <tomcat-installationdirectory>/webapps/ROOT/WEB-INF/classes.
Agora, tente executar http://localhost:8080/Chame qualquer servlet simplesmente. Você verá a seguinte saída no web page.
Hello Servlet Hello World!
Esta é a anotação usada para declarar o filtro servlet. Ele é processado pelo contêiner durante a deploy e aplica o filtro correspondente aos padrões de URL, servlets e tipos de dispatcher especificados.
@WebFilter anotação define o filtro da aplicação web. Esta anotação é especificada na classe e contém metadados sobre o filtro declarado. O filtro anotado deve especificar pelo menos um padrão de URL. A tabela a seguir lista os atributos usados na anotação WebFilter.
Sr.No. | Atributos e descrição |
---|---|
1 | String filterName Nome do filtro |
2 | String[] urlPatterns Fornecer o valor do filtro de aplicação ou o array de urlPatterns |
3 | DispatcherType[] dispatcherTypes Especificar o agendador aplicável ao filtro (solicitação/Tipo da resposta) |
4 | String[] servletNames Fornecer array de nomes de servlet |
5 | String displayName Nome do filtro |
6 | String description Descrição do filtro |
7 | WebInitParam[] initParams Parâmetros de inicialização do filtro |
8 | Boolean asyncSupported Operações assíncronas suportadas pelo filtro |
9 | String smallIcon Ícone pequeno do filtro (se houver) |
10 | String largeIcon Ícone grande do filtro (se houver) |
Abaixo está um exemplo de como usar a anotação @WebFilter. É um LogFilter simples, que exibe no console o Init param test param valor e o timestamp atual. Isso significa que o modo de operação do filtro é semelhante a uma camada de interface entre solicitação e resposta. Aqui usamos "/*”representa 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.*; //Implementar classe de filtro @WebFilter(urlPatterns = {"/*}, initParams = { @WebInitParam(name = "test-param", value = "Initialization Paramter")}) public class LogFilter implements Filter { public void init(FilterConfig config) throws ServletException { // Obter parâmetro de inicialização String testParam = config.getInitParameter("test-param"); //Imprimir parâmetro init System.out.println("Test Param: " + testParam); } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { //Grava o timestamp atual. System.out.println("Time " + new Date().toString()); //Passe a solicitação de volta à cadeia de filtros chain.doFilter(request,response); } public void destroy( ) { /* Chame antes de excluir a instância do filtro Serviços fornecidos pelo contêiner web*/ } }
Compile Simple.java da maneira usual e coloque os arquivos de classe dentro de <tomcat-installationdirectory>/webapps/ROOT/WEB-INF/classes.
Agora, tente executar http://localhost:8080/Chame qualquer servlet simplesmente. Você verá a seguinte saída no web page.
Hello Servlet Hello World!
Agora, abra o console servlet. Lá, você encontrará os parâmetros de inicialização testparam e o timestamp atual junto com as mensagens de notificação servlet.