Chương 5 : CƠ BẢN VỀ SERVLET
5.5. CÁC UTILITIES HỖ TRỢ VIỆC TẠO FILE HTML
Như chúng ta đã biết, cấu trúc một file HTML có dạng như sau:
Bảng 5.5 - Cấu trúc file HTML <!DOCTYPE ...> <HTML> <HEAD><TITLE>...</TITLE>...</HEAD> <BODY ...>...</BODY> </HTML>
Trong đó, thẻ DOCTYPE có nhiệm vụ báo cho các HTML validators biết phiên bản HTLM đang sử dụng. Validators chính là các debugging
service, giúp bắt các lỗi cú pháp của file HTML trong trường hợp có thể hoạt động tốt ở browser này, nhưng lại có vấn đề trên browser khác.
Có hai validators trực tuyến phổ biến nhất hiện nay là WorldWideWebConsortium (http://validator .w3.org) và Web Design Group (http://www.html.help.com/tools/validator). Tại đây, cho phép chúng ta gửi link URL của trang HTML cần kiểm tra, sau đó validator lấy trang HTML theo địa chỉ URL, tiến hành kiểm tra lỗi cú pháp và gửi thông báo lỗi nếu có.
Khi sử dụng lệnh printlnđể xuất ra file HTML, chúng ta thường gặp phải vấn đề là lượng code quá dài dòng. Do đặc tính của file HTML là có một số cấu trúc thường lặp đi lặp lại nhiều lần. Khi đó chúng ta có thể tạo ra một utility class để đơn giản hóa các cấu trúc này. Dưới đây là một ví dụ về servlet có sử dụng utility. Bảng 5.6 - coreservlets/ServletUtilities.java package coreservlets; import javax.servlet.*; import javax.servlet.http.*;
/** Some simple time savers. Note that most are static methods. */
public class ServletUtilities {
public static final String DOCTYPE =
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " +
"Transitional//EN\">";
public static String headWithTitle(String title) {
return(DOCTYPE + "\n" + "<HTML>\n" + "<HEAD><TITLE>" + title + "</TITLE></HEAD>\n"); } ... } Bảng 5.7 - coreservlets/HelloServlet3.java package coreservlets; import java.io.*; import javax.servlet.*; import javax.servlet.http.*;
* and utilities from the same package. */
public class HelloServlet3 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); String title = "Hello (3)";
out.println(ServletUtilities.headWithTitle(title) + "<BODY BGCOLOR=\"#FDF5E6\">\n" + "<H1>" + title + "</H1>\n" + "</BODY></HTML>"); } }
Trong ví dụ trên đây, sau khi biên dịch HelloServlet3.java (khi đó ServletUtilities.java cũng được tự động biên dịch), chúng ta sẽ đặt hai class này vào thư mục …/WEB-INF/classes (xem chi tiết trong phần 5.8). Nếu có lỗi “Unresolved symbol” xuất hiện, cần kiểm tra lại
CLASSPATH.
Hình 5.4 - Kết quả của
http://localhost/servlet/coreservlets.HelloServlet3