Cookie对象 ,Session对象,ServletContext对象

Cookie对象

	cookie是一种客户端技术(浏览器技术),由服务器创建,响应给客户端的技术。数据存储在浏览器中
	cookie作用:
		数据不需要经过网络传输,可以提高网页效率,减轻服务器的负载。
		cookie不建议存放大量数据,存放大小在4k左右。一般用来储存不需要访问后台,只有浏览器需要的数据。

	Cookie是一种浏览器技术,相对而言,不安全。

1、Cookie的创建和发送
	cookie的创建
		Cookie cookie = new Cookie("键","值");
	cookie的发送
		response.addCookie(cookie对象);


     创建Cookie对象
	Cookie cookie = new Cookie("uname","zhangsan");
	 响应Cookie对象给浏览器
	response.addCookie(cookie);
	
	
	// 创建Cookie对象
	Cookie cookie02 = new Cookie("uname2","lisi");
	// 响应Cookie对象给浏览器
	response.addCookie(cookie02);



2、Cookie的获取
	获取cookie的数组
	Cookie[] cookies = request.getCookies();
		通过遍历,获取具体的cookie对象;在通过cookie的键得到对应的值
		
      // Cookie的获取
	Cookie[] cookies = request.getCookies();
	// 非空判断
	if (cookies != null && cookies.length > 0) {
		for (Cookie cookie : cookies) {
			// 获取cookie的名称
			String name = cookie.getName();
			// 获取cookie的值
			String value = cookie.getValue();
			System.out.println(name +"=" + value);
			// 如果出现中文,获取时通过 URLDecoder.decode()来进行解码
			System.out.println(URLDecoder.decode(name)+"="+URLDecoder.decode(value));
			
			// 获取指定的cookie对象
			if("uname".equals(name)) {
				System.out.println("Cookie的值为:" + value);
			}
		}
	}


3、到期时间的设置
	到期时间,到期时间用来指定该 cookie 何时失效。默认为当前浏览器关闭即失效。
	我们可以手动设定 cookie 的有效时间(通过到期时间计算),通过 setMaxAge(int time);方法设定 cookie 的最大有效时间,以秒为单位。
	
	大于 0 的整数,表示存储的秒数;
	若为负数,则表示不存储该 cookie;
	若为 0,则删 除该 cookie。

	负整数:(默认-1)
		cookie 的 maxAge 属性的默认值就是-1,表示只在浏览器内存中存活,一旦关闭浏览器窗口,那么 cookie 就会消失。
	正整数:
		表示 cookie 对象可存活指定的秒数。
		当生命大于 0 时,浏览器会把 Cookie 保存到硬盘上,就算关闭浏览器,就算重启客户端电脑,cookie 也会存活相应的时间。
	零:
		cookie 生命等于 0 是一个特殊的值,它表示 cookie 被作废!
		也就是说,如果原来浏览器已经保存了这个 Cookie,那么可以通过 Cookie 的 setMaxAge(0)来删除这个 Cookie。 
		无论是在浏览器内存中,还是在客户端硬盘上都会删除这个 Cookie。
		
4、Cookie的注意点
	1、Cookie不跨电脑和浏览器。
	2、Cookie不支持中文
		如果有中文则通过 URLEncoder.encode()来进行编码,获取时通过 URLDecoder.decode()来进行解码。
	3、不同的浏览器对Cookie也有限定,Cookie的存储有是上限的。Cookie是存储在客户端(浏览器)的,而且一般是由服务器端创建和设定。

5、Cookie的覆盖
	在相同域名(domain)下和同路径(path)下,如果出现相同name的cookie对象,后面的cookie对象会将前面的覆盖

6、Cookie的路径
	只有访问的路径中包含cookie的path的值,才能访问到该cookie对象
	
	设置当前服务器下所有项目都能访问到的cookie对象
	cookie.setPath("/");

Session

  •  1、Session的概述
     	session是一次会话,在会话中可以包含多个请求。在会话中数据共享。
     2、Session的获取
     	HttpSession session = request.getSession();
     	如果session不存在,则创建一个新的session;如果session存在,或获取存在的session;
     3、Session的信息
     	获取会话标识符			session.getId();
     	获取创建时间			session.getCreationTime()
     	获取最后一次访问时间		session.getLastAccessedTime()
     	是否是新的会话			session.isNew()
     	
     4、会话标识 JSESSIONID (cookie对象)
     	当每一次请求到达服务器时,如果使用了session对象,都会判断客户端是否回传了一个JSESSIONID的cookie对象
     		如果没有回传,则服务器会新建一次sessionId,并响应给客户端,浏览器会存一个相同值的JSESSIONID
     		如果回传了,则会判断回传的值是否和后台的值一致
     			如果一致,则表示是同一个会话,数据都可共享
     			如果不一致,则服务器会新建一次sessionId,并响应给客户端,浏览器会存一个相同值的JSESSIONID
     			
     	JSESSIONID 的 cookie,这是一个比较特殊的 cookie。
     	当用户请求服务器时,如果访问了 session,则服务器会创建一个名为 JSESSIONID,值为获取到的 session(无论是获取到的还是新创建的)的 sessionId 的 cookie 对象,并添加到 response 对象中,响应给客户端,有效时间为关闭浏览器。
     	所以 Session 的底层依赖 Cookie 来实现。
     	
     5、Session作用域
     	Session 用来表示一次会话,在一次会话中数据是可以共享的,这时 session 作为域对象存在
     		通过 setAttribute(name,value);方法向域对象中添加数据
     		通过getAttribute(name) 从域对象中获取数据
     		通过 removeAttribute(name)从域对象中移除数据。
     		
     6、Session的销毁
     	1、默认到期时间(达到最大不活动时间)
     		在指定时间段内没有任何请求,则失效;在时间到期之前有任何请求,则会重新计时;
     		Tomcat服务器默认session的到期时间是30分钟。
     		可以修改默认的到期时间:
     			在Tomcat安装目录下的conf目录中的web.xml中,单位是分钟
     			<session-config>
     		        <session-timeout>30</session-timeout>
     		    </session-config>
     		    
     	2、手动到期时间
     		通过session.setMaxInactiveInterval(int);来设定 session 的最大不活动时间,单位为秒。
     		通过 getMaxInactiveInterval();方法来查看当前 Session 对象的最大不活动时间。
     		
     	3、销毁session对象
     		session.invalidate();
     		
     	4、关闭浏览器
     		session的底层依赖cookie,默认只在浏览器存活,关闭浏览器就失效。
     	
     	5、关闭服务器
     		只要在非正常关闭服务器时,才会销毁session;
     		如果是正常关闭服务器(选择服务器,右键选择stop),session不会失效。
     			服务器会将session钝化(将数据从内存中存到磁盘中),下次访问session时会活化(从磁盘中读取到内存中)
     			在Tomcat安装目录的work目录下,存放一个叫做SESSION.ser的文件
    

ServletContext对象

  •  每一个web应用有且只有一个ServletContext对象,又称为application对象
    
  • 1、获取ServletContext对象
  •  1)通过request对象获取
    
  •  2)通过session对象获取
    
  •  3)通过servletConfig获取
    
  •  4)直接获取
    

// 通过request对象获取
ServletContext servletContext = request.getServletContext();
// 通过session对象获取
ServletContext servletContext2 = request.getSession().getServletContext();
// 通过servletConfig获取
ServletContext servletContext3 = getServletConfig().getServletContext();
// 直接获取
ServletContext servletContext4 = getServletContext();

2、常用方法
	1)获取服务器的版本信息   		getServerInfo()
	2)获取资源在服务器的真实路径	getRealPath();
  • 3、ServletContext域对象
    getAttribute()
    setAttribute()
    removeAttribute()
    范围:在整个应用程序中都有效;服务器关闭即失效。

  • request域对象 一次请求中有效(请求转发有效)
    session域对象 一次会话中有效(请求转发和重定向都有效)
    servletContext对象 整个应用中有效(服务器不关闭就都有效)

     如何选择:
     	尽可能选择小范围的(范围越大,所需要资源越多)
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值