response請求轉發、重定義、cookie、session

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。

 
一、登入
index.jsp->register.jsp->success.jsp
重定向會致使數據丟失
 
                            請求轉發             重定向
地址欄是否改變       不變register.jsp    改變success.jsp
是否保留第一次
 
請求時的數據           保留                   不保留

 

請求的次數              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刷新,則瀏覽器會自動重複剛纔的行爲

相關文章
相關標籤/搜索