JSP九大元素之response與Cookie及其實例

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:模擬服務端向客戶端發送cookie
jsp

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);//一年

相關文章
相關標籤/搜索