java之servlet學習基礎(二)

上一次寫到Servlet的實現方法,主要仍是經過繼承HttpServlet來實現Servlet。下面主要是回顧一下HttpServletRequest和HttpServletResponse對象中的一些方法。由於Web服務器收到客戶端的http請求,會針對每一次請求建立一個用於表明請求的request的對象,和表明響應的response對象。html


 

1.HttpServletResponseweb

  設置響應狀態碼:setStatus(int )瀏覽器

  請求重定向:sendRedirect(String location)
緩存

  設置響應消息頭:setHeader(String name, String value)  服務器

    eg,  response.setHeader("content-type","text/html;charset=UTF-8")cookie

        告知瀏覽器使用什麼碼錶,即讓瀏覽器用UTF-8來解析返回的數據session

  設置服務器端編碼:setCharacterEncoding(String charset)  
post

    eg,  response.setCharacterEncoding("UTF-8");優化

        告知服務器(servlet)用UTF-8來轉碼,而不是用ISO-8859-1(服務器端默認編碼)
編碼

  設置客戶端和服務器端編碼:setContentType(String charset)

        setHeader和setCharacterEncoding的優化,同時告訴客戶端和服務器端使用什麼格式的編碼。

  得到字符輸出流:getWrite()

  得到字節輸出流:getOutputStream()//注意編碼

 

2.HttpServletRequest

  得到請求方式:getMethod();//post or get

  得到客戶端發出請求時完整的url:getRequestURL();

  得到請求行中的uri:getRequestURI();

  得到當前應用的虛擬目錄:getContextPath();

  得到請求行中的參數部分:getQueryString();

  根據請求消息頭的名稱得到其對應的值:getHeader(String name);

 如下是關於請求正文方面的方法,比較重要

  <input type="text" name="username"/>

  getParameter(String name);根據表單中name屬性的名,獲取value值

  getParameterValues(String name)爲複選框提供的得到值得方法

  getParameterNames();獲取表單提交的全部name名稱

  getParameterMap();獲得表單提交的全部的鍵值

 由於request也是一個域對象,因此有如下方法

  setAttribute(String name, Object value);

  getAttribute(String name);

  removeAttribute(String name);

 請求轉發相關:(注意:請求轉發不能轉發到其餘路徑,必須是本項目之下的,而重定向能夠到其餘路徑)

 

  getRequestDispatcher(String path)//得到一個RequestDispatcher對象

    forword(ServletRequest , ServletResponse )//轉發

    include(ServletRequest , ServletResponse )//請求包含

 解決post方式編碼問題:

  request.setCharacterEncoding("UTF-8");//告訴服務器要使用什麼編碼,注:瀏覽器是用什麼編碼傳到服務器端就是什麼編碼

 解決get方式編碼問題:

   byte b[] = name.getBytes("ISO-8859-1");//1010101

 

  String name = new String(b,"UTF-8");//解決

  即:String name = new String(name.getBytes("ISO-8859-1"),"UTF-8");

 


 

如下回顧Cookie和Session。

3.Cookie 

  cookie是servlet發送到web瀏覽器的少許信息,這些信息由瀏覽器保存,而後發送回服務器。cookie的值能夠惟一的標識客戶端。所以,cookie經常使用於會話管理。一個cookie擁有一個鍵、值和一些可選屬性(註釋,路徑,域限定符、版本號)。Servlet經過視同HttpServletResponse的addCookie方法,將建立的cookie發送到客戶端瀏覽器,該方法將字段添加到HTTP響應頭,以便於一次一個地將cookie發送到瀏覽器。而客戶端瀏覽器經過向HTTP響應頭添加字段將cookie返回給服務器端(即servlet),可以使用HttpServletRequest的getCookie方法從請求中獲取cookie。注意,一些cookie可能有相同的鍵,但卻有不一樣的路徑屬性。

  屬性:

    (1)name:至關於鍵。名稱不能惟一肯定一個Cookie。由於cookie的路徑可能不一樣。

    (2)value:值。

    (3)path:默認值是寫cookie所在的應用程序的訪問路徑。(客戶端在訪問服務器資源時,根據訪問的路徑決定是否帶着cookie到服務器,若是訪問的路徑是以cookie所在的path,就帶着cookie,不然不帶)。

    (4)maxAge:cookie的緩存時間。默認-1(存在瀏覽器的內存中)。經過setMaxAge(int )來設置緩存時間。(可實現記住用戶的功能)

        負數:cookie的數據存在瀏覽器緩存中

        0:刪除。

        整數:緩存到磁盤上的時間。(單位s)

 

4.Session

  session也是一個域對象。(目前已知的域對象:ServletContext,request,Session)。sesseion可使處在同一個會話下的應用共享數據。cookie是客戶端技術,只能存字符串。HttpSession是服務器端技術,能夠存對象。

  經過getSession()得到Session對象。

  HttpSession request.getSession()內部執行原理:

    (1)獲取名稱爲JSESSIONID的cookie的值。(session是依賴於cookie的)

    (2)若是沒有這樣的cookie,就建立一個新的httpsession對象,並分配一個惟一的SessionID,並向客戶端返回一個鍵值爲JSESSIONID=SessionID的cookie。

    (3)若是有這樣的cookie,獲取cookie的值(即HttpSession對象的值),從服務器內存中根據ID找到HttpSession對象。

        找到了:取出來繼續服務。

        找不到:從(2)開始。

  方法:

    setAttribute(String )

    getAttribute(String )

相關文章
相關標籤/搜索