微科社区,轻松开发从此开始! 请登陆 免费注册

微科社区

当前位置:首页 > Java平台 > Servlet/JSP >

JSP编程技巧:用JSP操作Cookie

时间:2017-01-23 04:01  浏览:努力统计中...
做J2EE开发已经好几年了,对cookie的了解仅限于知道其使用方式、优缺点及一些简单的基本原理,工作中有些项目也使用cookie, 基本上都是用于记录用户的登录信息(有很多知名网站用于记录
         做J2EE开发已经好几年了,对cookie的了解仅限于知道其使用方式、优缺点及一些简单的基本原理,工作中有些项目也使用cookie,

基本上都是用于记录用户的登录信息(有很多知名网站用于记录客户个人信息或访问习惯的鄙视一下),再次访问时不需要再次登录,
由于我是做企业应用的,因此一般cookie也会用于做sso的方案,这个确实非常方便,尤其是多机集群环境下,一个节点宕机,只要有另一个节点能提供服务,
用户就不会有所感知,避免了session复制这种重量级方案。
网上关于cookie的资料比较多也比较杂,有讨论用各种语言操作cookie的,也有讨论用cookie如何实现sso的,也有变相实现cookie跨域访问的方案,今天准备用java/jsp做一个cookie操作的完整测试,一方面加深印象,一方面给做企业应用的新手朋友一个指引,只要耐心将下边各个测试过程跟下来,保证你对cookie会有一个更深层次的认识。
多的不说了,测试环境JDK1.5 + Eclipse3.6 + Tomcat5.0.28测试过程如下:
开发2个web应用,分别为web1和web2,
web1应用的web根下创建一个index.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">
<%
    
    Cookie[] cookies = request.getCookies();
    if(cookies != null && cookies.length > 0){
        for(int i=0;i<cookies.length;i++){
            Cookie cookie = cookies[i];
            System.out.println("web1----cookie name:"+cookie.getName()+" value:"+cookie.getValue());
            if("myCookieName".equals(cookie.getName())){//如果cookie已存在则删除掉
                cookie.setMaxAge(0);
                response.addCookie(cookie);
            }
        }
    }
    //用java代码创建cookie的方法如下,构造的参数是cookie的name和value
    Cookie cookie = new Cookie("myCookieName","myCookieValue1");
    cookie.setPath("/");
    response.addCookie(cookie);
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    This is web1's index.jsp
</body>
</html>

web2应用的web根下创建一个index.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">
<%
    
    Cookie[] cookies = request.getCookies();
    if(cookies != null && cookies.length > 0){
        for(int i=0;i<cookies.length;i++){
            Cookie cookie = cookies[i];
            System.out.println("web1----cookie name:"+cookie.getName()+" value:"+cookie.getValue());
            if("myCookieName".equals(cookie.getName())){//如果cookie已存在则删除掉
                cookie.setMaxAge(0);
                response.addCookie(cookie);
            }
        }
    }
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    This is web2's index.jsp
</body>
</html>

2个应用基本一样,web1负责获取系统中的cookie然后输出name和value到控制台,并创建一个cookie,web2则只获取cookie然后输出name和value到控制台,这两个应用功能非常好理解。
2个应用部署到一个tomcat下,端口为80,两个应用的访问路径分为别:
http://127.0.0.1/web1 和 http://127.0.0.1/web2 接下来是测试过程

首先用IE8访问web1,为了看到我们创建的cookie,所以需要多刷新几下,这时控制台输出如下(去除重复项后):
web1----name:JSESSIONID value:D402D19B22D8E3437ECF36785B0853E1
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线------
栏目列表
推荐内容