全国咨询热线:400-618-9090

首页技术文章正文

Cookie会话相关知识点

创建时间:2019-01-10 16:21:47.0 来源:黑马程序员

  会话技术 :

  1)会话概念 : 一次会话中包含多次请求和响应.

  *一次会话 :浏览器第一次给服务器资源发送请求,会话建立,知道有一方断开为止

  *会话功能 :再一次会话的范围内的多次请求间 , 共享数据

  *会话可以应用在购物车(Cookie)

  *方式 :

  //客户端会话技术 : Cookie

  //服务器端会话技术 : Seesion

  Cookie

  1)概念 : 客户端会话技术,将数据保存在客户端

  2)快速入门 :

  *使用步骤 :

  1.创建Cookie 对象,绑定数据

  -new Cookie(String name,String value)

  2.发送Cookie对象

  -response.addCookie(Cookie cookie)

  3.获取Cookie,拿到数据

  -Cookie[] ->Request.getCookies()

  *如果服务器创建cookie后并且把cookie回写到浏览器后,cookie或保存在浏览器,后续浏览器发送请求访问该服务器项目时会默认携带之前的cookie

  *cookie 是借助头信息(请求头->cookie,响应头->set-cookie)传递的

  3)实现原理

  *第一次访问服务器的时候,不会携带任何cookie

  *如果服务器接收到请求后回写数据的时候如果添加了cookie后,response会通过响应头setCookie把Cookie以 key=value的形式把cookie 回写到浏览器

  *浏览器在接收到cookie之后,会把cookie保存到本地

  *在浏览器为不关闭的情况下,再次访问原服务器项目时会把cookie携带到服务器,通过请求头(cookie --> key = value)

  4)Cookie的细节

  一次可不可以发送多个Cookie ? --> 可以

  解 : 创建多个Cookie对象,使用response调用多次addcookie方法发送Cookie即可

  特点 : Cookie只有通过response.addCookie()的形式才能把Cookie发送到浏览器

  Cookie在浏览器中保存多长时间?

  (1)默认情况下,当浏览器关闭后,Cookie数据被销毁

  (2)设置cookie生命周期, 持久化存储

  *setMaxAge(int seconds)

  -整数 : 将Cookie数据写到硬盘的文件中,持久化存储,Cookie存活时间

  -负数 : 默认值

  -0 : 删除Cookie信息

  Cookie能不能存中文呢?不管支不支持都不要去存中文

  (1)在tomcat8之前cookie中不能直接存储中文数据

  *需要中文数据转码 --> 一般使用URL编码,

  *如果进行编码,后面必须解码

  (2)在tomcat8之后才支持存储中文

  Cookie获取范围是多大?

  (1)假设在一个tomcat服务器中,部署了多个web项目,name在这些web项目中cookie能不能共享?

  *默认情况下cookie不能共享

  *setPath("/虚拟路径") :设置cookie的获取范围,默认情况下设置当前的虚拟目录

  *如果要共享,则可以将path设置为" / "(代表当前项目的根路径)

  (2)不同的tomcat服务器间cookie共享问题?

  *setDomain(".域名");如果设置一级域名相同,那么两个服务器之间cookie可以共享了

  Cookie的有效路径

  / --> 当前服务器下所有项目共享

  /虚拟路径 --> 当前服务器下当前项目共享

  /虚拟路径/user/b --> 只在 /虚拟路径/user/b 路径下有效

  /虚拟路径/user/ --> /虚拟路径/user/ 下的所有资源有效

  Cookie的特点

  1)cookie 存储数据在客户端浏览器

  2)浏览器对于单个cookie大小有限制(一般4KB左右),以及 对统一域名下的总cookie数量也有限制(20个以内)

  *作用 :

  -->cookie一般用于存储少量的不太敏感的数据到浏览器

  -->在不登录的情况下,完成一个服务器对客户端的身份识别

  JSP(本质是一个servlet) : 执行java代码的html

  1)概念 :

  *Java Server Pages : Java服务器端页面

  *可以理解为 : 一个特殊的页面,其中既可以定义html标签,又可以定义java代码

  *简化书写

  2)原理 :

  *JSP本质上就是一个servlet

  *jsp_Servlet()会把html代码通过内置out对象进行输出到页面从而进行解析

  3)Jsp的脚本 : 定义Java代码的方式

  1.<% java代码%> : 定义的java代码在Service方法中。service可以定义什么,该脚本就可以定义什么

  2.<%!java代码%>:定义的java代码。在jsp转换后的java类的成员位置

  3.<%=java代码%>:定义的java代码会输出到页面上,输出语句中可以顶什么该语句中就可以定义什么

  4)JSP的内置对象

  *在jsp中不需要创建或者获取,可以直接使用的对象

  *jsp一共有9个内置对象

  *out :JspWriter字符输出流.可以将数据输出到页面上reponsegetWriter()类似

  *reponse :

  *request :

  *application : SelectContext

  *session : httpSession

  *pageContext :PageContext

  *config :ServletConfig

  *page : Object 当前页面

  *exception :Throwable



作者:黑马程序员JavaEE培训学院
首发:http://java.itheima.com/

在线咨询 我要报名