CodeGym /Cursos Java /Módulo 3 /Moldando respostas de servlet

Moldando respostas de servlet

Módulo 3
Nível 12 , Lição 2
Disponível

3.1 Classe HttpServletResponse

Depois de chamar service()seu método de servlet, o contêiner da Web gerará uma resposta para o cliente com base no arquivo HttpServletResponse. Portanto, se você deseja influenciar de alguma forma a resposta ao cliente, deve modificar esse objeto.

A resposta do servidor consiste em três partes:

  • Linha de status (por exemplo: 200 OK)
  • Cabeçalhos
  • corpo da resposta

E os métodos de classe HttpServletResponsetambém são divididos em 3 grupos? Quase:

Métodos Descrição
1 void setStatus(int sc) Define o código de status da resposta.
2 void sendError(int sc) Envia um erro para o cliente com o código especificado.
3 void sendError(int sc, String msg) Envia um erro com o código especificado e uma mensagem para o cliente.
4 void addHeader(String name, String value) Adiciona um cabeçalho à lista de cabeçalhos de resposta.
5 void setHeader(String name, String value) Altera o cabeçalho na lista de cabeçalhos de resposta.
6 boolean containsHeader(String name) Verifica se o cabeçalho já existe.
7 void addCookie(Cookie cookie) Adiciona um Cookie à resposta.
8 void sendRedirect(String location) Redireciona o cliente para um URL diferente.
9 String encodeRedirectURL(String url) Codifica a URL especificada para uso no método sendRedirect.
10 String encodeURL(String url) Codifica o URL especificado, incluindo o ID da sessão.
onze void setContentType(String type) Define o MimeType do resultado.
12 void setContentLength(int len) Define o comprimento do corpo da resposta.
13 void setCharacterEncoding(String charset) Define o conjunto de codificação de resposta.
14 void setBufferSize(int size) Define o tamanho do buffer para o corpo da resposta.
15 boolean isCommitted() Verifica se o buffer já foi gravado na resposta.
16 void flushBuffer() Grava o conteúdo do buffer na resposta.
17 void reset() Redefine todos os dados armazenados no buffer, cabeçalhos e códigos de resposta.
18 void resetBuffer() Limpa o buffer de resposta.

Os métodos aqui são bastante triviais. Mas vou dar-lhe alguns destaques abaixo.

Tampão . A resposta do seu servlet é gravada em um buffer, não enviada imediatamente ao usuário. Portanto, em algum momento (se, por exemplo, ocorrer um erro), você pode redefinir (apagar) tudo o que está gravado no buffer. Você pode até chamar o método reset() e apagar não apenas o conteúdo do buffer, mas também os cabeçalhos com o código de resposta.

3.2 redirecionar()

O segundo ponto importante é o redirecionamento. Se o seu servlet decidir redirecionar o cliente para outra URL, você precisará, de alguma forma, enviar essa URL para o cliente. Isso pode ser feito usando o arquivo sendRedirect.

Mas há uma nuance importante. O URI pode conter um intervalo maior de caracteres do que o permitido no corpo da resposta. Portanto, a URL deve primeiro ser codificada em um conjunto de caracteres válido antes de chamar o método sendRedirect(). Existe um método especial para isso encodeRedirectURL(String url). Use-o.

Exemplo de redirecionamento:


public class RedirectServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception {
        String newUrl = "http://google.com?q=Learn to google!";
        String redirectUrl = response.encodeRedirectURL(newUrl);
        response.sendRedirect(redirectUrl);
    }
}

3.3 método getWriter()

E agora vamos aprender a escrever nosso texto como um corpo de resposta. Para fazer isso, a classe HttpServletResponsepossui um método especial getWriter()que retorna um objeto PrintStream. Se alguém esqueceu, esse é o tipo de campo com o nome System.out.

Para escrever algum texto como uma resposta do servlet, você precisa:

  • Obtenha o objeto PrintStream chamando o método response.getWriter().
  • Escreva o que achar necessário no objeto PrintStream (todos os dados serão gravados no buffer).
  • Envie o buffer para o usuário chamando o método close()no PrintStream.

Vamos escrever um servlet que some dois números ae bretorne o resultado para o usuário:



public class CalculatorServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception {
         // Getting the parameter “a” and “b” from request
        String a = request.getParameter("a");
        String b = request.getParameter("b");
 
        try {
            // Convert strings to numbers and calculate sum
            int sum = Integer.parseInt(a) + Integer.parseInt(b);
 
            // Print HTML as a response for browser
            response.setContentType("text/html;charset=UTF-8");
            PrintWriter out = response.getWriter();
 
            out.println("<html>");
            out.println("<head> <title> CalculatorServlet </title> </head>");
            out.println("<body>");
            out.println("<h1> Sum == " + sum + "</h1>");
            out.println("</body>");
            out.println("</html>");
        } finally {
            out.close();
        }
    }
}


Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION