作者:Vamei 出處:http://www.cnblogs.com/vamei 歡迎轉載,也請保留這段聲明。
Servlet開胃酒中介紹了Servlet的基本流程和設定方式。這裡,我們將看一些Servlet執行個體。這些執行個體都是HTTP通訊(參考HTTP協議)中的常見問題。我們通過操作request和response,來實現HTTP協議的功能。
產生頁面
Servlet的目的是動態產生頁面。比如下面的例子:
package foo;import javax.servlet.*;import javax.servlet.http.*;import java.io.*;import java.util.*;public class TestPage extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { PrintWriter out = response.getWriter(); Date now = new Date(); // Date & Time String page = "<html><body><p>" + now +"</p></body></html>"; out.println(page); }}
上面,我們調用response的getWriter()方法,向回複中寫入文本,即回複的主體部分。關於Java的讀寫,可參考Java IO基礎。
有時我們主體部分不是文本,這時我們需要OutputStream類型的寫入器,通過調用response的getOutputStream()方法來獲得。
我們利用java.util.Date()提供的功能,來動態產生日期和時間顯示。效果如下:
提交表格
HTTP請求有POST方法。Servlet通過doPost()方法來處理POST請求。POST方法的目的是向伺服器提交資料,特別是HTML的FORM元素中包含的資料。
我們先來編寫一個包含有FORM的HTML頁面:
<html><body> <form action="MyForm" method="post"> Username: <input type="text" name="user"><br> <input type="submit" value="Submit"> </form></body></html>
頁面將提交給MyForm這個URL處理。提交的資料為text類型的user輸入。
下面是TestForm.java代碼,該代碼編譯成的Servlet將對應於MyForm這個URL(在web.xml中設定對應關係,參考Servlet開胃酒)
package foo;import javax.servlet.*;import javax.servlet.http.*;import java.io.*;public class TestForm extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { String username = request.getParameter("user"); // get "user" input PrintWriter out = response.getWriter(); String page = "<html><body><p>Submitted: " + username +"</p></body></html>"; out.println(page); }}
在上面的代碼中,我們改寫的是doPost()方法。此外,我們調用request的getParameter()方法,來獲得提交的資料,即user的參數值。我們隨後顯示了提交的資料。在真實使用情境下,我們可以對該資料進行其他的操作,比如放入資料庫。
顯示結果如下:
其它方法
我們看到,HTTP協議在Servlet中的操作,主要是通過request和response對象實現的。這兩個對象分別實施了HttpServletRequest介面和HttpServletResponse介面。HttpServletRequest介面繼承自ServletRequest介面,HttpServletResponse介面繼承自ServeletResponse介面。
下面列舉一些HttpServletRequest和HttpServletResponse的常用方法。
HttpServletRequest的方法 (官方參考)
獲得頭資訊
String host = request.getHeader("Host");
獲得要求方法
String method = request.getMethod();
獲得請求中的cookies
Cookie[] cookies = request.getCookies();
讀取請求中的非文本資源,需要InputStream
InputStream input = request.getInputStream();
HttpServletResponse的方法 (官方參考)
設定MIME類型
response.setContentType("image/jpeg");
重新定向
response.sendRedirect("http://www.google.com");
設定頭資訊
response.setHeader("Server","Apache-Coyote/1.1");
設定ContentLength
response.setContentLength();
設定狀態代碼
response.setStatus(200);
總結
HttpServletRequest和HttpServletResponse是HTTP協議在Servlet中的具體實施。通過調用它們,我們可以在Java內部來使用HTTP協議。對HTTP協議本身的瞭解,將有助於我們更好的使用這兩個介面。
歡迎繼續閱讀“Java快速教程”系列文章