Middle
Como é que o processamento de uma requisição HTTP é realizado na classe HttpServlet?
sobes.tech IA
Resposta da IA
O processamento de pedidos HTTP na classe HttpServlet é feito através da sobrescrita de um dos métodos doGet, doPost, doPut, doDelete, doHead, doOptions, doTrace ou service.
Ciclo de vida do processamento do pedido:
- O contêiner de servlets (por exemplo, Tomcat) recebe o pedido HTTP.
- O contêiner determina o servlet correspondente com base na URL do pedido.
- Se o servlet ainda não estiver carregado, o contêiner cria uma instância, chama o método
init()(uma única vez durante toda a vida do servlet) e o coloca no pool. - O contêiner cria os objetos
HttpServletRequesteHttpServletResponse, que encapsulam os dados do pedido e fornecem métodos para formar a resposta. - O contêiner chama o método
service(HttpServletRequest req, HttpServletResponse resp)do servlet. - A implementação padrão de
servicedetermina o tipo de método HTTP (GET, POST, etc.) e delega o processamento ao método correspondentedo<Method>(doGet,doPost, etc.), passando os objetos de pedido e resposta. - O desenvolvedor sobrescreve o método
do<Method>necessário para implementar a lógica específica do processamento do pedido. - O método
do<Method>forma a resposta, escrevendo dados emHttpServletResponse. - Após a conclusão do método
service, o contêiner envia a resposta formada ao cliente. - Quando o contêiner decide descarregar o servlet (por exemplo, ao parar a aplicação), ele chama o método
destroy()para liberar recursos.
Exemplo de sobrescrita de doGet:
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
public class MyServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Definir o tipo de conteúdo e codificação da resposta
response.setContentType("text/html;charset=UTF-8");
// Obter PrintWriter para escrever a resposta
try (PrintWriter out = response.getWriter()) {
// Escrever HTML na resposta
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>Saudação</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Olá do meu servlet!</h1>");
out.println("</body>");
out.println("</html>");
}
}
}
Tabela com os métodos principais do<Method> e seu propósito:
| Método | Propósito |
|---|---|
doGet |
Processamento de requisições GET (obtenção de dados, operações idempotentes). |
doPost |
Processamento de requisições POST (envio de dados para processamento, criação de recursos). |
doPut |
Processamento de requisições PUT (atualização de recursos). |
doDelete |
Processamento de requisições DELETE (remoção de recursos). |
doHead |
Processamento de requisições HEAD (obtenção apenas de cabeçalhos de resposta). |
doOptions |
Processamento de requisições OPTIONS (obter informações sobre métodos disponíveis). |
doTrace |
Processamento de requisições TRACE (depuração, eco da requisição). |
Sobrescrever o método service permite redefinir completamente a lógica de roteamento de requisições, mas geralmente sobrescrevem os específicos do<Method>.