編寫Service方法

servlet提供的service方法實現了GenericServlet的service方法,在HttpServlet 對象的doMethod( Get, Delete, Options, Post, Put, or Trace) 方法中,或者在其餘實現了Servlet接口的類的方法中。術語service method用來描述Servlet類中的任何能提供給客戶端調用的方法的。
一般,service方法用來從請求中讀取信息,訪問外部資源,而後基於這些信息填充相應數據。對HTTP Servlet來講,正確的填充相應的步驟以下:html

  1. 獲取響應數據流
  2. 填充響應頭
  3. 編寫響應數據流的內容

響應頭必須在響應提交以前設置,web容器將忽略響應提交以後設置響應頭或添加響應頭的操做。下兩節描述如何從請求中獲取信息和生成響應。java

從請求中獲取信息

請求攜帶數據從客戶端傳到服務端。全部請求都實現了ServletRequest接口。這個接口定義的方法能夠訪問下面的信息:web

  • 參數,一般用來在客戶端與服務端之間傳遞參數
  • 對象屬性,一般用來在web容器與servlet之間、多個servlet之間傳遞信息
  • 有關用於傳達請求的協議以及請求中涉及的客戶端和服務器的信息
  • 本地化的相關信息

固然你也能夠直接獲取輸入流,並手工解析數據。讀取這些數據,最好使用BufferedReader對象獲取請求的getReader方法。讀取字節流數據,須要使用getInputStream方法返回的ServletInputStream對象。
Http servlet傳遞一個Http請求對象,HttpServletRequest,它包含請求URL、Http頭信息、查詢字符串等等。Http URL包含下列信息:服務器

http://[host]:[port][request-path]?[query-string]

請求路徑還包括一下元素:cookie

  • 上下文路徑 : 使用/符號與web應用程序的跟路徑分隔
  • Servlet路徑: 請求此路徑的別名所對應的路徑。路徑以/開始。
  • path 路徑: 請求路徑中不屬於上下文路徑和servlet上下文的路徑

你可使用HttpServletRequest接口的getContextPath, getServletPath, and getPathInfo方法訪問這些信息。除url編碼與請求路徑有區別外,請求路徑老是等於上下文路徑+servlet路徑+path路徑。
查詢字符串由一組參數和值組成。單個參數能夠經過請求的getParameter方法獲取。有下面兩種方式生成查詢字符串:session

  • 查詢字符串能夠在web頁面上直觀的顯示
  • 當以get方式提交Http請求時,查詢字符串附加在了請求後面。

構造響應

響應包含從服務端傳到客戶端的數據。全部的響應都實現了ServletResponse接口。這個接口定義的方法支持作下面的工做:編碼

  • 發送輸出流數據到客戶端。發送字符數據,使用getWriter方法返回的PrintWriter對象;發送MIME類型的二進制數據,使用getOutputStream方法返回的ServletOutputStream。混合二進制和字符數據,存在多重響應,須要使用ServletOutputStream類並手動管理字符部分。
  • 可使用setContentType方法指定包含的類型(如text/html)。這個方法必須在響應提交以前調用。緩衝區容許在響應提交以前寫入數據,從而容許servlet有更多時間去設置狀態代碼和響應頭或者轉發到其餘web資源。這個方法必須在任何內容被寫入前或響應被提交前。
  • 設置本地化信息,好比區域位置和編碼,在Chapter 20, "Internationalizing and Localizing Web Applications" 有更詳盡的描述。

Http響應對象, javax.servlet.http.HttpServletResponse,有表示Http頭的屬性,以下:url

  • 狀態代碼 用於指示不知足請求或請求已重定向的緣由。
  • cookies 用來在客戶端保存服務器的信息。一般,cookies用戶維持單一用戶登錄或者是跟蹤一個用戶的session(查看Session Tracking章節)。
相關文章
相關標籤/搜索