1. 程式人生 > >java之servlet學習基礎(二)

java之servlet學習基礎(二)

input 應用 new use values 優化 得到 () 響應狀態

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


1.HttpServletResponse

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

  請求重定向:sendRedirect(String location)

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

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

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

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

    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 )

java之servlet學習基礎(二)