Java学习之servlet04——会话技术,cookie,session,jsp的九大对象

会话技术

  1. 会话:一次会话中包含了多次的请求和响应。一次会话:指浏览器第一次给服务器发送请求,会话建立,直到有一方断开为止。
  2. 功能:在一次会话的范围内的多次请求之间共享数据
    理解:因为请求响应是无状态的,也就是说多次请求响应之间是相互独立的,当需要多次请求和响应共同去完成一件事情的时候,就需要会话技术去实现。
  3. 分类(在Java中):
    • 客户端会话技术:Cookie
    • 服务器端会话技术:Session

Cookie

  1. 概念:将数据保留到客户端的技术

  2. 使用Java简单实现cookie

    • 创建cookie对象,绑定数据
      new Cookie(String name,String value)
    • 发送cookie对象
      response.add(Cookie cookie)
    • 获取cookie,拿到数据
      Cookie[] request.getCookies()
  3. 代码:

    //写了两个类,这个类用来传递信息
    @WebServlet("/cookieDemo1")
    public class CookieDemo1 extends HttpServlet {
           
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
           
    //        1.创建cookie对象
            Cookie c = new Cookie("msg","hello");
    //        2.发送cookie
            resp.addCookie(c);
        }
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
           
            this.doPost(req, resp);
        }
    }
    
    
    //这个类用来获取信息,获取的消息会被打印在控制台
    @WebServlet("/cookieDemo2")
    public class CookieDemo2 extends HttpServlet {
           
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
           
    
    //        3.获取cookie
            Cookie[] cookies = req.getCookies();
    //        遍历cookies
            if (cookies != null){
           
                for (Cookie c:cookies){
           
                    String name = c.getName();
                    String value = c.getValue();
                    System.out.println(name+":"+value);
                }
            }
        }
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
           
            this.doPost(req, resp);
        }
    }
    
  4. 注意:只有在同一浏览器才能拿到cookie

  5. cookie实现的原理(以上面的代码为例子):

    • 客户端访问服务器(CookieDemo1),发送请求
    • 服务器端(CookieDemo1)创建了cookie并添加到了response(response.addCookie(Cookie cookie))中,其实就是在响应的信息中,设置了set-cookie:msg=hello"这么一段信息,set-cookie```是响应头信息,它的值是键值对的形式。
    • 客户端收到响应后,读取到set-cookie的响应头时,将收到的消息存储在客户端浏览器中。
    • 再次向服务器发送请求时:请求消息头中就会有cookie:msg=hello
    • 服务器端通过请求头信息来读取cookie的信息,完成信息的传递。
      6.cookie的细节
    • 一次cookie可以发送多个数据,创建多个cookie,之后调用response.addCookie方法即可。
    • cookie在浏览器中保存的时间:
      • 默认情况下,当浏览器关闭后,cookie数据被销毁(存储在内存中,进程结束,数据销毁)
      • 持久化存储(设置cookie的生命周期)
        setMaxAge(int seconds)
        • 正数:将cookie数据写道硬盘的文件中,持久化存储的,以及这个cookie存在的时间。
        • 负数:默认值
        • 零:删除cookie信息
    • cookie的中文问题
      • 在tomcat8之前 cookie中不能直接存储中文数据(需要将中文数据转码—一般采用URL编码(%E3)
      • 在tomcat8之后,cookie支持中文数据
    • cookie共享问题
      • 假设在一个tomcat服务器中,部署了多个web项目,那么在这些web项目中cookie能不能共享?
        • 默认情况下cookie不能共享
        • setPath(String path):设置cookie的获取范围。默认情况下,设置当前的虚拟目录
        • 如果要在同一个tomcat中所用的web项目都共享cookie,可以设置setPath("/");
      • 不同的tomcat服务器之间的cookie也可以共享
        • setDomain(String path)
        • 如果设置一级域名相同,那么多个服务器之间cookie可以共享
        • 例如:setDomain(".baidu.com"),那么tieba.baidu.com和news.baidu.com中cookie可以共享
  6. cookie的特点和作用

    • cookie存储数据在客户端浏览器
    • 浏览器对于单个cookie的大小有限制(4kb)以及 对同一个域名下的总cookie数量也有限制(20个)
    • 作用:
      • cookie一般用于存储少量的不太敏感的数据
      • 在不登陆的情况下,完成服务器对客户端身份识别

jsp

  1. 概念:Java Server Page:Java服务器端页面,可以理解为一个特殊的页面,其中即可以定义html的b标签,又可以定义Java代码
  2. jsp原理图
    Java学习之servlet04——会话技术,cookie,session,jsp的九大对象_第1张图片
    • jsp本质上就是Servlet,它其实就是将html代码以输出流的方式输出到浏览器上面。
  3. jsp的脚本:jsp定义Java代码的方式
    • <% 代码 %>: 使用该脚本会让代码出现在service方法中,所以在该脚本中能写可以在service方法中出现的任何代码
    • <%! 代码 %>:使用该脚本会让代码出现在jsp转换后的Java类的成员位置中,所以可以用来定义成员变量,静态代码块
    • <%= 代码 %> 使用该脚本定义的Java代码会输出到页面上,所以只要符合输出语句的规范即可
  4. jsp内置对象:
    • 在jsp页面中不需要获取和创建,可以直接使用的对象(实际上是在生成的Java文件中的源码中声明了这些对象,所以才可以直接使用)
    • jsp一共有9个内置对象
      • request
        • 域对象,真实类型是HttpServletRequest,作用是一次请求访问的多个资源
      • response
        • 响应对象,真实类型是HttpServletResponse,响应对象
      • out:字符输出流对象。可以将数据输出到页面上。和response.getWriter()类似
        • jsp输出对象,真实类型 JspWriter ,数据输出到页面上
        • response.getWriter()和out.print()的区别
          Java学习之servlet04——会话技术,cookie,session,jsp的九大对象_第2张图片
        • 以后尽量用out对象来输出
      • session
        • 域对象,真实类型是HttpSession,一次会话的多个请求间的数据共享
      • application
        • 域对象,真实类型是ServletContext,多个用户间共享数据
      • pageContext
        • 域对象,真实类型为pageContext,作用是在当前页面共享数据,除了这个页面就不能共享数据了,同时该对象还可以获取其他八个内置对象
      • config
        • servlet的配置对象
      • page
        • 当前页面(Servlet)对象, 真实类型为Object,相当于this
      • exception
        • 异常对象,真实类型为Throwable
  5. 指令:
    • 作用:用于配置jsp页面,导入资源文件
    • 格式:<%@ 指令名称 属性名1=属性值1 属性名2=属性值2。。。%>
    • 分类:
      • page:配置jsp页面的
        • contentType:等同于response.setContentType()
          • 设置响应体的mime类型以及字符集
          • 设置当前jsp页面的编码(只能是高级的IDE才能生效,如果使用低级工具则则需要设置pageEncoding属性设置当前页面的字符集)
        • import:导包
        • errorPage:当前页面发生异常后,会自动跳转到指定的错误页面
        • isErrorPage:标识当前页面是否是错误页面
      • include:页面包含的。导入页面的资源,使用别的页面,放入当前页面中
      • taglib:导入资源,一般是导入一些标签库,然后就可以使用标签库中的jsp标签,而不只是html标签
        • prefix:定义前缀
        • uri:资源具体的位置
  6. 注释:
    • html注释: 只能知识html代码片段
    • jsp注释:<%-- --%>注释所有的代码,推荐使用jsp注释

Session

  1. 概念:服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务端对象中。HttpSession

  2. 快速入门:

    • 获取HttpSession对象:
      HttpSesssion session = request.getSession();
    • 使用HttpSession对象:
      • Object getAttribute(String name)
      • void setAttribute(String name,Object value)
      • void removeAttribute(String name)
  3. 原理
    Java学习之servlet04——会话技术,cookie,session,jsp的九大对象_第3张图片
    Session的实现是依赖于cookie的

  4. 细节:

    • 当客户端关闭后,服务器不关闭,两次获取的session是不是同一个?
      • 默认情况下,不是
      • 如果需要在服务器端关闭之后,再次获取的session是同一个,则可以创建cookie,将cookie的键命名为JSESSION,值设置为当前session的对象id,设置最大存活时间,让cookie持久化保存
    • 当客户端不关闭,服务器端关闭后,两次获取的session是同一个吗
      • 不是同一个,因为当服务器被关闭后,内存被释放,在内存中的session对象也被释放,所以再次开启服务器之后的session对象不会是同一个
      • 但是为了确保数据不丢失就需要使用一些技术
        • session的钝化:在服务器正常关闭之前,将session对象序列化到硬盘上(序列化)
        • session的活化:在服务器启动之后,将session文件转化为内存中的session对象即可(逆序列化)
    • session什么时候被销毁
      • 服务器关闭
      • session对象调用invalidate()
      • session默认失效时间 30分钟(在tomcat服务器下的conf目录下的web.xml可以配置,标签名为session-config
  5. session的特点

    • session用于存储一次会话的多次请求的间的数据,存放在服务器端
    • session可以存储类型,任意大小的数据
    • session与cookie的区别
      • session存储数据在服务端,cookie在客户端
      • session没有数据大小限制而cookie有
      • session数据相对安全,cookie相对不安全

你可能感兴趣的:(servlet,cookie,jsp,session,java)