JSP学习笔记七之Cookie
首先提一下http协议的无状态性。指的是server不会记住已经给它发过请求的client。
每次收到请求都会觉得是一个新的client发过来的。
(即:server不会记住给他发过请求的client)。
所以这个时候我们就须要使用Cookie来保存用户的状态。
Cookie指webserver保存在client的一系列文本信息。比方:判定注冊用户是否已经登陆站点、网购购物车的处理等。所以消耗的是client的存储空间。
Session是通过server来保持状态的,是server端为client所开辟的存储空间。
所以消耗的是server端的存储空间。
1、保存用户的状态的两大机制:cookie和session。
a 、cookie作用:
1.对特定对象的追踪
2.保存用户网页浏览记录与习惯
3.简化登录
不足的是安全风险:easy泄露用户信息
b、session的作用
在创建了Session的同一时候,server会为该Session生成唯一的Session id,而这个Session id在随后的请求中会被用来又一次获得已经创建的Session;在Session被创建之后。就能够调用Session相关的方法往Session中添加内容了,而这些内容仅仅会保存在server中,发到client的仅仅有Session id;当client再次发送请求的时候。会将这个Session id带上,server接受到请求之后就会根据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的值和向server加入cookie实例、设置cookie对象的存活时间等。
在dologin.jsp中会有超链接的存在。用于连接users.jsp。
在users.jsp界面会显示刚刚在登陆界面输入的username和password。
这里通过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){
//将username与password保存到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天 //向server中加入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加入到server中
}
}
}
}
%>
<a href="users.jsp" target="_blank">查看用户信息</a> </body>
users.jsp
结果显示:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
不选择checkbox时的结果:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
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 |
编译时间 |
较慢-资源必须被解析 |
较快 |
运行时间 |
稍快 |
较慢-每次资源必须被解析 |
JSP学习笔记七之Cookie的更多相关文章
- JSP学习笔记(七十八):struts2中s:select标签的使用
1.第一个例子: <s:select list="{'aa','bb','cc'}" theme="simple" headerKey="00& ...
- JSP学习笔记
JSP学习笔记 Jsp网页主要分为Elements与Template Data两部分. Template Data:JSP Container不处理的部分,例如HTML内容 Elements:必须经由 ...
- (转)Qt Model/View 学习笔记 (七)——Delegate类
Qt Model/View 学习笔记 (七) Delegate 类 概念 与MVC模式不同,model/view结构没有用于与用户交互的完全独立的组件.一般来讲, view负责把数据展示 给用户,也 ...
- JSP学习笔记(三):简单的Tomcat Web服务器
注意:每次对Tomcat配置文件进行修改后,必须重启Tomcat 在E盘的DATA文件夹中创建TomcatDemo文件夹,并将Tomcat安装路径下的webapps/ROOT中的WEB-INF文件夹复 ...
- java web jsp学习笔记--概述-常用语法,指令,动作元素,隐式对象,域对象
JSP学习笔记 1.什么是jsp JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术.JSP/Servlet规范.JS ...
- Learning ROS for Robotics Programming Second Edition学习笔记(七) indigo PCL xtion pro live
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS forRobotics Pro ...
- Typescript 学习笔记七:泛型
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
- python3.4学习笔记(七) 学习网站博客推荐
python3.4学习笔记(七) 学习网站博客推荐 深入 Python 3http://sebug.net/paper/books/dive-into-python3/<深入 Python 3& ...
- Go语言学习笔记七: 函数
Go语言学习笔记七: 函数 Go语言有函数还有方法,神奇不.这有点像python了. 函数定义 func function_name( [parameter list] ) [return_types ...
随机推荐
- 第1节 MapReduce入门:11、mapreduce程序的入门-2
1.5.WordCount示例编写 1.JobMain.java类 package cn.itcast.wordcount; import org.apache.hadoop.conf.Configu ...
- HttpClient 学习整理 (转)
source:http://www.blogjava.net/Alpha/archive/2007/01/22/95216.html HttpClient 是我最近想研究的东西,以前想过的一些应用没能 ...
- 获取url上的参数
var aa = '?name=hss&age=13'; function strToObj(str){ if(typeof str === 'undefi ...
- webpack4前端工程化教程(一)
-本文作为webpack小白入门文章,会详细地介绍webpack的用途.具体的安装步骤.注意事项.一些基本的配置项,并且会以一个具体的项目实例来介绍如何使用webpack.另外,本文会简单地介绍一些最 ...
- [Usaco2009 Nov]lights(高斯消元)
luogu 点灯游戏应该很多人都在小时候頽过吧 反正我直到现在也不会 很明显一个灯最多只需要点一次 然后高斯消元 解完肯定剩自由元(就是那些全是0的行) 然后这些都爆搜 由于剩下的自由元不会太多 所以 ...
- 任务3.站会或DoD
三选一 1.为开展敏捷团队:尝试一下引入站会 2.正在实践敏捷团队:定义DoD 3.从本次和上次学习中自己找出一个任务 <我们知道何时才算完成> <富有成效的每日站会> 目前所 ...
- Web框架django基础篇
基本配置及学习 路由(Urls).视图(Views).模板(Template).Model(ORM). 简介 Django 是一个由 Python 写成的开放源代码的 Web 应用框架.它最初是被开 ...
- DD & E-app
DD & E-app 企业内部开发的E应用 前端 demo https://github.com/open-dingtalk docs https://open-doc.dingtalk.co ...
- 【KMP+最小循环节】F. Cyclic Nacklace
https://www.bnuoj.com/v3/contest_show.php?cid=9147#problem/F [题意] 给定一个字符串,问在字符串后最少添加多少个字母,得到的新字符串能是前 ...
- POJ 3279 Fliptile【枚举】
题意: 又是农夫和牛的故事...有m*n个黑白块,黑块的背面是白块,白块背面是黑块,一头牛踩一块,则这个块的上下左右的方块都会转动,问至少踩多少块,才会使所有块都变成白色? 分析: 还是开关问题,同样 ...