java之servlet學習基礎(二)
上一次寫到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學習基礎(二)