response:響應對象html
提供的方法:java
void addCookie(Cookie cookie);服務端向客戶端增長cookie對象瀏覽器
void sendRedirect(String location);throw IOExeption; :頁面跳轉的一種方式(重定向)緩存
void setContentType(String type):設置服務端的contentType類型安全
如下是編寫下面的登入操做時須要注意到的細節:cookie
1.name 屬性用於在 JavaScript 中引用元素,或者在表單提交後引用表單數據。session
注意:只有設置了 name 屬性的表單元素才能在提交表單時傳遞它們的值。併發
2.java equals方法和==的區別jsp
用"=="來比較,這種比較是針對兩個String類型的變量的引用,也就是說若是兩個String類型的變量,它們所引用同一個String對象(即指向同一塊內存堆),則"=="比較的結果是true。post
用Object對象的equals()方法來比較,String對象繼承自Object,而且對equals()方法進行了重寫。兩個String對象經過equals()方法來進行比較時,其實就是對String對象所封裝的字符串內容進行比較,也就是說若是兩個String對象所封裝的字符串內容相同(包括大小寫相同),則equals()方法將返回true。
請求的次數 1 2
跳轉發生的位置 服務端 客戶端發出的第二次跳轉
重定向:
服務端從客戶端拿到數據,第一次響應給客戶端,客戶端指向新的跳轉地址success.jsp
客戶端發出第二次請求request,success.jsp響應給客戶端
請求轉發:
客戶端第一次請求request,服務端拿到數據,請求轉發給success.jsp,success.jsp響應給客戶端
index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" import="java.util.Date" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<form action="register.jsp" method="post">
用戶名:<input type="text" name="uname"/><br/>
密碼:<input type="password" name="upwd"/><br/>
<input type="submit" value="submit">
</form>
</body>
</html>
register.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <% //設置編碼 request.setCharacterEncoding("utf-8"); String name=request.getParameter("uname"); String pwd=request.getParameter("upwd"); if(name.equals("z")&&pwd.equals("z")) { response.sendRedirect("success.jsp");//致使數據丟失 //request.getRequestDispatcher("success.jsp").forward(request,response); } %> <br/> </body> </html>
success.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>title</title>
</head>
<body>
登入成功!!
<%
//out.print(request.getParameter("uname"));
String name=request.getParameter("uname");
out.print(name);
%>
</body>
</html>
2.session(服務端)
Cookie(客戶端,不是內置對象) Cookie是由 服務端生成的,再發送給客戶端保存
相對於 本地緩存的做用:客戶端->服務端
就好比你看一個hello.mp4,第一次看的時候由服務端生成,併發送給客戶端,第二次再看的時候本地已經有保留
做用:提升訪問服務端的效率,可是安全性較差
Cookie:name=value
public Cookie(String name,String value)
String getName() 獲取name
String getValue() 獲取value
void setMaxAge(int expiry); 最大有效期(秒)
服務端準備Cookie
response.addCookie(Cookie cookie)
頁面跳轉(轉發、重定向)
客戶端獲取cookie: request.getCookies();
注意:
1.服務端增長cookie:response對象,客戶端獲取對象:request對象
2.不能直接獲取某一個單純對象,只能一次性將所有的cookie拿到
使用cookie實現記住用戶名和密碼
建議cookie只保存 英文數字,不然須要進行編碼、解碼
session 會話
瀏覽網站 開始-關閉
購物 瀏覽、付款、退出
電子郵件 瀏覽、寫郵件、退出
開始-結束
session機制:
客戶端第一次請求服務端時,服務端會產生一個session對象(用於保存該客戶的信息)
而且每一個session對象 都會有一個惟一的sessionID(用於區分其餘session)
服務端 會產生一個cookie,而且 該cookie的name=JSESSIONID,value=服務端sessionID的值:
而後 服務端會在 響應客戶端的同時 將該cookie發送給客戶端,客戶端就有了一個cookie(JSESSION)
所以,客戶端的cookie就能夠和服務端的sessionID一一對應(JSESSIONID-sessionID)
客戶端第二/n次請求服務端時:服務端會先用客戶端cookie中的JSESSIONID 去服務端的session中匹配sessionid,若是匹配成功,說明此用戶不是第一次登入,無需登入
session方法:
getId():獲取sessionId
boolean isNew():判斷是不是新用戶
void invalidate():使session失效(退出登入、註銷)
void setAttribute()
Object getAttribute()
void setMaxInactiveInterval(秒):設置最大有效非活動時間
int getMaxInactiveInterval(): 獲取最大有效 非活動時間
request:只在同一次請求有效
地址欄回車(發出第二次請求)
若是點擊F5刷新,則瀏覽器會自動重複剛纔的行爲