Princípios de Funcionamento dos Servlets
Servlets são componentes de servidor gerenciados por um contêiner web. Quando o servidor recebe uma requisição do navegador, ele a encaminha para o Servlet correspondente, que processa a lógica e gera uma resposta.
Configuração de Mapeamento de Requisições
O mapeamento define como as URLs são associadas aos Servlets no arquivo de configuração web.xml. Abaixo estão diversas abordagens para configurar esses mapeamentos.
1. Caminho Único de Mapeamento
Associa um Servlet a uma URL específica.
<servlet-mapping>
<servlet-name>meuServico</servlet-name>
<url-pattern>/servico1</url-pattern>
</servlet-mapping>
2. Múltiplos Caminhos de Mapeamento
Um único Servlet pode responder a várias URLs.
<servlet-mapping>
<servlet-name>meuServico</servlet-name>
<url-pattern>/servico1</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>meuServico</servlet-name>
<url-pattern>/servico2</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>meuServico</servlet-name>
<url-pattern>/servico3</url-pattern>
</servlet-mapping>
3. Mapeamento Genérico com Caractere Curinga
Utiliza o caratcere * para capturar URLs que correspondam a um padrão.
<servlet-mapping>
<servlet-name>meuServico</servlet-name>
<url-pattern>/servico/*</url-pattern>
</servlet-mapping>
4. Caminhos de Solicitação Padrão
Um Servlet pode ser definido como o manipulador padrão para requisições não correspondidas, substituindo o tratamento padrão do servidor.
5. Especificação de Prefixos ou Sufixos
Permite mapear Servlets com base em extensões de arquivo ou prefixos de URL.
<servlet-mapping>
<servlet-name>processador</servlet-name>
<url-pattern>*.acao</url-pattern>
</servlet-mapping>
Nota: O caractere curinga não deve ser precedido por uma barra / quando usado com sufixos.
6. Personalização da Página de Erro 404
Um Servlet customizado pode ser configurado para tratar requisições não encontradas.
package com.exemplo.web;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ManipuladorErro extends HttpServlet {
@Override
protected void doGet(HttpServletRequest pedido, HttpServletResponse resposta) throws IOException {
resposta.setContentType("text/html");
resposta.setCharacterEncoding("UTF-8");
PrintWriter escritor = resposta.getWriter();
escritor.println("<h1>Erro 404: Recurso não localizado.</h1>");
}
@Override
protected void doPost(HttpServletRequest pedido, HttpServletResponse resposta) throws IOException {
doGet(pedido, resposta);
}
}
Registro no web.xml:
<servlet>
<servlet-name>erro404</servlet-name>
<servlet-class>com.exemplo.web.ManipuladorErro</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>erro404</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
7. Prioridade de Mapeamento
Caminhos de mapeamento específicos têm prioridade sobre padrões genéricos. Se uma URL não corresponder a nenhum mapeamento definido, o servidor recorre ao mapeamento padrão configurado.