本章文章详细讲解:
1、cookie基本用法演示
2、演示cookie的访问权限
3、演示cookie的删除
4、利用cookie显示用户上次登录的时间
5、利用cookie技术显示用户最近浏览的若干个图片
6、测试火狐浏览器到底支持多少个cookie和一个cookie最大为多大
1、cookie基本用法演示
index.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 演示cookie技术 cookie基本用法演示
web.xml:
cookieDemo cn.hncu.servlets.cookieDemo cookieDemo /cookieDemo index.jsp
cookieDemo.java:
package cn.hncu.servlets;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.Random;
import javax.servlet.ServletException;
import javax.servlet.http.cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class cookieDemo extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
//向客户端写cookie
Random r = new Random();
int n =r.nextInt(100);
String name = "jack";//cookie的格式:key=value
cookie c = new cookie("name", name+n);
c.setMaxAge(60*60);//设置过期时间,以秒为单位
c.setPath( request.getContextPath() );//该路径是: /项目名
//cookie机制中,是通过path来控制权限的。只有和该path相同或是它的子路径的servlet才能够访问该cookie
//如果把一个cookie的path设为项目根目录,那么该项目下的所有servlet都能够访问它
response.addcookie(c);
//这一段演示cookie带中文
String str = "我带中文";
str = URLEncoder.encode(str, "utf-8");//中文设置编码!!!urlencode编码
cookie cStr = new cookie("str", str);
//如果不设置setMaxAge,则浏览器一关闭就过期
cStr.setPath("/");
response.addcookie(cStr);
//读取客户端发过来的cookie
cookie cs[] = request.getcookies();//读取cookie
if(cs!=null){//防范一下
for(cookie cc:cs){
String name2 = cc.getName();
String val = cc.getValue();
val = URLDecoder.decode(val, "utf-8");//原来是怎么编码的,就怎么解码! 中文解码,ascii是原样的!
out.print(name2+"="+val+"
");
}
}
out.print("Cook保存成功!");
}
}
演示结果:
第一次点击时!session下次讲!tomcat自动生成发给客户端的!
再次进入时!
name+n–因为后面的n一直在随机生成,这个点击总是显示的是前一个的信息!
2、演示cookie的访问权限
index.jsp:
演示cookie的访问权限
web.xml:cookieDemo2 cn.hncu.servlets.cookieDemo2 cookieDemo2 /servlet/cookieDemo2
cookieDemo2.java:
package cn.hncu.servlets;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Random;
import javax.servlet.ServletException;
import javax.servlet.http.cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class cookieDemo2 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
//向客户端写cookie
Random r = new Random();
int n =r.nextInt(100);
cookie c = new cookie("age", ""+n);
c.setMaxAge(60*60);//过期时间
c.setPath( request.getContextPath()+"/servlet/cookieDemo2" );//cookie机制中,是通过path来控制权限的
//由于cookieDemo的url-pattern是项目根目录/cookieDemo,不是当前cookie所设路径的子目录,因此无法访问到该cookie
//注意!!!path不一样,那么cookie是不同的对象,也就是不会覆那个名字相同的cookie!
response.addcookie(c);
//读取从客户端发来的cookie
cookie cs[] = request.getcookies();
if(cs!=null){
for(cookie cc:cs){
String name = cc.getName();
String val = cc.getValue();
out.print("22222--"+name+"="+val+"
");
}
}
out.print("cookie保存成功!");
}
}
演示结果:
先进入cookieDemo2的页面,能访问到cookieDemo的name-cookie
再进入cookieDemo的页面,不能访问到cookieDemo2的age-cookie
3、演示cookie的删除
index.jsp:
演示cookie的删除
web.xml:
DelcookieDemo cn.hncu.servlets.DelcookieDemo DelcookieDemo /servlet/DelcookieDemo
DelcookieDemo.java:
package cn.hncu.servlets;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class DelcookieDemo extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
cookie cs[] = request.getcookies();
if(cs!=null){
for(cookie c:cs){
//要想遍历到"name"这个cookie,当前servlet必须要有读的权限,即servlet的url-pattern必须是该cookie所设路径或者是其所设路径的子路径
//删除name这个cookie
if("name".equals(c.getName())){
c.setPath( request.getContextPath() );//删除时是通过这一句来判断权限的!这里必须和原来所设的路径完全一样才能删除,否则不能删除!
//对于上句,我的个人理解是:因为如果你这个路径设置不同了,其实只是相当与新开了一个cookie,这个新cookie的到期时间是0,name是"name"
c.setMaxAge(0);//到期时见设为0,即是删除---此处只是设置删除标识
response.addcookie(c);
}
}
}
}
}
演示结果:
这个时候,name还存在的。
我们访问DelcookieDemo.
再去第一个链接看:
name已经没有了!
火狐会自动删除过期的cookie:
4、利用cookie显示用户上次登录的时间
index.jsp:
利用cookie显示用户上次登录的时间
web.xml:
LoginServlet cn.hncu.servlets.LoginServlet LoginServlet /LoginServlet
LoginServlet.java:
package cn.hncu.servlets;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("");
out.println("");
out.println(" 演示利用cookie显示用户上次登录的时间 ");
out.println(" ");
//读取客户端的cookie
cookie cs[] = request.getcookies();
boolean boo = false;
if(cs!=null){
for(cookie c:cs){
//遍历
if("loginTime".equals(c.getName())){
String val =c.getValue();
long dt = Long.parseLong(val);
Date d = new Date(dt);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
out.print("您上次登录时间是:"+sdf.format(d));
boo=true;
break;
}
}
}
if(boo==false){//表示之前1年没有访问记录!因为下面我们保存的过期时间是一年
out.print("您最近一年是第一次访问。。。");
}
//无论是新旧用户,都会以最近的时间俩创建一个cookie,写到客户端。原来有了的,就是更新时间
Date d = new Date();
cookie c = new cookie("loginTime", ""+d.getTime() );
c.setPath(request.getContextPath());
c.setMaxAge(60*60*24*30*12);
response.addcookie(c);
out.println(" ");
out.println("");
out.flush();
out.close();
}
}
演示结果:
第一次访问;
再次访问:
5、利用cookie技术显示用户最近浏览的若干个图片
index.jsp:
看美女--利用cookie技术显示用户最近浏览的若干个图片
web.xml:
ShowServlet cn.hncu.servlets.ShowServlet ShowServlet /showImg
show.jsp:
<%@page import="java.io.File"%> <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>.span{ border:0px solid #000; width:100px; height:100px; overflow:hidden; } .span img{ max-width:100px; _width:expression(this.width > 100 ? "100px" : this.width); } .spans{ border:0px solid #000; width:50px; height:50px; overflow:hidden; } .spans img{ max-width:50px; _width:expression(this.width > 50 ? "50px" : this.width); } 看美女--利用cookie技术显示用户最近浏览的若干个图片 看美女--利用cookie技术显示用户最近浏览的若干个图片 最近浏览的图片: <% String str =null; cookie cs[] = request.getcookies(); if(cs!=null){ for(cookie c:cs){ if("images".equals(c.getName())){ str=c.getValue();// ***.jpg break; } } } if(str!=null){ String strs[] = str.split(","); for(String s:strs){ %> /imgs/<%=s%>" /> <% } } %>
<% //利用file遍历所有的图片,显示出来。 String path = getServletContext().getRealPath("/imgs"); //System.out.printf(path);//D:apache-tomcat-7.0.30webappsmycookieWebjsps File file = new java.io.File(path); File[] files = file.listFiles(); if(files!=null){ %> <% for(File f:files){ String imgName = f.getName(); %> /showImg?img=<%=imgName %>"> /imgs/<%=imgName%>" /> <% } %> <% } %>
ShowServlet.java:
package cn.hncu.servlets;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ShowServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("");
out.println("");
out.println(" A Servlet ");
out.println(" ");
String img = request.getParameter("img");
String imgStr = "";
out.print(imgStr);
//用cookie记录用户访问过的图片信息
cookie cs[] = request.getcookies();
boolean boo = false;
if(cs!=null){
for(cookie c:cs){
if("images".equals(c.getName())){//已经有了images这个cookie
String imgs = c.getValue();
String imgStrs[] = imgs.split(",");
boolean booStr = false;
//防范点击重复的图片
for(int i=0;i3){//如果访问的图片超过3次了
imgs = imgs.substring(0, imgs.lastIndexOf(","));//左包含,右不包含
}
}
c.setValue(imgs);//更新
c.setMaxAge(60*60*24*30);
c.setPath("/");//相当于把访问权限完全放开,即所有的项目都能访问
response.addcookie(c);
boo=true;
break;
}
}
}
if(boo==false){//表示首次访问,即浏览器中没有图片浏览的cookie
cookie c = new cookie("images", img);
c.setMaxAge(60*60*24*30);
c.setPath("/");
response.addcookie(c);
}
out.println(" ");
out.println("");
out.flush();
out.close();
}
}
演示结果:
6、测试火狐浏览器到底支持多少个cookie和一个cookie最大为多大
index.jsp:
测试火狐浏览器到底支持多少个cookie和一个cookie最大为多大
web.xml:
HowManycookie cn.hncu.servlets.HowManycookie HowManycookie /servlet/HowManycookieServlet
HowManycookie.java:
package cn.hncu.servlets;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLDecoder;
import javax.servlet.ServletException;
import javax.servlet.http.cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HowManycookie extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out = response.getWriter();
//测试大小 ---4092字节为最大支持的单个cookie存储
String s ="";
for(int i=0;i<4092;i++){
s+="1";
}
cookie c = new cookie("test", s);
c.setMaxAge(60*15);
c.setPath("/");
response.addcookie(c);
cookie cs[] = request.getcookies();//读取cookie
if(cs!=null){//防范一下
for(cookie cc:cs){
String key = cc.getName();
String val = cc.getValue();
out.print(key+"="+val+" ");
}
}
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。



