标签:service 最大 amp 直接 date iter obj 客户端浏览器 会话
# 一次会话中包含多次请求和响应
* 一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止
# 功能:在一次会话的范围内的多次请求间,共享数据
# 方式:
* 客户端会话技术:Cookie
* 服务器端会话技术:Session
# 概念:客户端会话技术,将数据保存到客户端
# 使用步骤:
* 创建 Cookie对象,绑定数据:new Cookie(String name, String value)
* 发送 Cookie对象:response.addCookie(Cookie cookie)
* 获取 Cookie,拿到数据:Cookie[ ] request.getCookies()
# 实现原理:
* 基于响应头 set-cookie 和 请求头 cookie 实现
# 一次可不可以发送多个 Cookie?
* 可以,创建多个 Cookie对象,使用 response调用多次 addCookie() 方法发送即可
# Cookie在浏览器中保存多长时间?
* 默认情况下,当浏览器关闭后,Cookie数据被销毁
* 持久化存储:setMaxAge(int seconds)
* 正数:将 Cookie数据写到硬盘的文件中,持久化存储。并且指定 Cookie存活时间,时间到后,自动失效
* 负数:默认值
* 零:删除 Cookie信息
# Cookie能不能存储中文?
* 在 Tomcat 8 之前 Cookie中不能直接存储中文数据
* 需要将中文书籍转码,一般采用 URL编码 (%3)
* 在 Tomcat 8 之后,Cookie支持中文数据,但是不支持特殊字符,建议还是使用URL编码存储和解析
# Cookie共享问题
1)同一个 Tomcat服务器中,不同 web项目间,Cookie共享问题?
* 默认情况下 Cookie不能共享
* setPath(String path):设置 Cookie的获取范围,默认情况下位当前的虚拟目录
* 如果要共享,则可以将 path设置为 "/"
2)不同的 Tomcat服务器间,Cookie共享问题
* setDomain(String path):如果设置一级域名相同,那么多个服务器之间 Cookie可以共享
* 例如:setDomain(".baidu.com"),那么 tieba.baidu.com 和 news.baidu.com 中的 cookie可以共享
# 特点:
* Cookie存储数据在客户端浏览器
* 浏览器对于单个 Cookie 的大小有限制(4kb)以及对同一个域名下的总的 Cookie数量也有限制(20个)
# 作用:
1)Cookie一般用于存储少量的不太敏感的数据
2)在不登录的情况下,完成服务器对客户端的身份识别
# 需求:
1)如果是第一次访问,则提示:您好,欢迎您的首次访问
2)如果不是第一次访问,则提示:欢迎回来,您上次的访问时间为:${时间字符串}$
# 分析:
1)可以采用 Cookie来完成
2)在服务器中的 Servlet判断是否有一个名为 lastTime 的 Cookie
* 有:不是第一次访问
① 响应数据:欢迎回来:您上次访问的时间为:2020年8月31日16:37:40
② 写回 Cookie:lastTime = 2020年8月31日16:40:00
* 没有:是第一次访问
① 响应数据:您好,欢迎首次访问
② 写回 Cookie:2020年8月31日16:37:40
# 代码实现
# 概念:Java Server Pages:Java服务器端页面
* 一个特殊的页面,其中既可以定义 HTML标签,也可以定义 Java代码
* 可以简化书写
# 原理:JSP本质上就是一个 Servlet
# JSP脚本:JSP定义代码的方式
* <% 代码 %>:定义的 Java代码 在service()方法中。
* <%! 代码 %>:定义的 Java代码 在JSP跳转后的 Java类的成员位置
* <%= 代码 %>:定义的 Java代码 会输出到页面上
# JSP的内置对象
* 在 JSP页面中不需要获取和创建对象,可以直接使用
* 重要的 3个对象:
1)request
2)response
3)out:字符输出流对象,可以将数据输出到页面上,也 response.getWriter() 类型
* 区别:在 Tomcat服务器给客户端作出响应前,会先找 response缓冲区数据,再找 out缓冲区数据,因此 getWriter() 数据输出永远在 out 前
# 案例:改造 Cookie案例
# 概念:服务器端会话技术,再一次会话的多次请求间共享数据,将数据保存在服务器端的对象中
# HttpSession对象
* 获取 HttpSession:HttpSession session = request.getSession()
* 使用 HttpSession:Object getAttribute(String name),void setAttribute(String name, Object value),void removeAttribute(String name)
# 原理:Session的实现是依赖于 Cookie的
# 当客户端关闭后,服务器端不关闭,两次获取的 Session是否为同一个?
* 默认情况下,不是
* 如果要相同,可以创建 Cookie,键为 JSESSIONID,设置最大存活时间,让 Cookie持久化保存
# 客户端不关闭,服务器端关闭后,两次获取的 Session是否为同一个?
* 不是同一个,但是为了数据不丢失,Tomcat自动完成以下工作
* Session的钝化:在服务器正常关闭之前,将 Session对象序列化到硬盘上
* Session的活化:在服务器启动后,将 Session文件转化为内存中的 Session对象
# Session什么时候被销毁?
1)服务器被关闭
2)Session对象调用 invalidate() 方法
3)Session默认失效时间:30分钟
# Session的特点:
* Session用于存储一次会话的多次请求的数据,存在服务器端
* Session可以存储任意类型,任意大小的数据
# Session 和 Cookie的区别:
1)Session存储数据在服务器端,Cookie存储在客户端
2)Session没有数据大小的限制,Cookie有
3)Session数据安全,Cookie相对不安全
# 案例需求:
1)访问带有验证码的登陆页面 login.html
2)用户输入用户名,密码和验证码
* 如果用户名或密码有误,跳转登录页面,提示:用户名或密码有误
* 如果验证码输入有误,跳转登录页面,提示:验证码错误
* 如果全部输入正确,则跳转到主页 success.jsp,提示:${用户名}$,欢迎您
标签:service 最大 amp 直接 date iter obj 客户端浏览器 会话
原文地址:https://www.cnblogs.com/zhaochuming/p/13590538.html