Questão de Programação — Servlet — FGV 2024
- Código
- fg075978
- Banca
- FGV
- Órgão
- AL-TO
- Ano
- 2024
- Nível
- Superior
- Cargo
- Analista Legislativo - Desenvolvimento de Sistema
- A

- B

- C

- D

- E






GabaritoA — [imagem]
Gabarito: letra A. A alternativa correta utiliza a API moderna fetch do JavaScript para realizar uma requisição HTTP do tipo GET, passando o parâmetro placa diretamente na URL através de uma template literal, que é a forma mais concisa e adequada para consumir o serviço exposto pela Servlet no enunciado.
O enunciado descreve uma Servlet que processa uma requisição doGet e extrai o parâmetro placa via request.getParameter("placa"). Para consumir esse serviço, o cliente JavaScript deve realizar uma chamada que envie esse parâmetro na query string da URL. A API fetch é o padrão moderno para requisições assíncronas, substituindo o antigo XMLHttpRequest e simplificando o uso de Promises para tratar a resposta.
O código utiliza fetch com uma template literal (delimitada por crases) para construir a URL /buscarDono?placa=${placa}. Isso injeta corretamente o valor da variável placa na query string, exatamente como a Servlet espera receber. O encadeamento .then(response => response.text()) é adequado, pois a Servlet do enunciado responde com response.getWriter().write(...), que envia texto puro (plain text) ao cliente.
Embora utilize jQuery ($.ajax), o código define o método como POST e tenta enviar o parâmetro dentro de um objeto DATA (o correto seria data). A Servlet do enunciado foi implementada com o método doGet, portanto, uma requisição POST não seria processada pelo método doGet da Servlet.
O código utiliza XMLHttpRequest de forma manual e incorreta. A sintaxe xhr.open('POST' /buscarDono, true) possui um erro de sintaxe (falta de vírgula entre os argumentos), e o método send tenta enviar uma string placa=${placa} que não segue o formato padrão de application/x-www-form-urlencoded esperado para requisições POST, além de novamente utilizar o método POST para um serviço que espera GET.
O código utiliza fetch com method: 'GET', mas tenta enviar o parâmetro através do body (JSON.stringify({ placa: placa })). Requisições GET não possuem corpo (body) para envio de dados; parâmetros devem ser enviados na URL. Além disso, o cabeçalho application/json sugere que a Servlet deveria processar JSON, mas o enunciado indica que ela escreve texto puro.
O código utiliza a biblioteca axios e envia o parâmetro como id: placa dentro de params. Embora o axios trate a query string corretamente, o parâmetro esperado pela Servlet é placa, e não id. Portanto, a Servlet não conseguiria recuperar o valor correto através de request.getParameter("placa").
Ao consumir Servlets, sempre verifique o método HTTP (GET ou POST) e como os parâmetros são esperados. Se a Servlet usa getParameter, ela espera os dados na URL (query string) ou no corpo da requisição (se for POST). O fetch é a ferramenta mais cobrada atualmente por ser nativa e baseada em Promises.
Link permanente: /questoes/fg075978