Servlet (第二部分 p1-p6)
1. 会话
客户端 服务端(B/S)
-
服务端给客户端又给信件,客户端下次访问服务端带上信件就可以:cookie
-
服务器登记过,你过来了,下次来的时候我匹配你: session
cookie
- 客户端技术(响应,请求)
session
服务端技术,利用这个技术,我们可以保存用户的会话信息,我们可以把信息或者数据放在session中
常见场景
- 网站登录之后,你下次不用再登录了,第二次访问直接就上去了。记住密码
2. Cookie
免登录
有一个专门操作Cookie的类 javax.servlet.http.Cookie。随着服务器端的响应发送给客户端,保存在浏览器。当下次再访问服务器时把Cookie再带回服务器。
概念: 客户端会话技术,将数据保存到客户端,以后每次请求都携带Cookie数据进行访问
-
从请求中拿到cookie信息
-
服务器响应给客户端cookie
cookie:一般会保存在本地的用户目录下/AppData下
一个网站cookie是否存在上限?
- 一个cookie只能保存一个信息
- 一个web站点可以给浏览器发送多个cookie,每个web站点(同一个域名下)最多存放20个cookie( 不同的浏览器会有所不同)
- cookie大小有限制4kb
- 浏览器上限是300个cookie
删除cookie
- 不设置有效期,关闭浏览器,自动失效
- 设置有效期时间为0
Cookie是浏览器提供的一种技术,通过服务器的程序能将一些只须
保存在客户端,或者在客户端进行处理的数据,放在本地的计算机
上,不需要通过网络传输,因而提高网页处理的效率,并且能够减
少服务器的负载,但是由于 Cookie 是服务器端保存在客户端的信
息, 所以其安全性也是很差的。
Cookie 的格式:键值对用“=”链接,多个键值对间通过“;”隔开。
2.1 Cookie的创建和发送
//创建Cookie对象
Cookie cookie = new Cookie("name","zs");
//发送cookie对象
resp.addCookie(cookie);
2.2 Cookie的获取
服务器端只提供了一个 getCookies()的方法
// 获取Cookie数组
Cookie[] cookies = req.getCookies();
// 判断数组是否为空
if (cookies != null && cookies.length > 0) {
//遍历
for (Cookie cookie : cookies){
System.out.println(cookie.getName());
System.out.println(cookie.getValue());
}
}
2.3 Cookie设置到期时间
默认情况下,当浏览器关闭后,Cookie数据被销毁
手动设定 cookie 的有效时间(通过到期时间计算),通过 setMaxAge(int time);方法设定 cookie 的最大有效时间,以秒为单位。
-
负整数 若为负数,表示不存储该 cookie。默认情况
cookie 的 maxAge 属性的默认值就是-1,表示只在浏览器内存中存活,一旦关闭浏览器窗口,那么 cookie 就会消失。
-
正整数 若大于 0 的整数,表示存储的秒数。
表示 cookie 对象可存活指定的秒数。当生命大于 0 时,浏览器会把 Cookie 保存到硬盘上,就算关闭浏览器,就算重启客户端电脑,cookie 也会存活相应的时间。
-
零 若为 0,表示删除该 cookie。
//cookie 生命等于 0 是一个特殊的值,它表示 cookie 被作废!也就是说,如果原来浏览器已经保存了这个 Cookie,那么可以通过 Cookie 的 setMaxAge(0)来删除这个 Cookie。 无论是在浏览器内存中,还是在客户端硬盘上都会删除这个 Cookie。
2.4 Cookie的注意点
- Cookie保存在当前浏览器中。
- Cookie存中文问题 通过URLEncoder.encode()来进行编码,获取时通过URLDecoder.decode()来进行解码。
- 同名Cookie问题 服务器端发送重复的Cookie那么会覆盖原有的Cookie。
- 浏览器存放Cookie的数量是有上限的.Cookie存储的大小是有效的,一般不超过4kb
2.5 Cookie的路径
Cookie的setPath设置cookie的路径,这个路径直接决定服务器的
请求是否会从浏览器中加载某些cookie。
情景一:当前服务器下任何项目的任意资源都可获取Cookie对象,设置路径为"/"
情景二:当前项目下的资源可获取Cookie对象 (默认不设置Cookie的path)
情景三:指定项目下的资源可获取Cookie对象
情景四:指定目录下的资源可获取Cookie对象
3. HttpSession对象
HttpSession对象是 javax.servlet.http.HttpSession 的实例
(1) Session用于存储一次会话的多次请求数据,存在服务器端,一次会话只有一个session对象
(2) Session可以存储任意类型,任意大小的数据。
(3) Session 会话中,我们经常用来保存用户登录之后的信息
Session 的作用就是为了标识一次会话,或者说确认一个用户;并
且在一次会话(一个用户的多次请求)期间共享数据。我们可以通
过 request.getSession()方法,来获取当前会话的 session 对象。
// 如果session对象存在,则获取;如果session对象不存在,则创建
HttpSession session = request.getSession();
/**
* Session对象
* session对象的获取
* request.getSession()
* 当获取session对象时,会先判断session对象是否存在,如果存在,则获取session对象;如果不存在,则创建session对象
* 常用方法
* 获取session的会话标识符 getId()
* 获取session的创建时间 getCreationTime()
* 获取最后一次访问时间 getLastAccessedTime()
* 判断是否是新的session对象 isNew()
*/
@WebServlet("/ser01")
public class Session01 extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {