Questão nº 43
Questão de Engenharia de Software · FCC TST 2017 (nº 43)
Uma servlet de uma aplicação Java EE recebe as requisições de pesquisa enviadas a partir de formulários HTML, processa estas requisições e encaminha para uma classe que acessa o banco de dados. Esta classe faz a pesquisa na tabela do banco e quando encontra o valor desejado, retorna o registro equivalente para a servlet que exibe os dados para o usuário no formato HTML. O método da servlet que recebe as requisições é apresentado abaixo.
```java
@Override
protected void doGet(I rq, II rp) throws ServletException, IOException {
//implementação do método aqui
}
```
O componente do padrão de projeto MVC em que essa servlet deve ser representada e as lacunas I e II equivalem, correta e respectivamente, a
- AController, `ServletRequest` e `ServletResponse`
- BModel, `HttpServletRequest` e `HttpServletResponse`
- CControl, `RequestOperation` e `ResponseOperation`
- DController, `HttpServletRequest` e `HttpServletResponse` (alternativa correta)
- EModel, `HTTPRequest` e `HTTPResponse`
Resposta comentada
Gabarito Alternativa D
O padrão de projeto MVC (Model-View-Controller) organiza a aplicação em três componentes principais: o Model (dados e lógica de negócio), a View (interface do usuário) e o Controller (recebe requisições, interage com o Model e seleciona a View).
(A) Incorreta: O componente `Controller` está correto para a servlet. No entanto, `ServletRequest` e `ServletResponse` são interfaces mais genéricas; a assinatura padrão do método `doGet` em `HttpServlet` utiliza as classes mais específicas `HttpServletRequest` e `HttpServletResponse`. Esta é a armadilha da banca, pois embora `HttpServletRequest` e `HttpServletResponse` implementem essas interfaces, a questão busca a equivalência correta e respectiva com a assinatura do método, que usa os tipos HTTP específicos.
(B) Incorreta: A servlet descrita atua como um Controller, não como um Model. O Model seria a classe que acessa o banco de dados e a lógica de negócio associada aos dados.
(C) Incorreta: `Control` é um sinônimo para Controller, mas `RequestOperation` e `ResponseOperation` não são classes ou interfaces padrão do Java EE para manipulação de requisições e respostas HTTP.
(D) Correta: A servlet que recebe requisições, as processa (inicialmente, sem a lógica de negócio principal) e encaminha para outras camadas (Model) para depois preparar a resposta (View), atua como um Controller. As lacunas `I` e `II` na assinatura do método `doGet` de uma `HttpServlet` são preenchidas, correta e respectivamente, por `HttpServletRequest` (para a requisição HTTP) e `HttpServletResponse` (para a resposta HTTP).
(E) Incorreta: A servlet descrita atua como um Controller, não como um Model. Além disso, `HTTPRequest` e `HTTPResponse` não são os nomes das classes padrão do Java EE para requisições e respostas HTTP; os nomes corretos são `HttpServletRequest` e `HttpServletResponse`.
Fonte: FCC TST 2017 Analista Judiciário - Análise de Sistemas (Caderno Tipo 1). Reproduzida para fins de estudo.