Java網路03 Servlet沙拉

來源:互聯網
上載者:User

作者: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快速教程”系列文章

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.