Khi một Web Server phản hồi một HTTP Request tới trình duyệt, phản hồi đặc trưng bao gồm một dòng Status, một số trường Header, một dòng trống, và tài liệu. Một phản hồi đặc trưng giống như sau:
HTTP/1.1 200 OK Content-Type: text/html Header2: ... ... HeaderN: ... (Blank Line) <!doctype ...> <html> <head>...</head> <body> ... </body> </html>
Dòng Status gồm HTTP version (trong ví dụ là HTTP/1.1), một Status code ( trong ví dụ là 200), và một thông báo rất ngắn tương ứng với Status code (trong ví dụ là OK).
Dưới đây là các trường Header hữu ích nhất trong phản hồi HTTP 1.1 mà trở lại trình duyệt từ Web Server và bạn sẽ thường xuyên sử dụng chúng trong lập trình web:
Header | Miêu tả |
---|---|
Allow | Trường này xác định các phương thức yêu cầu (GET, POST, .v.v.) mà Server hỗ trợ |
Cache-Control | Trường này xác định các hoàn cảnh mà trong đó tài liệu phản hồi có thể được cache một cách an toàn. Nó có thể có các giá trị publics, private hoặc no-cache, .v.v.. Trong đó, publics nghĩa là tài liệu có thể được cache, private nghĩa là tài liệu dành cho một người sử dụng và chỉ có thể được lưu giữ riêng (không được chia sẻ) và no-cache nghĩa là tài liệu không bao giờ được cache |
Connection | Trường này chỉ dẫn trình duyệt có sử dụng persistent trong các kết nối HTTP hoặc không. Một giá trị close chỉ rằng trình duyệt không sử dụng các kết nối HTTP dạng persistent và keep-alive nghĩa là sử dụng các kết nối persistent |
Content-Disposition | Trường này cho bạn yêu cầu rằng trình duyệt hỏi người sử dụng để lưu phản hồi lên địa trong một file với tên đã cho |
Content-Encoding | Trường này xác định cách mà trang được mã hóa trong khi truyền tải |
Content-Language | Trường này xác định ngôn ngữ mà tài liệu được viết. Ví dụ en, en-us, ru, … |
Content-Length | Trường này xác định số byte trong phản hồi. Thông tin này chỉ cần thiết nếu trình duyệt đang sử dụng một kết nối HTTP dạng persistent (giá trị keep-alive) |
Content-Type | Trường này kiểu MIME (Multipurpose Internet Mail Extension) của tài liệu phản hồi |
Expires | Trường này xác định thời gian tại đó nội dung nên được xem là hết hạn và không bao giờ được cache nữa |
Last-Modified | Trường này chỉ dẫn khi tài liệu được thay đổi lần cuối. Sau đó Client có thể cache tài liệu này và cung cấp một date bởi một trường yêu cầu If-Modified-Since trong các yêu cầu sau đó |
Location | Trường này nên được bao với tất cả phản hồi mà có Status code là 300. Nó thông báo cho trình duyệt về địa chỉ tài liệu. Trình duyệt tự động kết nối lại tới vị trí này và thu nhận tài liệu mới |
Refresh | Trường này xác định khi nào trình duyệt nên đề nghị một trang đã được update. Bạn có thể xác định thời gian với đơn vị là số giây sau đó một trang sẽ được refresh |
Retry-After | Trường này có thể được sử dụng khi kết hợp với phản hồi 503 (Service Unavailable) để nói cho Client khi nào thì nó có thể lặp lại yêu cầu |
Set-Cookie | Trường này xác định một cookie mà liên kết với trang |
Đối tượng HttpServletResponse trong JSP
Đối tượng response là một minh họa của đối tượng javax.servlet.http.HttpServletResponse. Ngay khi Server tạo đối tượng request, nó cũng tạo một đối tượng để biểu diễn phản hồi tới Client.
Đối tượng Response cũng định nghĩa các Interface mà thực hiện việc tạo các HTTP header mới. Thông qua đối tượng này, lập trình viên JSP có thể thêm các Cookie mới hoặc Date, HTTP Status code, …
Dưới đây là các phương thức có thể được sử dụng để thiết lập HTTP response Header trong chương trình JSP của bạn. Những phương thức này có sẵn với đối tượng HttpServletResponse mà biểu diễn Server Response.
STT | Phương thức và Miêu tả |
---|---|
1 | String encodeRedirectURL(String url) Mã hóa URL đã cho để sử dụng trong phương thức sendRederect, hoặc nếu mã hóa này không được đòi hỏi, thì trả về URL như cũ |
2 | String encodeURL(String url) Mã hóa URL đã cho bằng việc thêm ID của session trong nó, hoặc nếu mã hóa này không được đòi hỏi, thì trả về URL như cũ |
3 | boolean containsHeader(String name) Trả về một Boolean chỉ rằng có hay không header phản hồi với tên đã cho đã được thiết lập |
4 | boolean isCommitted() Trả về một Boolean chỉ rằng nếu phản hồi đã được commit |
5 | void addCookie(Cookie cookie) Thêm cookie đã cho tới phản hồi |
6 | void addDateHeader(String name, long date) Thêm một header phản hồi với tên và giá trị date đã cho |
7 | void addHeader(String name, String value) Thêm một header phản hồi với tên và giá trị đã cho |
8 | void addIntHeader(String name, int value) Thêm một header phản hồi với tên và giá trị integer đã cho |
9 | void flushBuffer() Force bất kỳ nội dung nào trong Buffer để được ghi tới Client đó |
10 | void reset() Xóa bất dữ liệu nào tồn tại trong buffer cũng như Status code và các trường header |
11 | void resetBuffer() Xóa nội dung của buffer nằm dưới trong phản hồi mà không xóa các trường header và status code |
12 | void sendError(int sc) Gửi một phản hồi lỗi tới Client bởi sử dụng Status code đã cho và xóa buffer |
13 | void sendError(int sc, String msg) Gửi một phản hồi lỗi tới Client bởi sử dụng Status code đã cho |
14 | void sendRedirect(String location) Gửi một phản hồi Redirect tạm thời tới Client bởi sử dụng địc chỉ URL để Redirect đã cho |
15 | void setBufferSize(int size) Thiết lập kích cỡ buffer cho thân phản hồi |
16 | void setCharacterEncoding(String charset) Thiết lập mã hóa ký tự (MIME Charset) của phản hồi đang được gửi tới Client, ví dụ, thiết lập là UTF-8 |
17 | void setContentLength(int len) Thiết lập độ dài nội dung của thân phản hồi trong HTTP Servlet, phương thức này thiết lập trường header là HTTP Content-Length |
18 | void setContentType(String type) Thiết lập kiểu nội dung của phản hồi đang được gửi tới Client, nếu phản hồi vẫn chưa được commit |
19 | void setDateHeader(String name, long date) Thiết lập một header phản hồi với tên và giá trị date đã cho |
20 | void setHeader(String name, String value) Thiết lập một header phản hồi với tên và giá trị đã cho |
21 | void setIntHeader(String name, int value) Thiết lập một header phản hồi với tên và giá trị integer đã cho |
22 | void setLocale(Locale loc) Thiết lập Locale của phản hồi, nếu phản hồi vẫn chưa được commit |
23 | void setStatus(int sc) Thiết lập Status code cho phản hồi này |
Ví dụ về HTTP Header Response trong JSP
Ví dụ sau sẽ sử dụng phương thức setIntHeader() để thiết lập Refresh Header để đóng vai một digital clock.
<%@ page import="java.io.*,java.util.*" %> <html> <head> <title>Auto Refresh Header Example</title> </head> <body> <center> <h2>Auto Refresh Header Example</h2> <% // Set refresh, autoload time as 5 seconds response.setIntHeader("Refresh", 5); // 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; out.println("Current Time is: " + CT + "\n"); %> </center> </body> </html>
Bây giờ, bạn đặt code trên trong main.jsp và thử truy cập nó. Nó sẽ hiển thị System time sau mỗi 5s. Chạy JSP và đợi kết quả:
<center> <h2 align="center">Auto Refresh Header Example</h2> Current Time is: 9:44:50 PM </center>
Để làm quen với các phương thức này, bạn thử viết các chương trình sử dụng các phương thức trên theo cách thức tương tự trên.