Servlet: risposta HTTP del server
Come discusso nel capitolo precedente, quando un server Web risponde a una richiesta HTTP, la risposta consiste tipicamente in una riga di stato, alcune intestazioni di risposta, una riga vuota e il documento. Una risposta tipica è simile a questa:
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 riepilogo delle intestazioni di risposta HTTP 1.1 più utili che risalgono al browser dal lato server web e che useresti molto frequentemente nella programmazione web -
Sr.No. | Intestazione e descrizione |
---|---|
1 | Allow Questa intestazione specifica i metodi di richiesta (GET, POST, ecc.) Supportati dal server. |
2 | Cache-Control Questa intestazione specifica le circostanze in cui il documento di risposta può essere memorizzato nella cache in modo sicuro. Può avere valoripublic, private o no-cache ecc. Pubblico significa che il documento è memorizzabile nella cache, Privato significa che il documento è per un singolo utente e può essere archiviato solo in cache private (non condivise) e nocache significa che il documento non deve mai essere memorizzato nella cache. |
3 | Connection Questa intestazione indica al browser se utilizzare o meno la persistente nelle connessioni HTTP. Un valore diclose indica al browser di non utilizzare connessioni HTTP persistenti e keepalive significa usare connessioni persistenti. |
4 | Content-Disposition Questa intestazione consente di richiedere che il browser chieda all'utente di salvare la risposta su disco in un file con il nome specificato. |
5 | Content-Encoding Questa intestazione specifica il modo in cui la pagina è stata codificata durante la trasmissione. |
6 | Content-Language Questa intestazione indica la lingua in cui è scritto il documento. Ad esempio en, en-us, ru, ecc |
7 | Content-Length Questa intestazione indica il numero di byte nella risposta. Queste informazioni sono necessarie solo se il browser utilizza una connessione HTTP persistente (keep-alive). |
8 | Content-Type Questa intestazione fornisce il tipo MIME (Multipurpose Internet Mail Extension) del documento di risposta. |
9 | Expires Questa intestazione specifica l'ora in cui il contenuto deve essere considerato non aggiornato e quindi non deve più essere memorizzato nella cache. |
10 | Last-Modified Questa intestazione indica quando il documento è stato modificato l'ultima volta. Il client può quindi memorizzare il documento nella cache e fornire una data tramite un fileIf-Modified-Since richiesta di intestazione nelle richieste successive. |
11 | Location Questa intestazione dovrebbe essere inclusa in tutte le risposte che hanno un codice di stato nei 300. Questo notifica al browser l'indirizzo del documento. Il browser si riconnette automaticamente a questa posizione e recupera il nuovo documento. |
12 | Refresh Questa intestazione specifica quanto presto il browser dovrebbe richiedere una pagina aggiornata. È possibile specificare il tempo in numero di secondi dopo il quale una pagina verrà aggiornata. |
13 | Retry-After Questa intestazione può essere utilizzata insieme a una risposta 503 (Servizio non disponibile) per indicare al client quanto tempo può ripetere la sua richiesta. |
14 | Set-Cookie Questa intestazione specifica un cookie associato alla pagina. |
Metodi per impostare l'intestazione della risposta HTTP
Esistono i seguenti metodi che possono essere utilizzati per impostare l'intestazione della risposta HTTP nel programma servlet. Questi metodi sono disponibili con l' oggetto HttpServletResponse .
Sr.No. | Metodo e descrizione |
---|---|
1 | String encodeRedirectURL(String url) Codifica l'URL specificato per l'uso nel metodo sendRedirect o, se la codifica non è necessaria, restituisce l'URL invariato. |
2 | String encodeURL(String url) Codifica l'URL specificato includendovi l'ID di sessione o, se la codifica non è necessaria, restituisce l'URL invariato. |
3 | boolean containsHeader(String name) Restituisce un valore booleano che indica se l'intestazione della risposta denominata è già stata impostata. |
4 | boolean isCommitted() Restituisce un valore booleano che indica se la risposta è stata confermata. |
5 | void addCookie(Cookie cookie) Aggiunge il cookie specificato alla risposta. |
6 | void addDateHeader(String name, long date) Aggiunge un'intestazione di risposta con il nome e il valore della data forniti. |
7 | void addHeader(String name, String value) Aggiunge un'intestazione di risposta con il nome e il valore forniti. |
8 | void addIntHeader(String name, int value) Aggiunge un'intestazione di risposta con il nome specificato e il valore intero. |
9 | void flushBuffer() Forza la scrittura sul client di qualsiasi contenuto nel buffer. |
10 | void reset() Cancella tutti i dati presenti nel buffer, nonché il codice di stato e le intestazioni. |
11 | void resetBuffer() Cancella il contenuto del buffer sottostante nella risposta senza cancellare le intestazioni o il codice di stato. |
12 | void sendError(int sc) Invia una risposta di errore al client utilizzando il codice di stato specificato e cancellando il buffer. |
13 | void sendError(int sc, String msg) Invia una risposta di errore al client utilizzando lo stato specificato. |
14 | void sendRedirect(String location) Invia una risposta di reindirizzamento temporaneo al client utilizzando l'URL del percorso di reindirizzamento specificato. |
15 | void setBufferSize(int size) Imposta la dimensione del buffer preferita per il corpo della risposta. |
16 | void setCharacterEncoding(String charset) Imposta la codifica dei caratteri (set di caratteri MIME) della risposta inviata al client, ad esempio, su UTF-8. |
17 | void setContentLength(int len) Imposta la lunghezza del corpo del contenuto nella risposta Nei servlet HTTP, questo metodo imposta l'intestazione HTTP Content-Length. |
18 | void setContentType(String type) Imposta il tipo di contenuto della risposta inviata al client, se la risposta non è stata ancora confermata. |
19 | void setDateHeader(String name, long date) Imposta un'intestazione di risposta con il nome e il valore della data specificati. |
20 | void setHeader(String name, String value) Imposta un'intestazione di risposta con il nome e il valore forniti. |
21 | void setIntHeader(String name, int value) Imposta un'intestazione di risposta con il nome specificato e il valore intero |
22 | void setLocale(Locale loc) Imposta la locale della risposta, se la risposta non è stata ancora confermata. |
23 | void setStatus(int sc) Imposta il codice di stato per questa risposta |
Esempio di risposta dell'intestazione HTTP
Hai già visto il metodo setContentType () funzionare negli esempi precedenti e anche il seguente esempio userebbe lo stesso metodo, inoltre useremmo setIntHeader() metodo da impostare Refresh intestazione.
// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
// Extend HttpServlet class
public class Refresh extends HttpServlet {
// Method to handle GET method request.
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Set refresh, autoload time as 5 seconds
response.setIntHeader("Refresh", 5);
// Set response content type
response.setContentType("text/html");
// Get current time
Calendar calendar = new GregorianCalendar();
String am_pm;
int hour = calendar.get(Calendar.HOUR);
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
if(calendar.get(Calendar.AM_PM) == 0)
am_pm = "AM";
else
am_pm = "PM";
String CT = hour+":"+ minute +":"+ second +" "+ am_pm;
PrintWriter out = response.getWriter();
String title = "Auto Refresh Header Setting";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n"+
"<body bgcolor = \"#f0f0f0\">\n" +
"<h1 align = \"center\">" + title + "</h1>\n" +
"<p>Current Time is: " + CT + "</p>\n"
);
}
// Method to handle POST method request.
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
Ora chiamando il servlet sopra verrà visualizzato l'ora del sistema corrente ogni 5 secondi come segue. Basta eseguire il servlet e attendere di vedere il risultato -
Auto Refresh Header Setting
Current Time is: 9:44:50 PM