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 HttpServletResponse
també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 HttpServletResponse
possui 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 a
e b
retorne 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