Java Servlet 和 JSP教程(4)
3.3 輸出HTML的Servlet
大多數Servlet都輸出HTML,而不象上例一樣輸出純文本。要輸出HTML還有兩個額外的步驟要做:告訴浏覽器接下來發送的是HTML;修改println語句構造出合法的HTML頁面。
第一步通過設置Content-Type(內容類型)應答頭完成。一般地,應答頭可以通過HttpServletResponse的setHeader方法設置,但由於設置內容類型是一個很頻繁的操作,因此Servlet API提供了一個專用的方法setContentType。注意設置應答頭應該在通過PrintWriter發送內容之前進行。下面是一個實例:
HelloWWW .java
package hall;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWWW extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 " +
"Transitional//EN">
" +
"<HTML>
" +
&nb sp; "<HEAD><TITLE>Hello WWW</TITLE></HEAD>
" +
"<BODY>
" +
"<H1>Hello WWW</H1>
" +
"</BODY></HTML>");
}
}
3.4 幾個HTML工具函數
通過println語句輸出HTML並不方便,根本的解決方法是使用JavaServer Pages(JSP)。然而,對於標准的Servlet來說,由於Web頁面中有兩個部分(DOCTYPE和HEAD)一般不會改變,因此可以用工具函數來封裝生成這些內容的代碼。
雖然大多數主流浏覽器都會忽略DOCTYPE行,但嚴格地說HTML規范是要求有DOCTYPE行的,它有助於HTML語法檢查器根據所聲明的 HTML版本檢查HTML文檔合法性。在許多Web頁面中,HEAD部分只包含<TITLE>。雖然許多有經驗的編寫者都會在HEAD中包含許多META標記和樣式聲明,但這裡只考慮最簡單的情況。
下面的Java方法只接受頁面標題為參數,然後輸出頁面的DOCTYPE、HEAD、TITLE部分。清單如下:
ServletUtilities.java
package hall;
public class ServletUtilities {
public static final String DOCTYPE =
"<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">";