1、response:響應對象
提供的方法
<1>void addCookie(Cookie cookie):服務端向客戶端增長cookie對象
<2>void sendRedirect(String location) throes IOException:頁面跳轉的一種方式,稱之爲重定向
<3>void setContentType(String type):設置服務端響應時的編碼(設置服務端的ContentType類型)
實例:登陸
login.jsp -> check.jsp->success.jsp
html
使用重定向語句,會致使數據丟失response.sendRedirect("success.jsp");java
使用request語句跳轉 request.getRequestDispatcher("success.jsp").forward(request,response);瀏覽器
頁面跳轉:請求轉發,能夠獲取數據,而且地址欄沒有變(仍然保持轉發時的頁面check.jsp)緩存
請求轉發與重定向的區別:
請求轉發 重定向
地址欄: 不變(check.jsp) 改變(success.isp)
是否保留第一次 保留 不保留 ---四種範圍對象
請求時的數據
請求的次數 一次 兩次
跳轉發生的位置 服務端 客戶端發生的第二次跳轉
請求轉發(一個來回):在服務器內部跳轉,客戶端向服務器發送一次請求(請求指向check.jsp),以後在服務器內部實現check.jsp->success.jsp,服務器(success.jsp)向客戶端響應一次。安全
客戶端--->服務器A窗口--->服務器B窗口--->結束
重定向(兩個來回):在客戶端向服務器發送第一次請求(請求指向check.jsp)後,服務器(check.jsp)第一次響應是指向新的跳轉地址(success.jsp),以後客戶端向服務器發送第二次請求(請求指向success.jsp),以後服務器(success.jsp)向客戶端響應第二次。服務器
客戶端--->服務器A窗口--->去找B
客戶端--->服務器B窗口--->結束cookie
2、Cookie及其實例session
由於Cookie與session關係密切,必須先了解Cookie
Cookie(客戶端,不是內置對象):由服務端生成,而後發給客戶端保存(至關於本地緩存)
做用:能夠提升訪問效率,可是安全性較差(將密碼保存在客戶端,可能被破解)。
Cookie:name(key)=value
由javax.servlet.http.Cookie提供
public Cookie(String name,String value)
String getName():獲取name
String getValue():獲取value
void setMaxage(int expiry):設置最大有效期,單位爲秒
服務端發送給客戶端
response.addCookie(Cookie cookie)(準備Cookie) + 頁面重定向(轉發/重定向)+ request.getCookies()(客戶端獲取Cookie)
注意:
a、服務端增長cookie:response對象;客戶端獲取cookie:request對象;
b、不能獲取某一個單獨對象,只能一次性獲取所有Cookie。
實例1:模擬服務端向客戶端發送cookiejsp
response_addCookie.jsp->result.jsppost
response_addCookie.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <% //服務端 //建立cookie Cookie cookie1 = new Cookie("name","張志偉"); Cookie cookie2 = new Cookie("pwd","123456"); //添加cookie response.addCookie(cookie1); response.addCookie(cookie2); //頁面跳轉到客戶端 request.getRequestDispatcher("result.jsp").forward(request,response); %> </body> </html>
result.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <% //客戶端 //獲取所有Cookie Cookie [] cookies = request.getCookies(); //遍歷所有Cookie for(Cookie cookie:cookies) { out.print(cookie.getName()+"---"+cookie.getValue()+"<br/>"); } %> </body> </html>
測試結果以下圖
JSESSIONID---1E1D0822274C36D80CF50ADEDAD2CE6A爲瀏覽器自動添加的cookie
建議Cookie只保存 字母、數字 ,不然須要編碼、解碼。
實例2:使用cookie記住用戶名
login.jsp(客戶端)->check.jsp(服務端)->result.jsp(客戶端,保存用戶名)
login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <%! String uname; %> <% boolean flag=false; Cookie [] cookies=request.getCookies(); for(Cookie cookie:cookies) { if(cookie.getName().equals("name")) { uname=cookie.getValue(); flag=true; } } if(!flag) { out.print("cookie已失效"); } else { out.print("cookie:"+uname); } %> <% //(uname==null? "":uname) 的意義爲,若是uname的值爲null,則顯示空格,不然就顯示真正的uname,爲了在第一次的時候不顯示null %> <form action="check.jsp" method="post"> 用戶名<input type="text" name="uname" value="<%=(uname==null? "":uname) %>"> <br/> 密碼<input type="password" name="upwd"> <br/> <input type="submit" value="登陸"> <br/> </form> </body> </html>
check.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <% //設置編碼 request.setCharacterEncoding("utf-8"); //獲取用戶名和密碼 String name=request.getParameter("uname"); String pwd=request.getParameter("upwd"); //將用戶名加入Cookie中 Cookie cookie =new Cookie("name",name); //設置cookie的存活時間爲10秒 cookie.setMaxAge(10); response.addCookie(cookie); //頁面跳轉 response.sendRedirect("result.jsp"); %> </body> </html>
result.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> 歡迎登錄 </body> </html>
由於瀏覽器會自動保存,因此此處在eclispe中作測試。
上圖是保存的cookie,過十秒後再刷新
設置cookie的存活時間
cookie.setMaxAge(60);//60秒的意思
cookie.setMaxAge(60*60);//一小時
cookie.setMaxAge(365*24*60*60);//一年