English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Come discusso nei capitoli precedenti, quando un server web risponde a una richiesta HTTP, la risposta di solito include una riga di stato, alcuni header di risposta, una riga vuota e il documento. Un esempio tipico di risposta è il seguente:
HTTP/1.1 200 OK Content-Type: text/html Header2: ... ... HeaderN: ... (Riga vuota) !doctype ... <html> <head>...</head> <body> ... </body> </html>
La riga di stato include la versione HTTP (in questo esempio HTTP/1.1), un codice di stato (in questo esempio 200) e un messaggio breve corrispondente al codice di stato (in questo esempio OK).
La tabella seguente riassume i più utili header di risposta HTTP 1.1 che vengono restituiti dal server web al browser, che utilizzerai spesso nella programmazione web:
Intestazioni di head | Descrizione |
---|---|
Allow | Questa intestazione specifica i metodi di richiesta supportati dal server (GET, POST ecc.). |
Cache-Control | Questa intestazione specifica in quali circostanze il documento di risposta può essere archiviato in modo sicuro. I valori possibili sono:public, private o no-cache ecc. Public significa che il documento è archiviabile, Private significa che il documento è un documento privato per un singolo utente e può essere memorizzato solo nella cache privata (non condivisa), no-cache significa che il documento non dovrebbe essere archiviato. |
Connection | Questa intestazione indica se il browser utilizza una connessione HTTP persistente. Valore close Indica che il browser non utilizza una connessione HTTP persistente, valore keep-alive Significa utilizzare una connessione persistente. |
Content-Disposition | Questa intestazione consente di richiedere al browser di salvare la risposta come file con un nome specificato. |
Content-Encoding | Durante il trasporto, questa intestazione specifica il metodo di codifica della pagina. |
Content-Language | Questa intestazione indica la lingua utilizzata per scrivere il documento. Ad esempio, en, en-us, ru ecc. |
Content-Length | Questa intestazione indica il numero di byte nel corpo della risposta. Queste informazioni sono necessarie solo quando il browser utilizza una connessione HTTP persistente (keep-alive). |
Content-Type | Questa intestazione fornisce il tipo MIME (Multipurpose Internet Mail Extension) del documento di risposta. |
Expires | Questa intestazione specifica quando il contenuto diventa non più archiviabile, dopo di che il contenuto non viene più archiviato. |
Last-Modified | Questa intestazione indica l'ora dell'ultima modifica del documento. Dopo di che, il client può memorizzare il file nella cache e richiedere il file in futuro tramite If-Modified-Since L'intestazione di richiesta fornisce una data. |
Location | Questa intestazione dovrebbe essere inclusa in tutte le risposte con codice di stato. Entro 300 secondi, avvisa il browser dell'indirizzo del documento. Il browser si riconnetterà automaticamente a questa posizione e otterrà il nuovo documento. |
Refresh | Questa intestazione specifica come il browser dovrebbe richiedere il refresh della pagina il più rapidamente possibile. È possibile specificare il numero di secondi per il refresh della pagina. |
Retry-After | Questa intestazione può essere utilizzata insieme al codice di risposta 503 (Service Unavailable - Servizio non disponibile), il che avvisa il client di quanto tempo deve attendere prima di ripetere la sua richiesta. |
Set-Cookie | Questa intestazione specifica un cookie associato alla pagina. |
I seguenti metodi possono essere utilizzati per impostare gli header di risposta HTTP in un programma Servlet. Questi metodi passano HttpServletResponse Oggetto disponibile.
Numero | Metodo & Descrizione |
---|---|
1 | String encodeRedirectURL(String url) Codificare l'URL specificato utilizzato nel metodo sendRedirect, o restituire l'URL non modificato se la codifica non è necessaria. |
2 | String encodeURL(String url) Codificare l'URL specificato che contiene l'ID di sessione, o restituire l'URL non modificato se la codifica non è necessaria. |
3 | boolean containsHeader(String name) Restituire un valore booleano che indica se è stato già impostato un header di risposta nome specificato. |
4 | boolean isCommitted() Restituire un valore booleano che indica se la risposta è stata già inviata. |
5 | void addCookie(Cookie cookie) Aggiungere il cookie specificato alla risposta. |
6 | void addDateHeader(String name, long date) Aggiungere un header di risposta con un nome e un valore di data dati. |
7 | void addHeader(String name, String value) Aggiungere un header di risposta con un nome e un valore dati. |
8 | void addIntHeader(String name, int value) Aggiungere un header di risposta con un nome e un valore intero dati. |
9 | void flushBuffer() Forzare qualsiasi contenuto nel buffer a essere scritto al client. |
10 | void reset() Pulire qualsiasi dato esistente nel buffer, inclusi lo stato e gli header. |
11 | void resetBuffer() Pulire il contenuto del buffer di base nella risposta, senza pulire lo stato e gli header. |
12 | void sendError(int sc) Inviare una risposta di errore al client utilizzando il codice di stato specificato e pulire il buffer. |
13 | void sendError(int sc, String msg) Inviare una risposta di errore al client utilizzando lo stato specificato. |
14 | void sendRedirect(String location) Inviare una risposta di redirezione temporanea al client utilizzando l'URL di posizione di redirezione specificato. |
15 | void setBufferSize(int size) 为响应主体设置首选的缓冲区大小。 |
16 | void setCharacterEncoding(String charset) 设置被发送到客户端的响应的字符编码(MIME 字符集)例如,UTF-8。 |
17 | void setContentLength(int len) 设置在 HTTP Servlet 响应中的内容主体的长度,该方法设置 HTTP Content-Length 头。 |
18 | void setContentType(String type) 如果响应还未被提交,设置被发送到客户端的响应的内容类型。 |
19 | void setDateHeader(String name, long date) 设置一个带有给定的名称和日期值的响应报头。 |
20 | void setHeader(String name, String value) 设置一个带有给定的名称和值的响应报头。 |
21 | void setIntHeader(String name, int value) 设置一个带有给定的名称和整数值的响应报头。 |
22 | void setLocale(Locale loc) 如果响应还未被提交,设置响应的区域。 |
23 | void setStatus(int sc) 为该响应设置状态码。 |
您已经在前面的示例中看到 setContentType() 方法,下面的示例也使用了同样的方法,此外,我们会用 setIntHeader() 方法来设置 Refresh 头。
//导入必需的 java 库 import java.io.IOException; import java.io.PrintWriter; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/Refresh") //Extend HttpServlet class public class Refresh extends HttpServlet { //Method to handle GET method requests public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //Set the automatic reload time to 5 seconds response.setIntHeader("Refresh", 5); //Set response content type response.setContentType("text/html;charset=UTF-8"); //Get a calendar using the default time zone and language environment Calendar cale = Calendar.getInstance(); //Convert Calendar type to Date type Date tasktime = cale.getTime(); //Set the date output format SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //Formatted output String nowTime = df.format(tasktime); PrintWriter out = response.getWriter(); String title = "Automatic Refresh Header Setting - Basic Tutorial Website Example"; String docType = "<!DOCTYPE html>\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: " + nowTime + "</p>\n" } // Metodo per gestire la richiesta POST public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
L'esempio di test sopra è situato nel progetto TomcatTest, la configurazione corrispondente web.xml è la seguente:
<?xml version="1.0" encoding="UTF-8"?> <web-app> <servlet> <!-- Nome della classe --> <servlet-name>Refresh</servlet-name> <!-- Pacchetto in cui si trova --> <servlet-class>com.w3codebox.test.Refresh</servlet-class> </servlet> <servlet-mapping> <servlet-name>Refresh</servlet-name> <!-- Indirizzo del sito visitato --> <url-pattern>/TomcatTest/Refresh</url-pattern> </servlet-mapping> </web-app>
Ora, chiamare il seguente Servlet, ogni 5 secondi verrà visualizzato l'ora sistema corrente. Basta eseguire il Servlet e aspettare un momento, per vedere i seguenti risultati: