Servlets
O componente que processa uma requisição HTTP e o contrato que o contêiner impõe a você.
Servlets Java
Uma servlet é a única coisa que, em uma aplicação Jakarta EE, realmente transforma uma requisição HTTP em resposta. Todo o resto — JSP, JSTL, filtros, frameworks inteiros como o Spring MVC — é construído por cima dela. Quando você escreve um @RestController do Spring, ele acaba, no fim do percurso, em uma servlet chamada DispatcherServlet. Entender essa classe é entender o alicerce de toda a web Java.
O problema que a servlet resolve é o da concorrência. Cem visitantes acessam seu servidor ao mesmo tempo. É preciso criar cem objetos? Cem threads? Quem os destrói? A resposta da especificação é contraintuitiva e cheia de consequências: o contêiner cria uma única instância da sua servlet e a faz ser atravessada por todas as threads simultaneamente. Essa decisão, tomada por você, explica metade dos bugs de produção em aplicações Java web: um campo de instância em uma servlet é um estado compartilhado entre todos os usuários.
Esta lição acompanha uma requisição de ponta a ponta: como o contêiner escolhe qual servlet chamar, quando ele instancia e destrói o objeto, como ler parâmetros e cabeçalhos, como decidir entre um redirecionamento e um encaminhamento, e como reconhecer um visitante de uma requisição para a seguinte, já que o HTTP não tem nenhuma memória.
Comentários
Os comentários são alimentados pelo GitHub Discussions
Conecte-se com o GitHub para participar da discussão