Servlets - Códigos de estado HTTP
El formato de la solicitud HTTP y los mensajes de respuesta HTTP son similares y tendrán la siguiente estructura:
Una línea de estado inicial + CRLF (retorno de carro + salto de línea, es decir, nueva línea)
Cero o más líneas de encabezado + CRLF
Una línea en blanco, es decir, un CRLF
Un cuerpo de mensaje opcional como archivo, datos de consulta o salida de consulta.
Por ejemplo, un encabezado de respuesta del servidor tiene el siguiente aspecto:
HTTP/1.1 200 OK
Content-Type: text/html
Header2: ...
...
HeaderN: ...
(Blank Line)
<!doctype ...>
<html>
<head>...</head>
<body>
...
</body>
</html>
La línea de estado consta de la versión HTTP (HTTP / 1.1 en el ejemplo), un código de estado (200 en el ejemplo) y un mensaje muy corto correspondiente al código de estado (OK en el ejemplo).
A continuación se muestra una lista de códigos de estado HTTP y mensajes asociados que pueden devolverse desde el servidor web:
Código | Mensaje | Descripción |
---|---|---|
100 | Seguir | El servidor solo ha recibido una parte de la solicitud, pero mientras no haya sido rechazada, el cliente debe continuar con la solicitud. |
101 | Protocolos de conmutación | El servidor cambia de protocolo. |
200 | Okay | La solicitud está bien |
201 | Creado | La solicitud está completa y se crea un nuevo recurso |
202 | Aceptado | La solicitud se acepta para su procesamiento, pero el procesamiento no está completo. |
203 | Información no autorizada | |
204 | Sin contenido | |
205 | Restablecer contenido | |
206 | Contenido parcial | |
300 | Múltiples opciones | Una lista de enlaces. El usuario puede seleccionar un enlace e ir a esa ubicación. Máximo cinco direcciones |
301 | Movido permanentemente | La página solicitada se ha movido a una nueva URL. |
302 | Encontró | La página solicitada se ha movido temporalmente a una nueva URL. |
303 | Ver otros | La página solicitada se puede encontrar en una URL diferente |
304 | No modificado | |
305 | Usa proxy | |
306 | No usado | Este código se utilizó en una versión anterior. Ya no se usa, pero el código está reservado |
307 | Redireccionamiento temporal | La página solicitada se ha movido temporalmente a una nueva URL. |
400 | Solicitud incorrecta | El servidor no entendió la solicitud. |
401 | No autorizado | La página solicitada necesita un nombre de usuario y una contraseña |
402 | pago requerido | Todavía no puedes usar este código |
403 | Prohibido | Prohibido el acceso a la página solicitada |
404 | Extraviado | El servidor no puede encontrar la página solicitada. |
405 | Método no permitido | El método especificado en la solicitud no está permitido. |
406 | Inaceptable | El servidor solo puede generar una respuesta que no es aceptada por el cliente. |
407 | Se requiere autenticación proxy | Debe autenticarse con un servidor proxy antes de que se pueda atender esta solicitud. |
408 | Pide tiempo fuera | La solicitud tardó más de lo que el servidor estaba preparado para esperar. |
409 | Conflicto | La solicitud no se pudo completar debido a un conflicto. |
410 | Ido | La página solicitada ya no está disponible. |
411 | Longitud requerida | La "Longitud del contenido" no está definida. El servidor no aceptará la solicitud sin ella. |
412 | Condición previa Falló | La condición previa dada en la solicitud evaluada como falsa por el servidor. |
413 | Solicitar entidad demasiado grande | El servidor no aceptará la solicitud porque la entidad de la solicitud es demasiado grande. |
414 | URL de solicitud demasiado larga | El servidor no aceptará la solicitud porque la URL es demasiado larga. Ocurre cuando convierte una solicitud de "publicación" en una solicitud de "obtención" con una información de consulta larga. |
415 | Tipo de papel no admitido | El servidor no aceptará la solicitud porque el tipo de medio no es compatible. |
417 | Expectativa fallida | |
500 | error de servidor interno | La solicitud no se completó. El servidor se encontró con una condición inesperada. |
501 | No se ha implementado | La solicitud no se completó. El servidor no admitía la funcionalidad requerida. |
502 | Puerta de enlace incorrecta | La solicitud no se completó. El servidor recibió una respuesta no válida del servidor ascendente. |
503 | Servicio no disponible | La solicitud no se completó. El servidor se está sobrecargando o cayendo temporalmente. |
504 | Tiempo de espera de puerta de enlace | Se agotó el tiempo de espera de la puerta de enlace. |
505 | Versión HTTP no compatible | El servidor no admite la versión "protocolo http". |
Métodos para establecer el código de estado HTTP
Los siguientes métodos se pueden utilizar para configurar el código de estado HTTP en su programa de servlet. Estos métodos están disponibles con el objeto HttpServletResponse .
No Señor. | Método y descripción |
---|---|
1 | public void setStatus ( int statusCode ) Este método establece un código de estado arbitrario. El método setStatus toma un int (el código de estado) como argumento. Si su respuesta incluye un código de estado especial y un documento, asegúrese de llamar a setStatus antes de devolver el contenido con PrintWriter . |
2 | public void sendRedirect(String url) Este método genera una respuesta 302 junto con un encabezado de ubicación que proporciona la URL del nuevo documento |
3 | public void sendError(int code, String message) Este método envía un código de estado (generalmente 404) junto con un mensaje corto que se formatea automáticamente dentro de un documento HTML y se envía al cliente. |
Ejemplo de código de estado HTTP
El siguiente es el ejemplo que enviaría un código de error 407 al navegador del cliente y el navegador le mostraría "¡Necesita autenticación!" mensaje.
// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
// Extend HttpServlet class
public class showError extends HttpServlet {
// Method to handle GET method request.
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Set error code and reason.
response.sendError(407, "Need authentication!!!" );
}
// Method to handle POST method request.
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
Ahora llamar al servlet anterior mostraría el siguiente resultado:
HTTP Status 407 - Need authentication!!!
type Status report
messageNeed authentication!!!
descriptionThe client must first authenticate itself with the proxy (Need authentication!!!).
Apache Tomcat/5.5.29