欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaWeb開發(fā)使用Cookie創(chuàng)建-獲取-持久化、自動(dòng)登錄、購(gòu)物記錄、作用路徑

 更新時(shí)間:2016年08月26日 09:21:26   作者:Saflyer  
這篇文章主要介紹了JavaWeb開發(fā)使用Cookie創(chuàng)建-獲取-持久化、自動(dòng)登錄、購(gòu)物記錄、作用路徑的相關(guān)知識(shí),非常不錯(cuò),對(duì)cookie持久化知識(shí)感興趣的朋友一起學(xué)習(xí)吧

1、cookie是啥?隨手百度了網(wǎng)友的說(shuō)說(shuō)

簡(jiǎn)單的說(shuō),Cookie就是服務(wù)器暫存放在你計(jì)算機(jī)上的一筆資料,好讓服務(wù)器用來(lái)辨認(rèn)你的計(jì)算機(jī)。當(dāng)你在瀏覽網(wǎng)站的時(shí)候,Web服務(wù)器會(huì)先送一小小資料放在你的計(jì)算機(jī)上,當(dāng)下次你再光臨同一個(gè)網(wǎng)站,Web服務(wù)器會(huì)先看看有沒有它上次留下的Cookie資料,有的話,就會(huì)依據(jù)Cookie里的內(nèi)容來(lái)判斷使用者,送出特定的網(wǎng)頁(yè)內(nèi)容給你。

2、cookie在哪里?

這里寫圖片描述這里寫圖片描述

3、cookie可以刪除嗎?

這里寫圖片描述這里寫圖片描述

4、cookie實(shí)現(xiàn)原理

第一次請(qǐng)求瀏覽器,在瀏覽器的cookie存儲(chǔ)區(qū),沒有cookie,

第一次訪問(wèn)不帶Cookie,瀏覽器通過(guò)Http請(qǐng)求消息中增加Cookie請(qǐng)求頭將Cookie回傳給web服務(wù)器,瀏覽器會(huì)把Cookie的信息片斷以”名/值”對(duì)(name-value pairs)的形式儲(chǔ)存保存在本地,下次訪問(wèn),web服務(wù)器通過(guò)http響應(yīng)消息中增加Set-Cookie響應(yīng)頭,將Cookie信息發(fā)送給瀏覽器

我們通過(guò)實(shí)際來(lái)看下cookie吧

創(chuàng)建一個(gè)cookie.jsp,為了便于觀察,設(shè)置session=”false”

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" session="false"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
//創(chuàng)建一個(gè)cookie
Cookie cookie = new Cookie("name","wyf");
response.addCookie(cookie);
%>
</body>
</html>

我們第一次訪問(wèn)cookie.jsp文件,在IE輸入

http://localhost:8080/day01/cookie.jsp

請(qǐng)求標(biāo)頭中,可以看到首次訪問(wèn)是不攜帶cookie的

這里寫圖片描述 

在響應(yīng)標(biāo)頭中,通過(guò)Set-Cookie傳回,并且保存在瀏覽器本地cookie存儲(chǔ)區(qū)

這里寫圖片描述

我們第二次訪問(wèn)cook.jsp文件,看看有沒有變化

請(qǐng)求標(biāo)頭中,可以看到再次訪問(wèn),是從瀏覽器本地cookie存儲(chǔ)區(qū),攜帶cookie的請(qǐng)求的

這里寫圖片描述 

如下是響應(yīng)標(biāo)頭:

這里寫圖片描述

我們用一個(gè)交互圖,來(lái)了解下cookie機(jī)制:

我們來(lái)看下cookie的創(chuàng)建、獲取

這里寫圖片描述

cookie.jsp中代碼意思是:如果請(qǐng)求中,沒有cookie,就創(chuàng)建并返回,請(qǐng)求中帶cookie的話,就輸出cookie鍵值對(duì)(name-value)

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" session="false"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
Cookie[] cookies = request.getCookies();
if(cookies !=null && cookies.length>0){
for(Cookie cookie : cookies){
out.print(cookie.getName()+":"+cookie.getValue());
}
}else{
out.print("沒有cookie,正在創(chuàng)建,并且返回");
Cookie cookie = new Cookie("name","wyf");
response.addCookie(cookie);
}
%>
</body>
</html>

第一次訪問(wèn)

這里寫圖片描述 

第二次訪問(wèn)

這里寫圖片描述

以上操作是我們需要重新關(guān)閉瀏覽器,在進(jìn)行調(diào)試為什么呢?
因?yàn)槟J(rèn)情況下,cookie是一個(gè)會(huì)話級(jí)別的cookie,存儲(chǔ)在瀏覽器的內(nèi)核中,用戶退出瀏覽器后被刪除,若希望瀏覽器將該cookie存儲(chǔ)在磁盤上,則需要使用maxAge,單位為秒

我們來(lái)看下持久化cookie

<%
Cookie[] cookies = request.getCookies();
if(cookies !=null && cookies.length>0){
for(Cookie cookie : cookies){
out.print(cookie.getName()+":"+cookie.getValue());
}
}else{
out.print("沒有cookie,正在創(chuàng)建,并且返回");
Cookie cookie = new Cookie("name","wyf");
cookie.setMaxAge(30);
response.addCookie(cookie);
}
%>

cookie.setMaxAge(30);設(shè)置為30秒,這里就不截圖了,說(shuō)名下即可,第一次訪問(wèn)沒有cookie創(chuàng)建cookie,第二次訪問(wèn)輸出cookie鍵值對(duì),關(guān)閉瀏覽器,在30秒內(nèi)訪問(wèn),依然提示cookie鍵值對(duì),而不是之前的提示沒有cookie創(chuàng)建cookie

自動(dòng)登錄

這里寫圖片描述

login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="success.jsp" method="post">
name:<input type="text" name="name"/>
<input type="submit" value="sumit"/>
</form>
</body>
</html>

success.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" session="false"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
//若可以獲取到參數(shù)name,則打印登錄信息,將信息存儲(chǔ)到cookie中,并設(shè)置cookei的時(shí)間
String name = request.getParameter("name");
if (name != null && !name.trim().equals("")) {
Cookie cookie = new Cookie("nameCookie", name);
cookie.setMaxAge(60);
response.addCookie(cookie);
} else {
//如果沒有參數(shù),可以用cookie登錄,從cookie中讀取用戶信息,如果存在則打印歡迎信息
Cookie[] cookies = request.getCookies();
if (cookies != null && cookies.length > 0) {
for (Cookie cookie : cookies) {
String cookieName = cookie.getName();
if ("nameCookie".equals(cookieName)) {
String val = cookie.getValue();
name = val;
}
}
}
}
if (name != null && !name.trim().equals("")) {
out.print("hello" + name);
} else {
//若沒有請(qǐng)求參數(shù),也沒有cookie,則重定向到login.jsp
response.sendRedirect("login.jsp");
}
%>
</body>
</html>

第一次訪問(wèn)http://localhost:8080/day01/login.jsp輸入name參數(shù)值,提交,在success.jsp中,首先獲取提交過(guò)來(lái)的參數(shù)name值,如果不為null,那么就直接設(shè)置一個(gè)cookie,保存參數(shù)name值,然后頁(yè)面輸出name參數(shù)值,第二次訪問(wèn)直接輸入http://localhost:8080/day01/success.jsp,
由于這次么有攜帶參數(shù)name值,我們只需要從cookie的value值中獲取值,然后顯示輸出即可

顯示最近的購(gòu)物記錄

這里寫圖片描述 

books.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h4>Books Page</h4>
<a href="book.jsp?book=JavaWeb">JavaWeb</a>
<a href="book.jsp?book=Java">Java</a>
<a href="book.jsp?book=Oracle">Oracle</a>
<a href="book.jsp?book=Ajax">Ajax</a>
<a href="book.jsp?book=JavaScript">JavaScript</a>
<a href="book.jsp?book=Android">Android</a>
<a href="book.jsp?book=Jbpm">Jbpm</a>
<br><br>
<%
//獲取所有的Cookie
Cookie[] cookies = request.getCookies();
//從篩選出的Book的Cookie,如果cookieName為ATGUIGU_BOOK_ 開頭的即符合條件
if(cookies!=null&&cookies.length>0){
for(Cookie c:cookies){
String cookieName = c.getName();
if(cookieName.startsWith("Safly")){
//顯示cookieValue
out.println(c.getValue());
out.print("<br>");
}
}
}
%>
</body>
</html>

book.jsp

<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
Book:<%= request.getParameter("book") %>
<br><br>
<a href="books.jsp">return</a>
<%
String book = request.getParameter("book");
//確定要被刪除的Cookie
Cookie[] cookies = request.getCookies();
//保存所有Safly 開頭的Cookie
ArrayList<Cookie> bookCookies = new ArrayList<Cookie>();
//用來(lái)保存和books.jsp 傳入的book匹配的那個(gè)Cookie
Cookie tempCookie = null;
if(cookies!=null&&cookies.length>0){
for(Cookie c:cookies){
String cookieName = c.getName();
if(cookieName.startsWith("Safly")){
bookCookies.add(c);
//選購(gòu)5個(gè)之后,在選5個(gè)中的一個(gè)
if(c.getValue().equals(book)){
out.print("c.getValue().equals(book)");
tempCookie = c;
}
}
}
}
//選購(gòu)5個(gè)選除這5本以外的一本
if(bookCookies.size() >= 5&&tempCookie == null){
tempCookie = bookCookies.get(0); //
out.print("tempCookie == null");
}
//若在其中則刪除bookCookie本身,將列表的重復(fù)cookie刪掉,并且將其回傳
if(tempCookie != null){
tempCookie.setMaxAge(0);
response.addCookie(tempCookie);
}
//把從books.jsp傳入的book作為一個(gè)Cook返回
Cookie cook = new Cookie("Safly"+book,book);
response.addCookie(cook);
%>
</body>
</html>

說(shuō)一下邏輯關(guān)系:

在Books.jsp中以下是書籍的列表,

JavaWeb
Java
Oracle
Ajax
JavaScript
Android
Jbpm

我隨便選擇一個(gè)鏈接(比如JavaWeb),去跳轉(zhuǎn)到book.jsp,第一次訪問(wèn)是沒有帶Cookie的,所以會(huì)調(diào)用book.jsp如下的方法,創(chuàng)建了一個(gè)cookie,在book.jsp頁(yè)面中,點(diǎn)擊return返回到books.jsp就取出cooks.jsp帶過(guò)來(lái)的cookieValue,然后展現(xiàn)選中的書籍列表即可

Cookie cook = new Cookie("Safly"+book,book);
response.addCookie(cook);

此刻已經(jīng)回到books.jsp中,已經(jīng)選擇了JavaWeb一本書,我們?cè)谶x擇一本(假如Java),然后跳轉(zhuǎn)到books.jsp,此刻我們會(huì)帶著1個(gè)cookie(就是第一次選中JavaWeb訪問(wèn)books.jsp時(shí)候,給我傳過(guò)來(lái)的),這個(gè)cookie的鍵值就是SaflyJavaWeb–JavaWeb,但是呢?選中第二本書Java是沒有帶cookie的(沒有SaflyJava–Java)
然后就進(jìn)入到cooks.jsp中

if(cookieName.startsWith("Safly")){
bookCookies.add(c);}

所以也就將SaflyJavaWeb–JavaWeb放入到一bookCookies中(存放選中的書籍列表)然后呢,那個(gè)SaflyJava–Java就會(huì)創(chuàng)建,在點(diǎn)擊renturn時(shí)候,反給cookies.jsp

。。。。第3、4、5次選擇書時(shí),是一樣的過(guò)程
如果等books.jsp中選擇了5本書時(shí)候,在選擇這5本書中的某一本時(shí)候,怎么處理呢?
c.getValue().equals(book)來(lái)獲取選中的那本書,我們需要將此cookie刪除然后,從新添加進(jìn)來(lái)然后回傳給cookies.jsp代碼如下:

tempCookie.setMaxAge(0);
response.addCookie(tempCookie);

如果等books.jsp中選擇了5本書時(shí)候,在選擇非此5本書的第6本書,怎么處理呢?
我們就tempCookie = bookCookies.get(0); 取出來(lái)那5本書的第一本,然后tempCookie.setMaxAge(0);刪除調(diào)第一本的cookie,然后將第6本書,創(chuàng)建cookie回傳給cookies.jsp即可

以下是部分截圖:

這里寫圖片描述這里寫圖片描述

cookie的作用路徑

cookie2.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
String cookieValue = null;
Cookie [] cookies = request.getCookies();
if(cookies!=null&& cookies.length>0){
for(Cookie cookie:cookies){
if("cookiePath".equals(cookie.getName())){
cookieValue = cookie.getValue();
}
}
}
if(cookieValue != null){
out.print(cookieValue);
}else{
out.print("沒有指定的cookie");
}
%>
</body>
</html>

writerCookie.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
//可以作用當(dāng)前目錄,和當(dāng)前目錄的子目錄,但不能作用于當(dāng)前目錄的上一級(jí)目錄
//可以通過(guò)setPath設(shè)置cookie的作用范圍,/代表站點(diǎn)的根目錄
Cookie cookie = new Cookie("cookiePath","CookiePathValue");
cookie.setPath(request.getContextPath());
response.addCookie(cookie);
%>
<a href="../cookie2.jsp">to cookie2.jsp</a>
</body>
</html>

to cookie2.jsp就是訪問(wèn)writerCookie.jsp上級(jí)目錄的cookie2.jsp

這里寫圖片描述

這里寫圖片描述

這里寫圖片描述

以上所述是小編給大家介紹的JavaWeb開發(fā)使用Cookie創(chuàng)建-獲取-持久化、自動(dòng)登錄、購(gòu)物記錄、作用路徑,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • java原碼補(bǔ)碼反碼關(guān)系解析

    java原碼補(bǔ)碼反碼關(guān)系解析

    這篇文章主要為大家詳細(xì)介紹了java原碼補(bǔ)碼反碼的關(guān)系,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • EasyExcel工具讀取Excel空數(shù)據(jù)行問(wèn)題的解決辦法

    EasyExcel工具讀取Excel空數(shù)據(jù)行問(wèn)題的解決辦法

    EasyExcel是阿里巴巴開源的一個(gè)excel處理框架,以使用簡(jiǎn)單,節(jié)省內(nèi)存著稱,下面這篇文章主要給大家介紹了關(guān)于EasyExcel工具讀取Excel空數(shù)據(jù)行問(wèn)題的解決辦法,需要的朋友可以參考下
    2022-08-08
  • Hibernate核心思想與接口簡(jiǎn)介

    Hibernate核心思想與接口簡(jiǎn)介

    這篇文章主要介紹了Hibernate核心思想與接口的相關(guān)內(nèi)容,需要的朋友可以參考下。
    2017-09-09
  • Jackson反序列化@JsonFormat 不生效的解決方案

    Jackson反序列化@JsonFormat 不生效的解決方案

    這篇文章主要介紹了Jackson反序列化@JsonFormat 不生效的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 基于Spring開發(fā)之自定義標(biāo)簽及其解析

    基于Spring開發(fā)之自定義標(biāo)簽及其解析

    Spring框架是現(xiàn)在Java最流行的開源框架之一,需要實(shí)現(xiàn)一些自定義的標(biāo)簽,主要是方便使用我們框架的人能夠快速、簡(jiǎn)單進(jìn)行配置,有興趣的可以了解一下。
    2017-04-04
  • Mybatis Properties 配置優(yōu)先級(jí)詳解

    Mybatis Properties 配置優(yōu)先級(jí)詳解

    這篇文章主要介紹了Mybatis Properties 配置優(yōu)先級(jí),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 使用spring.profiles.active來(lái)分區(qū)配置的方法示例

    使用spring.profiles.active來(lái)分區(qū)配置的方法示例

    這篇文章主要介紹了使用spring.profiles.active來(lái)分區(qū)配置的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • Java超詳細(xì)分析@Autowired原理

    Java超詳細(xì)分析@Autowired原理

    @Autowired注解可以用在類屬性,構(gòu)造函數(shù),setter方法和函數(shù)參數(shù)上,該注解可以準(zhǔn)確地控制bean在何處如何自動(dòng)裝配的過(guò)程。在默認(rèn)情況下,該注解是類型驅(qū)動(dòng)的注入
    2022-06-06
  • springboot如何實(shí)現(xiàn)導(dǎo)入其他配置類

    springboot如何實(shí)現(xiàn)導(dǎo)入其他配置類

    這篇文章主要介紹了springboot如何實(shí)現(xiàn)導(dǎo)入其他配置類問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • MyBatis-Plus里面的增刪改查詳解(化繁為簡(jiǎn))

    MyBatis-Plus里面的增刪改查詳解(化繁為簡(jiǎn))

    這篇文章主要給大家介紹了關(guān)于MyBatis-Plus里面的增刪改查的相關(guān)資料,Mybatis-Plus是一個(gè)基于Mybatis的增強(qiáng)工具,可以簡(jiǎn)化Mybatis的開發(fā),提高開發(fā)效率,需要的朋友可以參考下
    2023-07-07

最新評(píng)論