cookie机制:
cookie机制采用的是客户端保持HTTP状态信息的方式。
Cookie是在浏览器访问web服务器的某个资源是,由web服务器在HTTP响应消息头中附带送给浏览器的一个小文本文件。
一旦web服务器保存了某个cookie,那么他在以后每次访问该web服务器时,都会在http请求头中将这个cookie回传给web服务器。
1.创建一个cookie对象:
Cookie cookie = new Cookie("name","aaa");
2.调用response的一个方法,把cookie传给客户端:
response.addCookie(cookie);
在页面上显示:默认是会话级别的,浏览器关闭,cookie消失。
<%
Cookie[] cookies = request.getCookies();
if(cookies !=null&&cookies.length>0){
for(Cookie cookie:cookies){
out.print(cookie.getName()+"-"+cookie.getValue());
out.println("");
}
}else{
out.print("正在创建");
Cookie cookie = new Cookie("name","aaa");
cookie.setMaxAge(30);//设置cookie存活时间 //持久化cookie
response.addCookie(cookie);
}
%>
案例:显示最近浏览过的商品:
books.jsp:显示最近浏览的5本书:
1.获取所有的cookie
2.从中筛选出book的cookie:如果cookieName为ATGUIGU_BOOK_开头的即符合条件
3.显示cookieValue
book.jsp:把书的信息已cookie的方式传回给浏览器,删除一个cookie
1.确定要被删除的cookie:ATGUIGU_BOOK_开头的Cookie数量大于或等于5,若从books.jsp传入的book,不在ATGUIGU_BOOK_中,则删除这个数组的第一个cookie;若从books.jsp传入的book,在ATGUIGU_BOOK_中则删除该cookie
2.把从books.jsp传入的book作为一个cookie返回
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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h4>Books Page</h4>
<a href = "book.jsp?book=javaWeb">javaWeb</a><br><br>
<a href = "book.jsp?book=java">java</a><br><br>
<a href = "book.jsp?book=hibernate">hibernate</a><br><br>
<a href = "book.jsp?book=struts">struts</a><br><br>
<a href = "book.jsp?book=spring">spring</a><br><br>
<a href = "book.jsp?book=html">html</a><br><br>
<a href = "book.jsp?book=css">css</a><br><br>
<%
Cookie[] cookies = request.getCookies();
if(cookies !=null &&cookies.length>0){
for(Cookie c:cookies){
String cookieName = c.getName();
if(cookieName.startsWith("ATGUIGU_BOOK_")){
out.println(c.getValue());
}
}
}
%>
</body>
</html>
book.jsp实现:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ page import="java.util.*" %>
<!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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h4>Book detailPage</h4>
book:<%=request.getParameter("book") %>
<br><br>
<a href="books.jsp">return</a>
<%
String book = request.getParameter("book");
Cookie tempCookie = null;
//1.确定要被删除的cookie:ATGUIGU_BOOK_开头的Cookie数量大于或等于5,若从books.jsp传入的book,不在ATGUIGU_BOOK_中,则删除这个数组的第一个cookie;若从books.jsp传入的book,在ATGUIGU_BOOK_中则删除该cookie
Cookie[] cookies = request.getCookies();
List<Cookie> bookcookies = new ArrayList<Cookie>();
if(cookies !=null&&cookies.length>0){
for(Cookie c :cookies){
String cookieName = c.getName();
if(cookieName.startsWith("ATGUIGU_BOOK_")){
bookcookies.add(c);
if(c.getValue().equals(book)){
tempCookie = c;
}
}
}
}
if(bookcookies.size()>=5&&tempCookie==null){
tempCookie = bookcookies.get(0);
}
if(tempCookie !=null){
tempCookie.setMaxAge(0);
response.addCookie(tempCookie);
}
//2.把从books.jsp传入的book作为一个cookie返回
Cookie cookie = new Cookie("ATGUIGU_BOOK_"+book,book);
response.addCookie(cookie);
%>
</body>
</html>