3.1.1.1. Đọc dữ liệu tường minh (explicit data) từ client gửi tới
Thông thường, dữ liệu này do người dùng nhập vào một HTML form trên các trang web. Tuy nhiên, dữ liệu cũng có thể đến từ một applet hoặc một chương trình HTTP client bất kỳ.
3.1.1.2. Đọc dữ liệu ẩn từ HTTP request từ browser/client gửi tới
Hình 3.1 vẽ một mũi tên đơn xuất phát từ client tới Web server (Web server là nơi thực thi Servlet và JSP), nhưng thực chất có đến hai loại dữ liệu: dữ liệu tường minh do người dùng nhập vào và các thông tin HTTP ẩn (còn gọi là dữ liệu ẩn). Cả hai loại dữ liệu này đều quan trọng. Các thông tin HTTP bao gồm cookies, thông tin về loại phương tiện (media type) và các chế độ nén (compression schemes) mà browser hiểu được.
Tạo kết quả
Tiến trình này có thể yêu cầu tương tác với CSDL, thực thi một triệu gọi tới RMI /EJB, gọi một Web service, hoặc trực tiếp tạo ra các response (gói thông tin trả về cho client từ server). Tuy nhiên, thường thì hệ quản trị CSDL không hiểu giao thức HTTP hoặc sẽ không trả kết quả dạng HTML, đồng thời vì lý do bảo mật, cho nên Web browser không thể nói chuyện trực tiếp với CSDL. Chúng ta cần tầng Web trung gian này (Servlet/JSP) để giải nén dữ liệu đến từ luồng HTTP và các kết quả nhúng trong một tài liệu nào đó, nói chuyện với các ứng dụng (application).
Gửi dữ liệu tường minh đến client
Tài liệu (document) gửi đến client có thể được gửi dưới nhiều định dạng khác nhau, bao gồm văn bản (HTML, XML, nhị phân (các ảnh GIF), hoặc thậm chí ở định dạng nén như Gzip. Tuy nhiên, cho tới nay thì HTML là định dạng phổ biến nhất, và do đó, Servlet/JSP còn có nhiệm vụ quan trọng là bọc các kết quả bên trong HTML.
Gửi dữ liệu ẩn trong HTTP response
Hình 3.1 vẽ một mũi tên đơn xuất phát từ tầng Web trung gian (Servlet/JSP) tới client. Tuy nhiên, trên thực tế, có đến hai loại dữ liệu được gửi đi: bản thân tài liệu được gửi và thông tin HTTP ngầm bên dưới. Việc gửi dữ liệu HTTP response ẩn liên quan đến việc thông báo cho browser hoặc client khác biết loại định dạng của tài liệu cần gửi lại (ví dụ như HTML), việc cài đặt cookie, bắt các tham số và các tác vụ khác.
3.1.2. Ví dụ về Servlet code
Đoạn code kế thừa lớp HttpServlet.Servlet. Lớp này cung cấp một cơ sở hạ tầng đầy đủ để giao tiếp với HTTP.
Đoạn code cũng ghi đè phương thức doGet(). Servlet có nhiều phương thức khác nhau để đáp ứng các loại lệnh HTTP khác nhau.
Bảng 3.1 - Ví dụ code servlet
import java.io.*;
import javax.servlet.*; import javax.servlet.http.*;
public class HelloServlet extends HttpServlet{
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
response.setContentType(“text/html”); PrintWriter out = response.getWriter();
String docType=”<!DOCTYPE HTML PUBLIC \”-//W3C//DTD HTML 4.0 “ + “Transitional //EN\”>\n”; out.println(docType+ “<HTML> \n” + “<HEAD><TITLE>Hello</TITLE></HEAD>\n”+ “<BODY BGCOLOR=\”#FDF5E6\”>\n”+ “<H1>Hello</H1>\n”+ “</BODY></HTML>”); } }