8.1 Introdução às anotações do servlet
A partir da versão 7, o Tomcat começou a oferecer suporte à especificação de servlet da Web Servlet API 3.0 . Em particular, um pacote apareceu nele chamado javax.servlet.annotation
. Ele contém vários tipos de anotações que podem ser usadas para anotar uma classe de servlet. Se você usar uma anotação, o descritor de implementação (web.xml) não será necessário.
Lista das anotações mais úteis:
anotação | Descrição | |
---|---|---|
1 | @WebServlet |
Declara um servlet |
2 | @WebInitParam |
Especifica um parâmetro de inicialização |
3 | @WebFilter |
Declara um filtro da web |
4 | @WebListener |
Declara o lisener da web |
5 | @ServletSecurity |
Permite definir configurações de segurança |
Exemplo:
@WebServlet( urlPatterns = {"/api/*"} )
public class Example extends HttpServlet {
protected void doGet( HttpServletRequest request, HttpServletResponse response) throws Exception {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("Hello World!");
}
}
Uma anotação é suficiente para declarar um servlet e mapeá-lo para atender todas as requisições que chegarão à URL fornecida pelo /api/*
.
8.2 Configurando o mapeamento do servlet
A anotação tem @WebServlet
muitos parâmetros que permitem uma configuração muito flexível do servlet que ela descreve. Vejamos os principais:
Atributo | Descrição | |
---|---|---|
1 | name |
Nome exclusivo do servlet (como em web.xml) |
2 | displayName |
Nome do servlet legível por humanos |
3 | description |
Descrição do servlet |
4 | value |
Define a url para mapeamento |
5 | urlPatterns |
Especifica uma lista de URLs para mapear (usado em vez de valor) |
6 | initParams |
Permite definir os parâmetros de inicialização do servlet |
7 | asyncSupported |
Especifica que o servlet pode ser executado de forma assíncrona (HTTP/2) |
8 | loadOnStartup |
Número de sequência para controlar a prioridade de início do servlet |
9 | smallIcon |
Define um pequeno ícone de servlet |
10 | largeIcon |
Define um grande ícone de servlet |
Há vários pontos interessantes aqui.
Primeiro, observe que value
e urlPatterns
são atributos intercambiáveis. Ambos permitem que você especifique uma lista de URLs para os quais o servlet deve mapear.
Em segundo lugar, o parâmetro asyncSupported
indica se o servlet processará corretamente as solicitações assíncronas no protocolo HTTP/2.
E o terceiro atributo importante é initParams
, ele permite definir uma lista de parâmetros que serão colocados no ServletContext.
Exemplo:
@WebServlet(
urlPatterns = {"/sendFile", "/uploadFile"},
loadOnStartup = 1,
asyncSupported = true,
initParams = {
@WebInitParam(name = "saveDir", value = "c:/uploaded"),
@WebInitParam(name = "allowedTypes", value = "jpg,gif,png")
}
)
public class ImageUploadServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception {
String saveDir = getInitParameter("saveDir");
String fileTypes = getInitParameter("allowedTypes");
PrintWriter writer = response.getWriter();
writer.println("saveDir = " + saveDir);
writer.println("fileTypes = " + fileTypes);
}
}
8.3 Configurando o mapeamento do filtro
Conforme mencionado acima, os filtros são um tipo utilitário de servlets e são configurados como servlets. Aqui estão os atributos que uma anotação tem @WebFilter
:
Atributo | Descrição | |
---|---|---|
1 | filterName |
Nome exclusivo do filtro (como em web.xml) |
2 | displayName |
Nome do filtro legível por humanos |
3 | description |
Descrição do filtro |
4 | value / urlPatterns |
Define uma lista de URLs para mapear |
5 | dispatcherTypes |
Especifica uma lista de DispatcherTypes |
6 | servletNames |
Especifica uma lista de servlets aos quais aplicar |
7 | initParams |
Permite definir os parâmetros iniciais do filtro |
8 | asyncSupported |
Especifica que o filtro pode ser executado de forma assíncrona (HTTP/2) |
9 | smallIcon |
Define um pequeno ícone de filtro |
10 | largeIcon |
Define um grande ícone de filtro |
Um exemplo de filtro que intercepta todas as solicitações para servlets específicos :
@WebFilter(servletNames = {"MyOwnServlet", "UploadServlet"})
public class MyFilter implements Filter {
// implements Filter's methods here...
}
Um exemplo de um filtro com vários parâmetros :
@WebFilter(
urlPatterns = "/uploadFilter",
initParams = @WebInitParam(name = "fileTypes", value = "doc;xls;zip;txt;jpg;png;gif")
)
public class UploadFilter implements Filter {
// implements Filter's methods here...
}
Um exemplo de um tipo de filtro fornecido para RequestDispatcher :
@WebFilter(
urlPatterns = "/admin",
dispatcherTypes = {DispatcherType.REQUEST, DispatcherType.FORWARD}
)
public class MyFilter implements Filter {
// implements Filter's methods here...
}
Você aprenderá mais sobre a finalidade dos filtros e servlets nas aulas a seguir.