Servlet - Codici di stato Http
Il formato della richiesta HTTP e dei messaggi di risposta HTTP sono simili e avranno la seguente struttura:
Una riga di stato iniziale + CRLF (Carriage Return + Line Feed ie New Line)
Zero o più righe di intestazione + CRLF
Una riga vuota, cioè un CRLF
Un corpo del messaggio opzionale come file, dati di query o output di query.
Ad esempio, un'intestazione di risposta del server ha il seguente aspetto:
HTTP/1.1 200 OK
Content-Type: text/html
Header2: ...
...
HeaderN: ...
(Blank Line)
<!doctype ...>
<html>
<head>...</head>
<body>
...
</body>
</html>
La riga di stato è composta dalla versione HTTP (HTTP / 1.1 nell'esempio), un codice di stato (200 nell'esempio) e un messaggio molto breve corrispondente al codice di stato (OK nell'esempio).
Di seguito è riportato un elenco di codici di stato HTTP e messaggi associati che potrebbero essere restituiti dal server Web:
Codice | Messaggio | Descrizione |
---|---|---|
100 | Continua | Solo una parte della richiesta è stata ricevuta dal server, ma fino a quando non è stata rifiutata, il client dovrebbe continuare con la richiesta |
101 | Passaggio da un protocollo all'altro | Il server cambia protocollo. |
200 | ok | La richiesta è OK |
201 | Creato | La richiesta è completa e viene creata una nuova risorsa |
202 | Accettato | La richiesta viene accettata per l'elaborazione, ma l'elaborazione non è completa. |
203 | Informazioni non autorevoli | |
204 | Nessun contenuto | |
205 | Reimposta contenuto | |
206 | Contenuto parziale | |
300 | Scelte multiple | Un elenco di collegamenti. L'utente può selezionare un collegamento e andare a quella posizione. Massimo cinque indirizzi |
301 | trasferito | La pagina richiesta è stata spostata su un nuovo URL |
302 | Trovato | La pagina richiesta è stata temporaneamente spostata su un nuovo URL |
303 | Vedi altro | La pagina richiesta può essere trovata sotto un URL diverso |
304 | Non modificato | |
305 | Usa un proxy | |
306 | Inutilizzato | Questo codice è stato utilizzato in una versione precedente. Non è più utilizzato, ma il codice è riservato |
307 | Reindirizzamento temporaneo | La pagina richiesta è stata temporaneamente spostata su un nuovo URL. |
400 | Brutta richiesta | Il server non ha compreso la richiesta |
401 | Non autorizzato | La pagina richiesta richiede un nome utente e una password |
402 | Pagamento richiesto | Non puoi ancora usare questo codice |
403 | Vietato | È vietato l'accesso alla pagina richiesta |
404 | Non trovato | Il server non riesce a trovare la pagina richiesta. |
405 | operazione non permessa | Il metodo specificato nella richiesta non è consentito. |
406 | Non accettabile | Il server può generare solo una risposta non accettata dal client. |
407 | Autenticazione proxy richiesta | È necessario autenticarsi con un server proxy prima di poter servire questa richiesta. |
408 | Richiedi timeout | La richiesta ha richiesto più tempo di quanto il server fosse disposto ad attendere. |
409 | Conflitto | La richiesta non può essere completata a causa di un conflitto. |
410 | Andato | La pagina richiesta non è più disponibile. |
411 | Lunghezza richiesta | La "Content-Length" non è definita. Il server non accetterà la richiesta senza di essa. |
412 | Precondizione non riuscita | La precondizione data nella richiesta valutata come falsa dal server. |
413 | Entità richiesta troppo grande | Il server non accetterà la richiesta, perché l'entità della richiesta è troppo grande. |
414 | URL richiesta troppo lungo | Il server non accetterà la richiesta, perché l'URL è troppo lungo. Si verifica quando si converte una richiesta "post" in una richiesta "get" con una lunga query di informazioni. |
415 | Tipo di supporto non supportato | Il server non accetterà la richiesta, perché il tipo di supporto non è supportato. |
417 | Aspettativa fallita | |
500 | Errore interno del server | La richiesta non è stata completata. Il server ha incontrato una condizione imprevista. |
501 | Non implementato | La richiesta non è stata completata. Il server non supportava la funzionalità richiesta. |
502 | Bad Gateway | La richiesta non è stata completata. Il server ha ricevuto una risposta non valida dal server upstream. |
503 | Servizio non disponibile | La richiesta non è stata completata. Il server è temporaneamente in sovraccarico o inattivo. |
504 | Timeout gateway | Il gateway è scaduto. |
505 | Versione HTTP non supportata | Il server non supporta la versione "protocollo http". |
Metodi per impostare il codice di stato HTTP
I seguenti metodi possono essere utilizzati per impostare il codice di stato HTTP nel programma servlet. Questi metodi sono disponibili con l' oggetto HttpServletResponse .
Sr.No. | Metodo e descrizione |
---|---|
1 | public void setStatus ( int statusCode ) Questo metodo imposta un codice di stato arbitrario. Il metodo setStatus accetta un int (il codice di stato) come argomento. Se la tua risposta include un codice di stato speciale e un documento, assicurati di chiamare setStatus prima di restituire effettivamente qualsiasi contenuto con PrintWriter . |
2 | public void sendRedirect(String url) This method generates a 302 response along with a Location header giving the URL of the new document |
3 | public void sendError(int code, String message) This method sends a status code (usually 404) along with a short message that is automatically formatted inside an HTML document and sent to the client. |
HTTP Status Code Example
Following is the example which would send a 407 error code to the client browser and browser would show you "Need authentication!!!" message.
// 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);
}
}
Now calling the above servlet would display the following result −
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