1. 程式人生 > >Servlet(四):request、response、Cookie、Session

Servlet(四):request、response、Cookie、Session

相關文章:
Servlet(一):Web專案的開發流程
Servlet(二):簡介
Servlet(三):生命週期詳解he常見錯誤

reqeuest請求

作用:
request物件中封存了當前請求的所有請求資訊

注意:
request物件由tomcat伺服器建立,並作為實參傳遞給處理請求的servlet的service方法。

request的作用域:
不同頁面間傳值使用
req.setAttribute(“message”,“第一次”);
String message = req.getAttribute(“message”);

時,
只會從a.jsp到b.jsp一次傳遞,之後這個request就會失去它的作用範圍。
作用:解決一次請求中的資料共享問題。
例如:登入錯誤的時候返回“錯誤提示資訊”

使用:
1. 獲取請求頭資料:
獲取請求方式:get/post =>req.getMethod();
獲取請求URL: => req.getRequestURL();
獲取協議:=> req.getScheme();
2. 獲取請求行資料
req.getHeader(" 指定鍵 “); //獲取指定的請求行資訊
req.getHeaderNames(); //獲取所有請求行的鍵
3. 獲取使用者資料
req.getParameter(” 標籤的name屬性值 “);
注意:

如果獲取不到值,不會報錯,會獲得null;
String[] arr = req.getParameterValues(” 同鍵不同值的name屬性值 "); //多選按鈕
for(String value : arr){
System.out.println(value);
}

請求亂碼問題解決 請求亂碼問題解決:
使用 String 進行重新編碼:
uname=new String(uname.getBytes(“iso8859-1”),“utf-8”);
Get 方式請求:
在 service 方法中使用: req.setCharacterEncoding(“utf-8”);


在 tomcat 伺服器目錄下的 conf 檔案下找到 server.xml 檔案,開啟進
行如下配置:
亂碼配置
Post 方式請求:
在 service 方法中使用: req.setCharacterEncoding(“utf-8”);

response響應

作用:
response是用來進行響應的一個物件。

使用:
1. 設定響應頭
resp.setHeader(" 鍵 ", " 值 “); //覆蓋
resp.addHeader(” 鍵 “, " 值 “); //追加
resp.sendError(405, “友好錯誤提示”);
2. 設定響應編碼格式
resp.setHeader(“content-type”, “text/html;charset=utf-8”);
resp.setContentType(“text/html;charset=utf-8”);
3. 設定響應實體
resp.getWriter().write(” < b>伺服器響應資料 </ b>”);

Servlet流程總結

Servlet的流程總結:

  1. 瀏覽器發起請求到伺服器
  2. 伺服器接收到請求進行解析,並建立req物件儲存請求資料
  3. 伺服器呼叫對應的Servlet物件進行請求處理,並將req物件作為實參傳遞給Servlet的方法
  4. Servlet方法進行請求處理
    4.1 設定請求編碼格式
    4.2 設定相應編碼格式
    4.3 獲取請求資訊
    4.4 * 處理請求資訊
    4.5 響應處理結果

轉發、重定向

請求轉發:

特點:位址列資訊不會變化

req.getRequestDispatcher("轉發地址").forward(req, resp);	//相對路徑
req.setAttribute("message","第一次"); 	//設定轉發前所要攜帶的資料
String message = req.getAttribute("message");	//獲取資料

作用:解決一次請求中的資料共享問題。
例如:
1.登入錯誤的時候返回“錯誤提示資訊”(可用“三目運算子:條件 ? true結果"" : false結果”)
2.歡迎“xxx”登入( 使用重定向 )

兩者的區別:
使用請求轉發,容易造成表單資料重複提交。所以產生重定向
如果請求中有表單資料,並且資料比較重要,並且不能重複提交,建議使用重定向。

重定向:

特點:
位址列資訊發生變化
兩次請求,兩個request物件

resp.sendRedirect("路徑為URI");	

Cookie

Cookie 技術解決了不同請求傳送之間的資料共享問題。

特點:

  1. 瀏覽器端的資料儲存技術
  2. 適合少量資料
  3. 鍵值對
  4. 不安全

使用:
臨時儲存:
不設定 cookie 資訊的儲存時間,週期為一次會話,儲存在瀏覽器記憶體中
定時儲存:會將資料儲存在客戶端的硬碟中;

/*使用Cookie進行客戶端的資料儲存*/
Cookie uname = new Cookie("uname", "張三");	//建立cookie物件(鍵值對形式)
Cookie uname2 = new Cookie("uname2", "李四");

/*設定有效期後,會將資料儲存在客戶端的硬碟中;
 *在有效期內,所有符合路徑的請求,都會附帶該Cookie
 */
uname2.setMaxAge("3*24*60*60");	//設定Cookie有效期為3天

resp.addCookie(uname);	//新增響應cookie資訊
resp.addCookie(uname2);

Cookie資料的獲取:

Cookie[] cks = req.getCookies();	//獲取cookie資訊
for(Cookie c : cks){
	String name = c.getName();
	String value = c.getValue();
	System.out.println(name+" : "+value);
}

Session

作用:
解決了一個使用者的不同請求的資料共享問題。

原理:
使用者使用瀏覽器第一次向伺服器傳送請求,伺服器在接受到請求後,呼叫對應的 Servlet 進行處理。在處理過程中會給使用者建立 一個 session 物件,用來儲存使用者請求處理相關的公共資料,並將此 session 物件的JSessionId 以 Cookie 的形式儲存在瀏覽器中 (臨時儲存,瀏覽器關閉即失效)。
使用者在發起第二次請求及後續請 求時,請求資訊中會附帶 JSessionId,伺服器在接收到請求後, 呼叫對應的 Servlet 進行請求處理,同時根據 JSessionId 返回其對應的 session 物件。

特點:
1.Session 技術是依賴 Cookie 技術的伺服器端的資料儲存技術。
2.由伺服器進行建立
3.每個使用者獨立擁有一個 session
4.預設儲存時間為 30 分鐘

使用:
建立 Session 物件 儲存資料到 session 物件

String name = "旺仔";

/*若果請求中有sessionID,就返回對應的session物件;
*如果沒有sessionID,就建立新的session物件。
*/
HttpSession hSession = req.getSession();	//建立session

/*session物件失效,也會重新建立session物件*/
//hSession.setMaxInactiveInterval(60);	//設定session的存活時間為60秒

hSession.setAttribute("name", name);		//儲存資料

獲取 session 物件 獲取資料從 session 物件

HttpSession hSession = req.getSession();	//獲取session
String name = hSession.getAttribute("name");	//獲取資料

如果獲取 session 中不存在的資料返回 null。
設定session強制失效

HttpSession hSession = req.getSession();	//獲取session
hSession.invalidate();		//設定session強制失效

注意:
只要不關閉瀏覽器,並且 session 不失效的情況下,同一個用 戶的任意請求在專案的任意Servlet中獲取到的都是同一個session
物件。

作用域:
一次會話
在JSESSIONID和session物件不失效的情況下為整個專案。