Khi một Web server đáp ứng (response) một yêu cầu HTTP (request), response này bao gồm các thành phần chính: trạng thái (status), header, dòng trống (blank line) và document. Trong đó, HTTP header đóng vai trò quan trọng trong việc truyền tải thông tin về response, ảnh hưởng đến cách trình duyệt xử lý nội dung. Bài viết này sẽ cung cấp một cái nhìn chi tiết về cách thiết lập HTTP header response trong servlet, cùng với các phương thức và ví dụ cụ thể.
Mục Lục
Các phương thức thiết lập HTTP Header Response trong Servlet
Đối tượng HttpServletResponse cung cấp một loạt các phương thức để thiết lập HTTP header response trong chương trình servlet. Dưới đây là danh sách các phương thức quan trọng:
-
String encodeRedirectURL(String url): Mã hóa URL được chỉ định để sử dụng trong phương thứcsendRedirect. Nếu không cần mã hóa, phương thức sẽ trả về URL không thay đổi. -
String encodeURL(String url): Mã hóa URL bằng cách thêm ID phiên (session ID), hoặc trả về URL không thay đổi nếu không cần mã hóa. -
boolean containsHeader(String name): Kiểm tra xem một header response đã được đặt hay chưa. Trả vềtruenếu header tồn tại,falsenếu không. -
boolean isCommitted(): Kiểm tra xem response đã được gửi đi hay chưa. Trả vềtruenếu response đã được gửi,falsenếu chưa. -
void addCookie(Cookie cookie): Thêm một cookie vào response. Cookie thường được sử dụng để lưu trữ thông tin về người dùng. -
void addDateHeader(String name, long date): Thêm một header response với tên và giá trị kiểu ngày (date). Giá trị ngày được biểu diễn dưới dạng số mili giây kể từ epoch (00:00:00 UTC, January 1, 1970). -
void addHeader(String name, String value): Thêm một header response với tên và giá trị kiểu chuỗi (String). -
void addIntHeader(String name, int value): Thêm một header response với tên và giá trị kiểu số nguyên (integer). -
void flushBuffer(): Buộc bất kỳ nội dung nào đang có trong bộ đệm (buffer) phải được ghi vào client. -
void reset(): Xóa toàn bộ dữ liệu trong bộ đệm, cũng như mã trạng thái và header. Phương thức này chỉ có thể được gọi trước khi response được gửi đi. -
void resetBuffer(): Xóa nội dung của bộ đệm cơ bản trong response, nhưng không xóa header hoặc mã trạng thái. -
void sendError(int sc): Gửi một response lỗi đến client bằng cách sử dụng mã trạng thái (status code) được chỉ định và xóa bộ đệm. Ví dụ:sendError(404)sẽ gửi lỗi “Not Found”. -
void sendError(int sc, String msg): Gửi một response lỗi đến client với mã trạng thái và thông báo lỗi được chỉ định. Ví dụ:sendError(500, "Internal Server Error"). -
void sendRedirect(String location): Gửi một response chuyển hướng tạm thời đến client bằng cách sử dụng URL vị trí chuyển hướng được chỉ định. Ví dụ:sendRedirect("https://www.example.com"). -
void setBufferSize(int size): Thiết lập kích thước bộ đệm cho response. -
void setCharacterEncoding(String charset): Thiết lập mã hóa ký tự (character encoding) cho response được gửi đến client. Ví dụ:setCharacterEncoding("UTF-8"). -
void setContentLength(int len): Đặt độ dài của nội dung trong response. Trong HTTP servlet, phương pháp này đặt HTTP headerContent-Length. -
void setContentType(String type): Thiết lập kiểu nội dung (content type) của response được gửi đến client. Ví dụ:setContentType("text/html"). -
void setHeader(String name, String value): Đặt một header response với tên và giá trị đã cho. Nếu header đã tồn tại, giá trị cũ sẽ bị ghi đè. -
void setIntHeader(String name, int value): Đặt một header response với tên và giá trị số nguyên đã cho. Nếu header đã tồn tại, giá trị cũ sẽ bị ghi đè. -
void setLocale(Locale loc): Đặt vị trí (locale) của response, nếu response chưa được gửi đi. -
void setStatus(int sc): Đặt mã trạng thái (status code) cho response.
Ví dụ về Response trong Servlet
Phương thức setContentType() thường được sử dụng để chỉ định loại nội dung của response (ví dụ: text/html, application/json). Ngoài ra, chúng ta có thể sử dụng phương thức setIntHeader() để thiết lập các header khác, ví dụ như Refresh.
Ví dụ sau đây minh họa cách sử dụng setContentType() và setIntHeader() để tạo một trang web tự động refresh sau mỗi 5 giây:
Tạo một servlet có tên DisplayHeaderServlet:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
public class DisplayHeaderServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Set content type to HTML
response.setContentType("text/html");
// Set refresh header to 5 seconds
response.setIntHeader("Refresh", 5);
// Get current time
Calendar calendar = Calendar.getInstance();
Date currentTime = calendar.getTime();
// Write HTML response
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet Refresh Example</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Current Time: " + currentTime + "</h1>");
out.println("</body>");
out.println("</html>");
}
}
Cấu hình servlet DisplayHeaderServlet trong file web.xml (hoặc sử dụng annotation tương đương trong Servlet 3.0 trở lên).
Khi servlet này được gọi, nó sẽ hiển thị thời gian hệ thống hiện tại và tự động refresh sau mỗi 5 giây.
Ví dụ response trong servlet
Ảnh chụp màn hình trang web hiển thị thời gian hiện tại và tự động làm mới sau mỗi 5 giây. Header “Refresh” được thiết lập để trình duyệt tự động tải lại trang.
Giải thích:
response.setContentType("text/html"): Đặt kiểu nội dung của response là HTML.response.setIntHeader("Refresh", 5): Đặt header “Refresh” với giá trị 5, yêu cầu trình duyệt tự động refresh trang sau mỗi 5 giây.- Phần còn lại của code tạo ra nội dung HTML hiển thị thời gian hiện tại.
Việc nắm vững các phương thức thiết lập HTTP header response trong servlet là rất quan trọng để xây dựng các ứng dụng web mạnh mẽ và linh hoạt. Các header này cho phép bạn kiểm soát cách trình duyệt xử lý nội dung, từ đó cải thiện trải nghiệm người dùng và tối ưu hóa hiệu suất ứng dụng.
