如何處理HTTP POST/GET請求

          Posted on 2009-08-29 11:56 林光炎 閱讀(670) 評論(0)  編輯  收藏 所屬分類: JAVA
          期:2005-11-14 11:44:00     [Host01.Com]   訪問:     [全屏查看全文]
          Servlet通過下面的方法來提供服務:
          • 實現service方法。
          • 實現HttpServlet的doMethod方法(doGet、doDelete、doOptions、 doPost、doPut、doTrace)。
              通常,service方法用來從客戶請求(request)中提取信息,訪問擴展資源,并基于上面的信息提供響應(response)。

              對于HTTP Servlets,正確提供響應的過程是首先填寫響應(response)的頭信息,然后從響應(response)中得到輸出流,最后向輸出流中寫入內容信息。響應(response)頭信息必須最先設置。下面將描述如何從請求(request)中獲得信息和產生HTTP響應(response)。

              
        1. 取得客戶端請求
              一個HttpServletRequest對象提供到達HTTP 頭部數據,也允許你獲取客戶端的數據。怎樣獲取這些數據取決于HTTP端請求方法。不管用任何HTTP方式,你都可以用 getParameterValues方法返回特定名稱的參數值。對于用 HTTP GET 請求的方式,這個getQueryString方法將會返回一個可以用來分析的值。

              客戶端請求(request)包含了從客戶端傳遞到Servlet的數據。所有的請求(request)都實現了ServletRequest接口。這個接口定義了一些方法訪問下面的信息,如表14-1所示。

          表14-1  ServletRequest接口方法
                      類 型 描 述	                         對 應 方 法
                      參數,用來在客戶端和Servlet之間傳送信息 getAttribute(String name)
                      getAttributeNames()
                      getInputStream()
                      getParameter(String name)
                      getParameterMap()
                      getParameterNames()
                      getParameterValues(String name)
                      對象值屬性,用來在Servlet容器和Servlet
                      之間,或者協作的Servlet之間傳遞信息	    removeAttribute(String name)
                      setAttribute(String name, Object o)
                      有關請求使用的協議信息,
                      客戶端和服務器在請求中的調用	   getContentLength()
                      getContentType()
                      getProtocol()
                      getReader()
                      getRealPath(String path)
                      getRemoteAddr()
                      getRemoteHost()
                      getRequestDispatcher(String path)
                      有關請求使用的協議信息,
                      客戶端和服務器在請求中的調用       getScheme()
                      getServerName()
                      getServerPort()
                      isSecure()
                      有關localization的信息	       getCharacterEncoding()
                      getLocale()
                      getLocales()
                      setCharacterEncoding(String env)


              下面的代碼段示范了如何使用request中的方法獲得客戶端信息。

          Enumeration params = request.getParameterNames();
                      String paramName = null;
                      String[] paramValues = null;
                      while (params.hasMoreElements()) {
                      paramName = (String) params.nextElement();
                      paramValues = request.getParameterValues(paramName);
                      System.out.println("\nParameter name is " + paramName);
                      for (int i = 0; i < paramValues.length; i++) {
                      System.out.println(", value " + i + " is " + paramValues[i].toString());
                      }
                      }


              HTTP Servlets使用HTTP request對象(HttpServletRequest),它包含了request URL、HTTP頭信息、查詢字符串,等等。HTTP request URL 包括幾個部分:
              http://: ?

              一般情況下:

          requestURI = contextPath + servletPath + pathInfo
                      Context path:通過getContextPath方法獲得。
                      Servlet Path:通過getServletPath方法獲得。
                      PathInfo:通過getPathInfo方法獲得。


              如表14-2所示。

          表14-2  路徑的對應
                      Request Path	            Path Elements
                      /catalog/help/feedback.jsp	ContextPath: /catalog ServletPath:
                      /help/feedback.jsp PathInfo: null


              
        2. 提供HTTP響應
              響應(response)包含了在服務器和客戶端之間傳遞的數據。所有的響應(response)都實現了ServletResponse接口。這個接口定義了一些方法提供給開發人員使用,如表14-3所示。

          表14-3  ServletResponse接口方法
                      類 型 描 述	                          對 應 方 法
                      獲得向客戶端發送數據的輸出流	 發送字符流:getWriter()
                      發送字節流:getOutputStream()
                      指示響應返回的內容類型(例如:text/html)
                      已經注冊的內容類型名稱保存在IANA
                      (Internet Assigned Numbers Authority) setContentType(java.lang.String type)
                      指出是否是緩沖輸出。默認情況下寫入輸出的
                      內容被立即發送到客戶端。使用緩沖后寫入輸出的內容先
                      不發送到客戶端,這樣Servlet有更多的時間設置相應的
                      狀態碼和頭信息,或者轉移到其他的Web資源	 flushBuffer()
                      getBufferSize()
                      isCommitted()
                      reset()
                      resetBuffer()
                      setBufferSize(int size)
                      setContentLength(int len)
                      設置localization信息	            getCharacterEncoding()
                      getLocale()
                      setLocale(java.util.Locale loc)


              HTTP response類(HttpServletResponse)有一些代表HTTP頭信息的域:
              
        3. 狀態碼用來指出響應(response)失敗的原因。


              
        4. Cookies在客戶端存儲應用相關的信息,有時cookies用來維護和標識用戶的session。

              Servlet首先設置響應(response)頭信息,包括響應(response)的內容類別和緩沖區大小,然后在doGet方法中從響應(response)獲得PrintWriter ,最后向輸出中寫入HTML代碼,調用close()方法提交這次對客戶端的響應(response)。示范代碼如下:

          public void doGet (HttpServletRequest request,
                      HttpServletResponse response)
                      throws ServletException, IOException
                      {
                      // 設置頭信息
                      response.setContentType("text/html");
                      response.setBufferSize(8192);
                      PrintWriter out = response.getWriter();
                      // 向response中輸出
                      out.println("<html>" +
                      "<head><title>+
                      messages.getString("TitleBookDescription")
                      +</title></head>");
                      ...
                      out.println("</body></html>");
                      // 關閉輸出流
                      out.close();
                      }
        5. posts - 104, comments - 33, trackbacks - 0, articles - 0

          Copyright © 林光炎

          主站蜘蛛池模板: 潼关县| 景东| 安义县| 建始县| 文昌市| 右玉县| 扶风县| 阿克| 蛟河市| 通州市| 永丰县| 南乐县| 郑州市| 仁怀市| 新安县| 彭山县| 封丘县| 忻城县| 烟台市| 达拉特旗| 大同市| 工布江达县| 大方县| 长丰县| 玛纳斯县| 会宁县| 九龙县| 长乐市| 平罗县| 林州市| 宁河县| 舞钢市| 宜良县| 政和县| 怀化市| 夹江县| 彝良县| 海口市| 合山市| 潮安县| 新丰县|