day10_会话管理

Servlet编程:
			1)Servlet的生命周期:
			构造方法:servlet对象创建时调用。只调用1次。
			init方法(有参):servlet对象创建完之后调用,只调用1次。
			service方法:每次发出请求时调用,调用n次。
			destory方法: servlet对象销毁时调用。项目重新部署或服务器停止,sevlet对象会销毁。

			 2)ServletContext	对象
				5大作用:
				a)获取web上下文路径。  
					context.getContextPath();	  简化版本: request.getContextPath();											
				b)获取全局参数
					context.getInitParameter("name");
					context.getInitParameterNames();
	
				c)作为域对象使用
					保存数据: context.setAttribute("name",Object);
					获取数据: context.getAttribute("name")
					移除数据: context.removeAttribute("name")

				d)用于转发
					  context.getRequestDispatcher("路径").forward(request,response);
					  //简化版本
					  request.getRequestDispatcher("路径").forward(request,response);
				
				e)读取web资源文件
					  context.getRealPath("路径");   得到资源文件的绝对路径
					  context.getResourceAsStream("路径")  得到资源,返回输入流
					  context.getResource("路径") 得到资源,返回URL

		会话管理
1 会话管理入门
		1.1 生活中的会话
		我: 你最近有坐船吗?
		小明: 有啊,昨天才刚坐
		我: 这样啊!!前几天有船沉了,你没事吧?
		小明: 不是吧?
		1.2 程序中的会话
		一次会话: 打开浏览器 -> 访问服务器  -> 关闭浏览器

		场景1: 
				打开浏览器- > 访问网站 -> 登录页面 -> 输入用户名和密码(保存会话信息)
				 -> 提交到后台 -> 校验成功
								
				-> 返回用户首页(看到当前登录的用户名信息。。。)(取出会话信息)-》 关闭浏览器
		 
		
			   使用什么技术保存这些会话信息????


		场景2:
			打开浏览器 -> 浏览购物网站 -> 点击“购买” (把商品信息保存下来)->  放入“购物车” -> 关闭浏览器


			打开浏览器- > 浏览器购物网站- > 查看"购物车" -> 看到之前的商品信息- >付款购买-关闭浏览器

			  使用什么技术保存这些商品信息?

				会话管理: 管理浏览器与服务器之间的会话过程中产生的会话数据!!!!


		思考:
				可以使用域对象来保存会话信息????

				context域:
					  登录: 登录页面( 张三  context.setAttribute("name","张三") ) 
							-> 访问用户主页(context.getAttribute("name"))
					使用context域会覆盖之前的数据

				request域:
					登录: 登录页面( 张三  request.setAttribute("name","张三") )  
							-> 访问用户主页(request.getAttribute("name"))
					使用request域之后,一定要使用转发技术来跳转页面。
		1.3 会话管理技术
		Cookie技术:会话数据保存在浏览器端。
		Session技术: 会话数据保存在服务器端。

2 Cookie技术
		2.1 Cookie技术的使用
			Cookie对象:
					1)创建Cookie对象,用于存储会话数据
						new Cookie(java.lang.String name, java.lang.String value)
					2)修改Cookie对象
						void setPath(java.lang.String uri)  
						void setMaxAge(int expiry)  
						void setValue(java.lang.String newValue)  
					3)把cookie数据发送给浏览器保存
						response.addCookie(cookie);
					4)浏览器带着cookie访问服务器,服务器接收cookie信息
						request.getCookies();
					
		2.2 Cookie技术原理
		1)服务器创建Cookie对象,保存会话数据,把Cookie数据发送给浏览器
			        response.addCookie(cookie);     (响应头:set-cookie: name=jacky)
		2)浏览器获取cookie数据,保存在浏览器缓存区,然后在下次访问服务器时携带cookie数据
					(请求头: cookie: name=jacky)
		3)服务器获取浏览器发送的cookie数据
					request.getCookies();

		2.3 Cookie细节
			1)cookie的数据类型一定是字符串,如果要发送中文,必须先对中文进行URL加密才可以发送。
			2)setPath(path): 修改cookie所在的有效路径。什么是有效路径?
			 如果把该cookie设置到某个有效路径下,然后当浏览器访问这个有效路径的时候,
			 才会携带cookie数据给服务器。
			3)	setMaxAge(整数) : 设置cookie的有效时间
				      正整数: 表示超过了正整数的数值的时间,cookie就会丢失!!(cookie保存浏览器的缓存																				目录)单位:秒
					  负整数: 表示如果浏览器关闭了,cookie就会丢失!(cookie保存浏览器内存) 
					   0    :  表示删除同名的cookie	
			4)cookie可以有多个,但是浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,
			每个Cookie的大小限制为4KB。
		2.4 案例-用户上次访问时间
		2.5 案例-用户浏览过的商品
3 Session技术
		3.1 引入
		Cookie特点:
				1)会话数据放在浏览器端
				2)数据类型只能string,而且有大小限制的
				3)相对数据存放不安全。

		Session特点:
				1)会话数据放在服务器端(服务器内存),占用服务器资源
				2)数据类型任意类型,没有大小限制的。
				3)相对安全

		3.2 Session使用步骤
		HttpSession对象:
					1)创建HttpSession对象,用于保存会话数据
							session = request.getSession();   创建或获取session对象
					2)修改HttpSession对象
							void setMaxInactiveInterval(int interval)  设置session对象的有效时间
							void invalidate()   手动销毁session对象
					3)保存会话数据(作为域对象)
							session.setAttribute("name",Object);  保存数据
							session.getAttribute("name")   获取数据
							session.removeAttribute("name") 删除数据

		3.3 Session原理
			问题: 服务器怎么区分不同的浏览器会话?

前提:	可以从session对象取出数据必须是存放数据的sessinon对象!!!

			1)浏览器1-窗口1(001):  
				//1)创建HttpSession对象
				HttpSession session = request.getSession();  给session对象分配001
				//2)保存会话数据
				session.setAttribute("name", "jacky");
		
			2)浏览器1-窗口2(001):
				//1)得到session对象
				HttpSession session = request.getSession();   搜索001的session对象
				//2)获取会话数据
				String name =  (String)session.getAttribute("name");     可以得到!!

			3)浏览器2(没有标记或不是001)
				//1)得到session对象
				HttpSession session = request.getSession();
				//2)获取会话数据
				String name =  (String)session.getAttribute("name");    不可以得到!

			4)新的浏览器1(没有标记或不是001)
				//1)得到session对象
				HttpSession session = request.getSession();
				//2)获取会话数据
				String name =  (String)session.getAttribute("name");     不可以得到!!
							
		1)服务器创建Session对象,服务器会给这个session对象分配一个唯一的标记JSESSIONID
		2)把JSESSIONID作为Cookie发送给浏览器
		3)浏览器得到JSESSIONID保存下来,在下次访问时携带这个JSESSIONID去访问服务器
		4)服务器得到JSESSIONID,在服务器内存中搜索是否存在指定JSSESSINOID的session对象,
		5)如果找到,则返回这个session对象
		6)如果找不到,可能直接返回null,或者再创建新的session对象。		
					HttpSession session = request.getSession();
			
				结论: 通过JSESSIONID在服务器中查询对应的session对象。

		3.4 Session细节			
				1)setMaxInactiveInterval(秒数): 设置session对象的有效时间
					问题:session在什么销毁?
					注意:不是浏览器关闭,session对象就销毁!!!
					默认情况: 等待30分钟空闲时间,session对象才会销毁。
<!-- 设置全局的session对象的过期时间 (分钟)-->
	<session-config>
		<session-timeout>1</session-timeout>
	</session-config>
			
				2)可以让JSESSIONID不会随着浏览器关闭而丢失!!!!
					
/**
		 * 设置JSESSIONID的时间,不会随着浏览器关闭而丢失!
		 */
		Cookie c = new Cookie("JSESSIONID",session.getId());
		c.setMaxAge(1*30*24*60*60);//1个月
		response.addCookie(c);

				3)直接手动销毁sessino对象
					invalidate();
					
		4)  创建或得到session对象
	request.getSession() / request.getSession(true): 创建或得到session对象,查询session对象,
    如果没有sessino对象,则	创建新的session对象
	request.getSession(false)          得到session对象。 查询session对象,如果session对象,直接返回null
			
		3.5 案例-用户登录

	总结:
			1)会话管理: 浏览器与服务器之间会话过程中产生的会话数据
			
			2)Cookie技术:会话数据保存在浏览器
			   核心的API:
					   a)创建Cookie对象
							Cookie c = new Cookie("name","value")	
						b)发送给浏览器
							respone.addCookie(c);
						c)浏览器发送cookie给服务器,服务器接收cookie	
							Cookie[] cookies = request.getCookies()

			3) Session技术: 会话数据保存在服务器(内存中)
				核心API:			
						a)创建或得到HttpSession对象
							HttpSession session = request.getSession(true)  创建或得到
							HttpSession session = request.getSession(false)  得到	
						b)使用HttpSession保存和获取,删除会话数据
							session.setAttribure("name",Object);
						    session.getAttribute("name");
						    session.removeAttrbute("name");

		servlet总结:
				第一天:
					tomcat服务器:
						  1)tomcat服务器如何使用‘
						  2)  web应用如何写
						  3) web应用如何部署?	
						
				第二天: 
					http协议:
					http请求:
							HttpServletRequest对象: 获取请求数据
					http响应:
							HttpServletResponse对象: 设置响应数据

				第三天:
					servlet编程:
						1)servlet生命周期
						2)ServletConfig对象: 获取初始户参数
						3)ServletContext对象: 5大作用

				第四天:
					会话管理
						Cookie对象
						HttpSession对象

L3dlaXhpbl80NDU2NTc4NA==,size_16,color_FFFFFF,t_70)

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44565784/article/details/86538143