Considere uma aplicação web desenvolvida utilizando-se o Jav...
index.html
< !DOCTYPE html>
<html>
<head>
<title>Teste</title>
</head>
<body>
<form method ="post" action="Controle">
<p>Interesses:< br />
<label><input type="checkbox" value="Livros" name="interesses"/>Livros</label>
<label><input type="checkbox" value="Revistas" name="interesses"/>Revistas</label>
<label><input type="checkbox" value="Teatro" name="interesses"/>Teatro</label>
</p>
<p> <input type="submit" value="Enviar"/></p>
</form>
</body>
</html>
Controle.java
import java.io.*;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
@WebServlet(name = "Controle", urlPatterns = {"/Controle"})
public class Controle extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
}
Com base nessa aplicação e na plataforma Java EE 6 é correto afirmar que
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Alternativa correta: C
A alternativa C é a correta porque afirma que os pacotes javax.servlet e javax.servlet.http oferecem interfaces e classes necessárias para escrever servlets, o que é uma afirmação verdadeira. A classe javax.servlet.http.HttpServlet é uma classe abstrata do Java EE que simplifica a criação de servlets ao prover métodos que são chamados de acordo com o tipo de requisição HTTP recebida (GET, POST, PUT, DELETE, etc).
Os métodos doGet e doPost são exemplos de métodos que podem ser sobrescritos para personalizar o comportamento da servlet em resposta a requisições HTTP GET e POST, respectivamente. Na servlet Controle fornecida na questão, os métodos doGet e doPost foram implementados e ambos chamam o método processRequest, embora esse último não esteja plenamente implementado. A ideia é que, dependendo do tipo de requisição, a lógica apropriada seja executada dentro do método processRequest ou diretamente nos métodos doGet/doPost.
É importante mencionar que a alternativa A está errada porque o método getParameter retorna um String e não um array, e é usado para obter um único valor de parâmetro. Quando se espera vários valores, como numa seleção de checkboxes com o mesmo nome, deve-se usar getParameterValues, que retorna um array de String.
A alternativa B também está incorreta porque o formulário HTML está configurado para usar o método POST (method="post"). Portanto, os dados do formulário serão enviados para o método doPost da servlet, não para doGet.
A alternativa D contém erros de sintaxe no código Java, como o uso incorreto de size() em vez de length para verificar o tamanho de um array, e a alternativa E está errada porque os métodos doPost e doGet não devem ser removidos, pois eles são parte do ciclo de vida da servlet e responsáveis por tratar requisições HTTP específicas.
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
a) Alternativa ERRADA. Para realizar a operação indicada seria necessário fazer String[3] interesses = request.getParameterValues("interesses");. Os dados selecionados serão as posições não-nulas do vetor.
b) Alternativa ERRADA. Ao submeter os dados selecionados no formulário HTML, esses dados serão recebidos no método doPost da servlet, pois apesar do GET ser o método padrão para requisições HTTP em uma aplicação web, foi especificado method ="post" na declaração do form.
c) Alternativa CORRETA.
http://docs.oracle.com/javaee/1.3/api/javax/servlet/http/HttpServlet.html
d) Alternativa ERRADA. A variável interesse neste caso, por ser um vetor primitivo, não possui o método .size(). A condição de repetição nesse caso deveria ser for (int i=0; i<=interesses.length; i>.
e) Alternativa ERRADA. A HttpServlet receberá as requisições através de seus métodos doPost e doGet, devendo então delegar a continuidade do fluxo para o método processRequest da classe Controle.java.
<p>Interesses:< br /> ->>>>> <p>Interesses:<br/>
Ainda há outra dica na letra d: a expressão <= gera exceção.
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo