JSP学习笔记七之Cookie

首先提一下http协议的无状态性,指的是服务器不会记住已经给它发过请求的客户端。每次收到请求都会认为是一个新的客户端发过来的。(即:服务器不会记住给他发过请求的客户端)。

所以这个时候我们就需要使用Cookie来保存用户的状态。

Cookie指web服务器保存在客户端的一系列文本信息。比如:判定注册用户是否已经登陆网站、网购购物车的处理等。所以消耗的是客户端的存储空间。

Session是通过服务器来保持状态的,是服务器端为客户端所开辟的存储空间。所以消耗的是服务器端的存储空间。

1、保存用户的状态的两大机制:cookie和session。

a 、cookie作用:

1.对特定对象的追踪

2.保存用户网页浏览记录与习惯

3.简化登录

不足的是安全风险:容易泄露用户信息

b、session的作用

在创建了Session的同时,服务器会为该Session生成唯一的Session id,而这个Session id在随后的请求中会被用来重新获得已经创建的Session;在Session被创建之后,就可以调用Session相关的方法往Session中增加内容了,而这些内容只会保存在服务器中,发到客户端的只有Session id;当客户端再次发送请求的时候,会将这个Session id带上,服务器接受到请求之后就会依据Session id找到相应的Session,从而再次使用之。正是这样一个过程,用户的状态也就得以保持了。

2、Cookie的常用的方法

创建Cookie对象: Cookie newCookie = new Cookie(String key,Object value);

写入cookie对象: response.addCookie(newCookie);

读取Cookie对象: Cookie[] cookies = request.getCookies();

设置Cookie对象的有效期(秒): setMaxAge()

创建Cookie后进行赋值: setValue(String value)

获取Cookie的名称: getName()

获取Cookie的值: getValue()

获取Cookie的有效期(秒): getMaxAge()

3、下面给出一个Cookie的JSP实例。

login.jsp中使用一个checkbox来进行记录是否记住登陆状态。然后在dologin.jsp进行创建cookie,并且设置cookie的值和向服务器添加cookie实例、设置cookie对象的存活时间等。

在dologin.jsp中会有超链接的存在,用于连接users.jsp。在users.jsp界面会显示刚刚在登陆界面输入的用户名和密码。这里通过checkbox是否被勾选来判断是否需要创建Cookie。程序的逻辑是checkbox的被选上就创建Cookie。

首先是登陆界面login.jsp:

    <%
    	//获取Cookie实例对象中的元素值
    	Cookie[] cookie=request.getCookies();
    	String username="";
    	String password="";
    	if(cookie!=null && cookie.length>0){
    		for(Cookie c:cookie){
    			if(c.getName().equals("username")){
    				username=c.getValue();
    			}
    			if(c.getName().equals("password")){
    				password=c.getValue();
    			}
    		}
    	}
    %>
  <body>
    <h1>用户登录</h1>
    <hr>
        <form name="loginForm" action="dologin.jsp" method="post">
       <table>
         <tr>
           <td>用户名:</td>
           <td><input type="text" name="username" value="<%=username %>"/></td>
         </tr>
         <tr>
           <td>密码:</td>
           <td><input type="password" name="password" value="<%=password %>" /></td>
         </tr>
         <tr>
           <td colspan="2"><input type="checkbox" name="isUseCookie" checked="checked"/>十天内记住我的登录状态</td>
         </tr>
         <tr>
           <td colspan="2" align="center"><input type="submit" value="登录"/><input type="reset" value="取消"/></td>
         </tr>
       </table>
    </form>
  </body>
<span style="font-family: Arial, Helvetica, sans-serif;">dologin.jsp代码如下:</span>
<span style="font-family: Arial, Helvetica, sans-serif;"></span><pre name="code" class="html" style="color: rgb(20, 25, 30);"><span style="font-family: Arial, Helvetica, sans-serif;"> <body></span>

    <h1>登录成功</h1>
    <hr>
    <br>
    <br>
    <br>
	<%
	//首先判断用户是否记住了登陆状态
	String[] isUseCookie = request.getParameterValues("isUseCookie");
	if(isUseCookie!=null && isUseCookie.length>0){
		//将用户名和密码保存到Cookie中
		String username=request.getParameter("username");
		String password=request.getParameter("password");

		//定义Cookie对象
		Cookie usernameCookie=new Cookie("username",username);
		Cookie passwordCookie=new Cookie("password",password);
		//设置Cookie对象的有效时间
		usernameCookie.setMaxAge(864000);//10天
		passwordCookie.setMaxAge(864000);//10天

		//向服务器中添加Cookie
		response.addCookie(usernameCookie);
		response.addCookie(passwordCookie);
	}
	else{
		//检查之前是否有cookie存在
		Cookie[] cookie=request.getCookies();
		if(cookie!=null && cookie.length>0){
			//遍历Cookie
			for(Cookie c:cookie){
				if(c.getName().equals("username")||   //如果出现username和password的Cookie
						c.getName().equals("password")){
					c.setMaxAge(0);//将该cookie的时间设为0
					response.addCookie(c);//重新将Cookie添加到服务器中
				}
			}
		}
	}
	%>
    <a href="users.jsp" target="_blank">查看用户信息</a>

  </body>

users.jsp

结果显示:

不选择checkbox时的结果:

1、JSP常用的有page、include、taglib指令这三种指令

page:位于页面顶端,一个页面可以包含多个page指令。

include:将一个外部文件嵌入jsp中,同时解析这个页面中的jsp语句。

taglib:使用标签库,自定义新的标签,在jsp中启动定制行为。

a、include指令

语法 <% include file="地址"%>。

案例:显示当前时间的页面。步骤如下:

(1)写一个只输出时间的方法的date.jsp。

(2)用于显示的页面,需要包含<% include file="date.jsp"%>这句。

实例代码:

date.jsp

<%
//创建一个日期的实例
    Date d=new Date();
	SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日");
	String s=sdf.format(d);
	out.println(s);
%>

inculde_command.jsp

<body>
    <h1>include指令的测试</h1><br>
    <%@ include file="date.jsp"%>
  </body>

结果显示如下:

5、include动作(动作标签)

<jsp:include page="URL" flush="true/false" />

page :要包含的页面

flush :被包含的页面是否从缓冲区读取

代码实例:

include_action.jsp

 <body>
    <h1>include动作的测试</h1><br>
    <jsp:include page="date.jsp" 					flush="false"></jsp:include>
  </body>

6、include指令和动作的比较:


include指令


jsp:include动作


语法格式


<%@ include file=””%>


<jsp:include page=””>


发生作用的时间


页面转换期间


请求期间


包含的内容


文件的实际内容


页面的输出


转换成Servlet


主页面和包含页面转换成一个Servlet


主页面和包含转换为独立的Servlet


编译时间


较慢-资源必须被解析


较快


执行时间


稍快


较慢-每次资源必须被解析

时间: 2024-12-24 16:57:27

JSP学习笔记七之Cookie的相关文章

JSP学习笔记(七十八):struts2中s:select标签的使用

1.第一个例子: <s:select list="{'aa','bb','cc'}" theme="simple" headerKey="00" headerValue="00"></s:select> 2.第二个例子: <s:select list="#{1:'aa',2:'bb',3:'cc'}" label="abc" listKey="ke

Servlet&JSP学习笔记

Servlet&JSP学习笔记 */--> Servlet&JSP学习笔记 Table of Contents 1 Web容器 2 内置对象 2.1 内置对象分类 2.1.1 out 2.1.2 request 2.1.3 application 2.1.4 response 2.1.5 session 2.1.6 其他 3 JavaBean 3.1 JSP动作元素 3.2 javabean的四个作用於范围 4 JSP状态管理 4.1 Cookie 4.2 include 指令与动作

Cookie学习笔记二:Cookie实例

今天说说刚刚学到的两个Cookie的最经典应用:自动登录和购物车设置 一:自动登录 需要两个页面:login.jsp与index.jsp,login.jsp用来输出登录信息,index.jsp处理登录信息:如果有Cookie,则自动登录,否则创建输入信息的对象的Cookie,下次登录可以直接登录,但是我们在这里给Cookie设置一个最大保存时间30s,即登录30s后会自动退回到登陆页面,具体代码如下: login.jsp: <%@ page language="java" con

第十七篇:博采众长--初探WDDM驱动学习笔记(七)

基于WDDM驱动的DirectX视频加速重定向框架设计与实现 现在的研究生的论文, 真正质量高的, 少之又少, 开题开得特别大, 动不动就要搞个大课题, 从绪论开始到真正自己所做的内容之间, 是东拼西凑地抄概念, 抄公式, 达到字数篇幅的要求, 而自己正真做了什么, 有哪些实际感受, 做出的内容, 相比前面的东拼西凑就几点内容, 之后就草草结束, 步入感谢的段落. 原因不光只有学生自己, 所谓的读研, 如果没有一个环境, 学生有再大的愿望, 再强的毅力, 到头来也只是空无奈. 有些导师要写书,

马哥学习笔记七——LAMP编译安装之MYSQL

1.准备数据存放的文件系统 新建一个逻辑卷,并将其挂载至特定目录即可.这里不再给出过程. 这里假设其逻辑卷的挂载目录为/mydata,而后需要创建/mydata/data目录做为mysql数据的存放目录. 2.新建用户以安全方式运行进程: # groupadd -r mysql # useradd -g mysql -r -s /sbin/nologin -M -d /mydata/data mysql # chown -R mysql:mysql /mydata/data 3.安装并初始化my

Lua学习笔记(七):迭代器与泛型for

1.迭代器与闭包 迭代器是一种支持指针类型的结构,它可以遍历集合的每一个元素.在Lua中我们常常使用函数来描述迭代器,每次调用该函数就返回集合的下一个元素. 迭代器需要保留上一次成功调用的状态和下一次成功调用的状态,也就是他知道来自于哪里和将要前往哪里.闭包提供的机制可以很容易实现这个任务.记住:闭包是一个内部函数,它可以访问一个或者多个外部函数的外部局部变量.每次闭包的成功调用后这些外部局部变量都保存他们的值(状态).当然如果要创建一个闭包必须要创建其外部局部变量.所以一个典型的闭包的结构包含

python学习笔记七:条件&循环语句

1.print/import更多信息 print打印多个表达式,使用逗号隔开 >>> print 'Age:',42 Age: 42   #注意个结果之间有一个空格符 import:从模块导入函数 import 模块 from 模块 import 函数 from 模块 import * 如果两个模块都有open函数的时候, 1)使用下面方法使用: module1.open()... module2.open()... 2)语句末尾增加as子句 >>> import ma

swift学习笔记(七)自动引用计数

与Object-c一样,swift使用自动引用计数来跟踪并管理应用使用的内存.当实例不再被使用时,及retainCount=0时,会自动释放是理所占用的内存空间. 注:引用计数仅适用于类的实例,因为struct和enumeration属于值类型,也就不牵涉引用,所以其存储和管理方式并不是引用计数. 当一个实例被初始化时,系统会自动分配一定的内存空间,用于管理属性和方法.当实例对象不再被使用时,其内存空间被收回. swift中的引用类型分为三种,即Strong强引用,weak弱引用和无主引用unw

Servlet&amp;Jsp学习笔记归纳图(一)

转载请注明出处!!!版权必究!! 以下是Servlet&Jsp的学笔记归纳图,详细内容以及相关代码会在后面整理完成 后给出 使用的是思维导图工具:MindManager 6 最新版本是2013,有兴趣的自己百度下载,功能更多,安装有点麻烦 以下提供版本6绿色版免安装版下载: http://pan.baidu.com/s/1jGqlnXc 本节思维导图文件下载:http://pan.baidu.com/s/1eQGbMSU Servlet&Jsp学习笔记归纳图(一),布布扣,bubuko.c