這篇博客介紹下Cookie,JSP中比較重要的知識點Session,Cookie,表單數據,過濾器,文件上傳。而Session和Cookie一般放在一起講,在介紹cookie之前,要先介紹下Cookie。(廢話一堆。。。)
1、Cookie(客戶端,不是內置對象):是由服務端生成的,再發送給客戶端保存。相當於本地緩存的作用(客戶端 ——> 服務端)。
2、Cookie作用:提高訪問服務端的效率,但是安全性較差。
3、Cookie的產生:
a、Cookie中保存的數據形式:key,value。
b、由Javax.servlet.http.Cookie類產生。
c、常見方法:
public Cookie(String name,String value)Cookie構造器
String getName()獲得key值
String getValue()獲得value值
void setMaxAge(int expiry)Cookie最大有效期
response.addCookie(Cookie cookie)用於服務端產生Cookie
request。getCookie(Cookie cookie)用於客戶端獲得Cookie
4、生成Cookie步驟:
a、服務端准備Cookie:response.addCookie(Cookie cookie)
b、頁面跳轉(請求轉發,重定向)
c、客戶端獲取Cookie:request.getCookie();
注意:a、服務端增加Cookie:request對象,客戶端獲取對象:response對象
b、不能直接獲取某一對象,只能一次將全部Cookie對象獲取到。
5、寫個簡單的生成Cookie的實例
在項目下的web目錄下新建一個Cookie文件夾,response_add.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>cookie驗證頁面</title>
</head>
<body>
<%
Cookie cookie1=new Cookie("zz","1111");
Cookie cookie2=new Cookie("aa","2222");
//服務端增加cookie
response.addCookie(cookie1);
response.addCookie(cookie2);
//轉發cookie給客戶端
response.sendRedirect("result.jsp");
%>
</body>
</html>
result.jsp生成cookie
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <% //客戶端獲取cookie Cookie[] cookies=request.getCookies(); //輸出cookie for(Cookie cookie:cookies){ out.println(cookie.getName()+"=="+cookie.getValue()); } %> </body> </html>
結果
6、生成Cookie的實例二(算是進階版吧)
在web目錄下新建一個文件CookieDemo
login.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>登錄</title> </head> <body> <%! String name; %> <% //獲得已存在客戶端中cookie boolean flag=false; Cookie cookies[]=request.getCookies(); for(Cookie cookie:cookies){ if(cookie.getName().equals("uname")){ name=cookie.getValue(); flag=true; } } if(!flag){ out.println("cookie已失效"); }else{ out.println("cookie+"+name); } %> <form action="check.jsp" method="post"> 用戶名: <input type="text" name="uname" value="<%=(name==null?"":name)%>" ><br/> 密碼: <input type="password" name="upwd" ><br/> <input type="submit" value="登錄"><br/> </form> </body> </html>
check.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"); Cookie cookie=new Cookie("uname",name);//沒有無參構造器 //增加cookie cookie.setMaxAge(10); response.addCookie(cookie); //轉發cookie response.sendRedirect("A.jsp");//這里我感覺是往客戶端發,由於我們是在電腦上操作的,客戶端和服務端其實是在一個機子上的 %> </body> </html>
A.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> </body> </html>
結果
從最后一張結果我們可以看到第一次登陸之后,用戶名的值就存在客戶端中,再次登錄時,用戶名已有記錄。