Sambutan HTTP pelayan Servlet
Seperti yang dibincangkan dalam bahagian sebelumnya, apabila pelayan web bertindak balas kepada permintaan HTTP, respons biasanya termasuk baris status, beberapa pengepala respons, baris kosong dan dokumentasi. Respons biasa kelihatan seperti ini:
HTTP/1.1 200 OK Content-Type: text/html Header2: ... ... HeaderN: ... (Blank Line) <!doctype ...> <html> <head>...</head> <body> ... </body> </html>
Baris status termasuk versi HTTP (dalam kes ini HTTP/1.1), kod status (dalam kes ini 200) dan rentetan pendek yang sepadan dengan kod status (OK dalam kes ini).
Jadual berikut meringkaskan pengepala respons HTTP 1.1 yang paling berguna yang dikembalikan daripada pelayan web ke penyemak imbas, yang akan anda gunakan dengan kerap dalam pengaturcaraan web:
头信息 | 描述 |
---|---|
Allow | 这个头信息指定服务器支持的请求方法(GET、POST 等)。 |
Cache-Control | 这个头信息指定响应文档在何种情况下可以安全地缓存。可能的值有:public、private 或 no-cache 等。Public 意味着文档是可缓存,Private 意味着文档是单个用户私用文档,且只能存储在私有(非共享)缓存中,no-cache 意味着文档不应被缓存。 |
Connection | 这个头信息指示浏览器是否使用持久 HTTP 连接。值 close 指示浏览器不使用持久 HTTP 连接,值 keep-alive 意味着使用持久连接。 |
Content-Disposition | 这个头信息可以让您请求浏览器要求用户以给定名称的文件把响应保存到磁盘。 |
Content-Encoding | 在传输过程中,这个头信息指定页面的编码方式。 |
Content-Language | 这个头信息表示文档编写所使用的语言。例如,en、en-us、ru 等。 |
Content-Length | 这个头信息指示响应中的字节数。只有当浏览器使用持久(keep-alive)HTTP 连接时才需要这些信息。 |
Content-Type | 这个头信息提供了响应文档的 MIME(Multipurpose Internet Mail Extension)类型。 |
Expires | 这个头信息指定内容过期的时间,在这之后内容不再被缓存。 |
Last-Modified | 这个头信息指示文档的最后修改时间。然后,客户端可以缓存文件,并在以后的请求中通过 If-Modified-Since 请求头信息提供一个日期。 |
Location | 这个头信息应被包含在所有的带有状态码的响应中。在 300s 内,这会通知浏览器文档的地址。浏览器会自动重新连接到这个位置,并获取新的文档。 |
Refresh | 这个头信息指定浏览器应该如何尽快请求更新的页面。您可以指定页面刷新的秒数。 |
Retry-After | 这个头信息可以与 503(Service Unavailable 服务不可用)响应配合使用,这会告诉客户端多久就可以重复它的请求。 |
Set-Cookie | 这个头信息指定一个与页面关联的 cookie。 |
Kaedah untuk menetapkan pengepala respons HTTP
Kaedah berikut boleh digunakan untuk menetapkan pengepala respons HTTP dalam program Servlet. Kaedah ini tersedia melalui objek HttpServletResponse.
Nombor siri | Kaedah & Penerangan |
---|---|
1 | String encodeRedirectURL(String url ) Enkodkan URL yang ditentukan untuk digunakan dalam kaedah sendRedirect, atau jika pengekodan tidak diperlukan, kembalikan URL tidak berubah. |
2 | String encodeURL(String url) Encode URL yang ditentukan yang mengandungi ID sesi, atau jika pengekodan tidak diperlukan , URL yang dikembalikan kekal tidak berubah. |
3 | boolean containsHeader(String name) Mengembalikan nilai Boolean yang menunjukkan sama ada pengepala respons yang dinamakan telah ditetapkan. |
4 | boolean isCommitted() Mengembalikan nilai Boolean yang menunjukkan sama ada respons telah dilakukan. |
5 | void addCookie(Cookie cookie) Menambahkan kuki yang ditentukan pada respons. |
6 | kosongkan addDateHeader(Nama rentetan, tarikh panjang) Menambahkan respons dengan nama dan kepala berita nilai tarikh yang diberikan. |
7 | void addHeader(String name, String value) Menambahkan pengepala respons dengan nama dan nilai yang diberikan . |
8 | void addIntHeader(String name, int value) Menambahkan respons dengan nama yang diberikan dan kepala berita nilai integer. |
9 | void flushBuffer() Memaksa apa-apa dalam penimbal untuk ditulis kepada klien. |
10 | void reset() Kosongkan sebarang data yang terdapat dalam penimbal, termasuk kod status dan pengepala. |
11 | void resetBuffer() Kosongkan kandungan penimbal asas dalam respons, tetapi jangan kosongkan kod status dan tajuk. |
12 | void sendError(int sc) Menghantar respons ralat kepada klien menggunakan kod status yang ditentukan dan mengosongkan penimbal . |
13 | void sendError(int sc, String msg) Menghantar respons ralat kepada klien menggunakan status yang ditentukan. |
14 | void sendRedirect(String location) Menghantar respons ubah hala sementara kepada klien menggunakan URL lokasi ubah hala yang ditentukan. |
15 | void setBufferSize(int size) Menetapkan saiz penimbal pilihan untuk badan tindak balas. |
16 | void setCharacterEncoding(String charset) Tetapkan pengekodan aksara (MIME charset) bagi respons yang dihantar kepada klien cth. , UTF-8. |
17 | void setContentLength(int len) Tetapkan panjang isi kandungan dalam respons HTTP Servlet ditetapkan pengepala Panjang Kandungan HTTP. |
18 | void setContentType(String type) Tetapkan kandungan respons yang dihantar kepada klien jika respons belum dihantar lagi jenis. |
19 | void setDateHeader(Nama rentetan, tarikh panjang) Menetapkan pengepala respons dengan nama dan nilai tarikh yang diberikan. |
20 | void setHeader(String name, String value) Tetapkan pengepala respons dengan nama dan nilai yang diberikan. |
21 | void setIntHeader(String name, int value) Menetapkan respons dengan nama yang diberikan dan kepala berita nilai integer. |
22 | void setLocale(Locale loc) Jika respons belum diserahkan lagi, tetapkan tempat respons. |
23 | void setStatus(int sc) Menetapkan kod status untuk respons ini. |
Contoh Respons Pengepala HTTP
Anda telah melihat kaedah setContentType() dalam contoh sebelumnya, dan perkara yang sama digunakan dalam contoh berikut Kaedah, sebagai tambahan, kami akan menggunakan kaedah setIntHeader() untuk menetapkan pengepala Refresh.
// 导入必需的 java 库 import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.util.*; // 扩展 HttpServlet 类 public class Refresh extends HttpServlet { // 处理 GET 方法请求的方法 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 设置刷新自动加载时间为 5 秒 response.setIntHeader("Refresh", 5); // 设置响应内容类型 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 = "自动刷新 Header 设置"; 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>当前时间是:" + CT + "</p>\n"); } // 处理 POST 方法请求的方法 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
Sekarang, panggil Servlet di atas dan masa sistem semasa akan dipaparkan setiap 5 saat. Cuma jalankan Servlet dan tunggu seketika, dan anda akan melihat hasil berikut:
自动刷新 Header 设置当前时间是:9:44:50 PM |