3.1 Clase HttpServletResponse
Después de llamar service()
a su método de servlet, el contenedor web generará una respuesta al cliente basada en el archivo HttpServletResponse
. Entonces, si desea influir de alguna manera en la respuesta del cliente, debe modificar este objeto.
La respuesta del servidor consta de tres partes:
- Línea de estado (por ejemplo: 200 OK)
- Encabezados
- Cuerpo de respuesta
¿ Y los métodos de clase HttpServletResponse
también se dividen en 3 grupos? Casi:
Métodos | Descripción | |
---|---|---|
1 | void setStatus(int sc) |
Establece el código de estado de respuesta. |
2 | void sendError(int sc) |
Envía un error al cliente con el código especificado. |
3 | void sendError(int sc, String msg) |
Envía un error con el código especificado y un mensaje al cliente. |
4 | void addHeader(String name, String value) |
Agrega un encabezado a la lista de encabezados de respuesta. |
5 | void setHeader(String name, String value) |
Cambia el encabezado en la lista de encabezados de respuesta. |
6 | boolean containsHeader(String name) |
Comprueba si el encabezado ya existe. |
7 | void addCookie(Cookie cookie) |
Agrega una Cookie a la respuesta. |
8 | void sendRedirect(String location) |
Redirige al cliente a una URL diferente. |
9 | String encodeRedirectURL(String url) |
Codifica la URL especificada para su uso en el método sendRedirect. |
10 | String encodeURL(String url) |
Codifica la URL especificada, incluido el ID de sesión. |
once | void setContentType(String type) |
Establece el MimeType del resultado. |
12 | void setContentLength(int len) |
Establece la longitud del cuerpo de la respuesta. |
13 | void setCharacterEncoding(String charset) |
Establece el conjunto de codificación de respuesta. |
14 | void setBufferSize(int size) |
Establece el tamaño del búfer para el cuerpo de la respuesta. |
15 | boolean isCommitted() |
Comprueba si el búfer ya se ha escrito en la respuesta. |
dieciséis | void flushBuffer() |
Escribe el contenido del búfer en la respuesta. |
17 | void reset() |
Restablece todos los datos almacenados en el búfer, encabezados y códigos de respuesta. |
18 | void resetBuffer() |
Borra el búfer de respuesta. |
Los métodos aquí son bastante triviales. Pero te daré algunos puntos destacados a continuación.
Amortiguador _ La respuesta de su servlet se escribe en un búfer, no se envía inmediatamente al usuario. Por lo tanto, en algún momento (si, por ejemplo, ocurre un error), puede restablecer (borrar) todo lo que está escrito en el búfer. Incluso puede llamar al método reset() y borrar no solo el contenido del búfer, sino también los encabezados con el código de respuesta.
3.2 redirigir()
El segundo punto importante es la redirección. Si su servlet decide redirigir al cliente a otra URL, entonces debe enviar esta URL de alguna manera al cliente. Esto se puede hacer usando el sendRedirect
.
Pero hay un matiz importante. El URI puede contener una gama de caracteres más amplia que la permitida en el cuerpo de la respuesta. Por lo tanto, primero se debe codificar la URL en un juego de caracteres válido antes de llamar al método sendRedirect()
. Hay un método especial para esto encodeRedirectURL(String url)
. úsalo
Ejemplo de redirección:
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()
Y ahora aprenderemos a escribir nuestro texto como un cuerpo de respuesta. Para ello, la clase HttpServletResponse
tiene un método especial getWriter()
que devuelve un objeto PrintStream
. Si alguien se olvidó, este es el tipo de campo con el nombre System.out
.
Para escribir un texto como respuesta del servlet, necesita:
- Obtenga el objeto PrintStream llamando al
response.getWriter()
. - Escriba lo que considere necesario en el objeto PrintStream (todos los datos se escribirán en el búfer).
- Envíe el búfer al usuario llamando al método
close()
en PrintStream.
Escribamos un servlet que sume dos números a
y b
devuelva el resultado al usuario:
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