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();
}
}
}
GO TO FULL VERSION