1.现在项目中,涌现出了很多优秀的MVC框架,但是控制相关功能底层还是离不开我们的servlet技术,下面让我们共同探讨一下与servlet相关的cookie与session相关技术
1.客户端(浏览器端)保存信息的技术. 2.服务器要求客户端保存一些键值对.浏览器在适当的时机就会发送给服务器. 3.HTTP请求中的体现. 服务器要求浏览器记住: set-cookie:name=tom 浏览器带给服务器: Cookie:name=tom 4.Cookie的细节问题 1>设置最长有效时间(setMaxAge) -1 ==> 浏览器一旦关闭,cookie失效.(cookie保存在浏览器内存中) 0 ==> 发送到浏览器立即失效,通常用于删除已有cookie.(把之前的cookie覆盖.覆盖要保证cookie的 路径和键相同) 正数 ==> 单位是秒. 表示最长有效时间(保存到硬盘中); 2>设置cookie的路径 1>cookie不设置路径,默认路径 取当前路径. 例如: http://localhost:8080/Day10/AServlet ==> http://localhost:8080/Day10 2>cookie 会把键值对带给 自己路径下的所有子路径. 3>设置cookie的域(了解) 1>跨主机共享cookie的应用 music.baidu.com zhidao.baidu.com map.baidu.com 以上主机,想要共享cookie,该cookie如何设置? 1.设置cookie的domain为".baidu.com" 2.设置cookie的path为"/" 2.session相关技术 1.服务器端保存数据的技术. 2.当浏览器连接到服务器的时候, 如果发现浏览器没有携带sessionID过来.服务器会在内存中开辟一个空间(session),并把sessionID(session的唯一标示)以cookie 的方式发送给浏览器.下次浏览器再来访问的时候,会携带sessionID, 服务器发现 有sessionID 就可以找到在内存中对应的session. 3.如何操作? 1>获得session, request.getSession(); 2>session中的常见操作 4个常用方法 setAttribute getAttribute removeAttribute getAttributeNames 3>其他方法 inValidate() 立即让session失效. 4.常见问题. 1>session标示一次会话. 会话的范围? 1.session的开始 ==> 第一次访问服务器. 2.结束 第一: 浏览器关闭.(保存sessionID的cookie默认有效时间是-1) 第二: 超过session设置的有效时间.默认30分钟. web.xml => <session-config><sessiont-timeout> 2>session能不能跨项目? 不能跨项目. 3>session在一个项目中可以对项目中的任意路径共享数据吗? 保存sessionID的cookie的路径是 项目==> /Day10 servlet技术中的3大域. application==>servletContext : 范围是整个项目,只有一个servletContext对象, 所有servlet的组件都能访问到. 应用: 保存全局的配置. session ==> HttpSession : 范围是一次会话. 一个项目中存在几个Session呢? 一个没有保存sessionID的浏览器连接到服务器就会开启一个会话.有多少个浏览器访问就至少有多少个session. 应用:购物车,验证码,登录信息 request ==> HttpServletRequest : 范围是一次请求之内. 存在几个request域?当前正在处理的请求有多少个. 应用:转发中共享数据. servlet技术3大组件 1.servlet 2.filter 过滤器 *.do *.action 3.listener 监听器