传智播客---cookie与session的介绍和使用

这就是我在传智播客这三,四天学到的,这不是白学的,这是真正的技术活要在工作中使用的,看到的朋友们,你们看看这些你们都有了解吗都全懂吗,我是懂了,因为我在咱们传智播客培训的,朋友们,在这培训你才能学到真正的技术,你的能力才能真正的提升,在老师的传授下,在班主任的关心下,在同学之间的讨论下,你明显的就能感觉到能力提升了,而且我真实的感受咱们传智播客老师的实力啊!!!那真的是绝对的牛!!!在这样的老师的培训下你还怕学不到技术??不怕你学到技术就怕你学不完!使劲的学吧!!!

继续给大家晒晒我学到的知识,嘿嘿

今天讲这么几个重要知识点:jsp cookie session
先说jsp:
 JSP技术功能和Servlet一样,在服务器执行,可以生成动态网页
 JSP本身支持HTML语法,比Servlet更便于生成动态网页
 JSP快速编写入门
 1、JSP直接存放WebRoot目录下,和HTML一样
 2、修改MyEclipse JSP默认编辑器
 window- preferences - general - editors - file associations 将JSP默认编辑器设置为JSP Editor
 3、JSP文件默认编码集 ISO-8859-1 , 修改MyEclipse中JSP默认编码
 window - preferences 搜索JSP修改编码集为utf-8

 JSP比HTML多了一句
 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
 在JSP中通过<% %> 嵌入任意Java代码
JSP运行原理分析:
客户端访问服务器端JSP文件,服务器会读取JSP内容,将其翻译为一个Servlet,执行JSP过程实际上执行Servlet过程,返回给客户端页面由Servlet程序生成的 。
jsp翻译成Servlet后会保存在tomcat/work目录中
 例如:hello.jsp ------ hello_jsp.java
    1.jsp ------- _1_jsp.java
JSP生命周期三个方法:  _jspInit() _jspService _jspDestroy()
在jsp中翻译规则:JSP中HTML代码 <%%>中java代码 ---- 翻译为 _jspService方法内部局部代码
备注:Servlet 含有少量HTML的Java程序, JSP 含有少量Java的HTML程序
JSP中三种脚本元素:
 1、<%! %> JSP声明脚本 翻译成员变量、成员方法、内部类
 2、<%= %> JSP脚本表达式 输出表达式值到HTML源代码 ------ 会被翻译为 out.print
 * out 是 JSP内置对象,用于生成HTML源代码
 3、<% %> JSP程序脚本代码 ,可以嵌入任意Java代码
在jsp中的EL表达式语言:
 EL 表达式语言是 JSP2.0新特性 ,主要用来对JSP中各种数据范围的对象(也叫域对象)进行取值访问 !!!
 <%=request.getAttribute(“name”);>
 等价于
 ${requestScope.name}
 区别:如果name为空时 ,<%=request.getAttribute(“name”);>会在页面上显示 null,
 而${requestScope.name} 会显示 ""
下面介绍一下cookie与session:
 什么是会话?用户打开浏览器,访问一个网站进行一系列操作,关闭浏览器离开,完整过程 就是会话

 Cookie : 一种将用户信息保存在客户端技术 ,客户端会将cookie信息自动发送给服务器
   默认cookie都是浏览器内存中进行缓存的 ,当浏览器关闭,会话结束,内存释放
 Session :一种将用户信息保存在服务器端技术 ,客户端会持有Session信息对应key,通过key找到session信息
两者区别:Session是占用服务器空间,安全性更高 ,Cookie占用客户端,从而节省服务器资源,但是安全性差一些
cookie:
 Cookie API 详解
 1 读取cookie
 request.getCookies() 返回Cookie[]
 首先判断cookies数组是否存在 cookies == null,如果cookies存在,根据cookie的name去查找指定cookie
 2、服务器向客户端发送cookie
 cookie对象创建 new Cookie(name,value)
 response.addCookie(cookie) 将cookie发送客户端
 * cookie有name和value,提供三个方法 getName getValue setValue 
 3、cookie从持久性上分为两类:会话cookie和持久cookie
 会话cookie 保存在浏览器内存中cookie,当会话结束浏览器关闭,会话cookie信息就是丢失
 持久cookie 保存在浏览器临时文件缓存区中cookie (硬盘上) ,当关闭浏览器结束会话,持久cookie不会被删除
 * 持久cookie存在过期时间,过期后会自动删除,如果想持久cookie 需要设置cookie有效期 setMaxAge(int)int代表秒
 设置了持久的cookie:Set-Cookie: lastvisit=1350617047968; Expires=Fri, 19-Oct-2012 04:24:07 GMT
 4、cookie访问有效路径
 携带cookie 必须path一致
 默认 http://localhost/day7/visit 生成cookie ---- 默认path 就是/day7/ (visit资源所在目录就是默认path)
 * 只有在访问http://localhost/day7/目录和子目录情况下 才会携带cookie信息
 path也可以手动指定 setPath(String)
  例:newLastVisitCookie.setPath("/abc");
 抓取信息:
 Set-Cookie: lastvisit=1350617427109; Expires=Fri, 19-Oct-2012 04:30:27 GMT; Path=/abc
 再次访问 :http://localhost/day7/visit 不会携带cookie信息,因为path不符合

 解决的最简单方案:设置setPath("/");
 Set-Cookie: lastvisit=1350617644468; Expires=Fri, 19-Oct-2012 04:34:04 GMT; Path=/

 5、cookie有效域名
 setDomain 设置cookie有效域名 ---- 例如:setDomain(".itcast.cn"); 传智播客网站的cookie
 * 小知识:
 如果访问A 网站 ,结果生成B网站 Cookie  ----- 就叫第三方cookie (是恶意cookie)
 如果访问A 网站, 是生成A网站Cookie ----- 是第一方Cookie(安全cookie )
 6、删除持久cookie
 删除持久cookie,可以将cookie最大时效设为0,注意,删除cookie时,path必须一致,否则不会删除
session:
 Session 将用户相关信息保存服务器端,服务器会为每个浏览器创建单独Session对象,每个用户各自数据     存各自浏览器对应Session对象中。不同用户 获取到各自浏览器对应Session 保存数据。

Session对象创建 : request.getSession(); 获得session对象

服务器端会为每个浏览器创建单独Session对象,
 Session的原理当产生一个会话时会对应的产生一个唯一的session的id此id一般是存储在cookie中这个cookie就叫会话cookie
Session通过cookie传输过来的jsessionid获取到session的唯一id用来在服务器端查找对应Session对象
问题:如何实现关掉浏览器后,再开浏览器,上次购买的商品还在。
 1、第一次访问 响应将session的id存储到会话cookie中 Set-Cookie: JSESSIONID=7B67782D880A07ADADA64A312ED23D72; Path=/day7
 2、第二次访问 请求会带着会话过来Cookie: JSESSIONID=7B67782D880A07ADADA64A312ED23D72
 如果想实现关掉浏览器后,再开浏览器,上次购买的商品还在,解决方案:将jsessionid 信息保存持久会话Cookie中
   Cookie cookie = new Cookie("JSESSIONID", session.getId());
   cookie.setMaxAge(60 * 60 * 24);
   cookie.setPath("/");
   response.addCookie(cookie);

浏览器禁用Cookie之后,Session还能否使用 ?
 可以的
 * 如果禁用浏览器Cookie之后,无法保存会话cookie中jsession id ,无法完成Session追踪
 这时通过程序生成URL (携带jsessionid的URL ) : URL重写
 使用URL重写,必须该网站所有路径都使用URL重写 ,实际应用中很少采用

关于Session的生命周期:
 1、Session对象创建 : request.getSession() 执行时 (当前会话第一次执行)
 2、session对象何时销毁?
 浏览器如果关闭后,Session对象是不是就销毁了?
 答案:不是,Session保存在服务器端,和浏览器是否关闭没有关系
 关闭浏览器时删除会话cookie,丢失jsessionid,没有jsession无法找到服务器端对应Session

三种销毁Session对象情况:
 1、不正常关闭服务器(正常关闭服务器Session信息会被序列化到硬盘中 保存tomcat/work目录)
 2、Session过期 默认过期时间在tomcat/conf/web.xml 配置
  <session-config>
    <session-timeout>30</session-timeout>
  </session-config>
 * 默认Session对象过期时间30分钟 (连续不使用Session对象时间)
 * 也可以手动设置 setMaxInactiveInterval(int interval) 
 3、在程序中执行 session.invalidate() 手动销毁Session对象

问题:session.removeAttribute() 和 session.invalidate()区别 ?
 session.removeAttribute() 删除当前Session对象中一个属性值
 session.invalidate() 销毁当前Session对象,删除所有属性
Servlet三种数据访问范围:ServletContext 、HttpSession、HttpServletRequest
 1、保存ServletContext数据 ,在服务器关闭时才会删除,生命周期最长,全局都可以访问 (最少使用)
 * 网站访问次数、全局数据库连接池 需要保存ServletContext
 2、保存HttpSession数据 ,三种情况下丢失 ,主要保存用户相关数据 (不建议存放大规模数据)
 * 用户登录信息、购物信息 保存HttpSession
 3、保存HttpServletRequest,当前请求发生时产生,响应结束数据立刻释放 (生命周期最短,最建议使用)
 * Servlet获得数据处理结果,通过请求转发 传递信息给JSP显示

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值