JavaWeb会话技术-cookie-jsp-session

JavaWeb会话技术-cookie-jsp-session,第1张

JavaWeb会话技术-cookie-jsp-session

JavaWeb会话技术

会话

一次会话 功能方式cookie

概念快速使用

使用步骤 使用原理cookie细节

一次是否可以发送多个cookiecookie在浏览器中的保存时长

默认情况持久化存储 cookie能不能存中文cookie获取范围

假设一个tomcat服务器中部署了多个项目,cookie能否共享?不同tomcat服务器间cookie共享问题? cookie的特点 JSP学习

概念原理JSP脚本:JSP定义Java代码的方式JSP内置对象

jsp总共有9个内置对象:response.getWriter()和out的区别: session

概念快速入门session原理细节

客户端关闭,服务器不关闭,两次获取的session是同一个吗?客户端不关闭,服务器关闭后,两次获取的session是同一个吗?

session的钝化session的活化 session 失效时间特点session与cookie的区别

会话

一次会话中包含多次请求和响应

一次会话

浏览器第一次给服务器资源发送请求,会话建立,直至一方断开为止

功能

在一次会话的范围内,共享数据

方式
    客户端会话技术:cookie服务器端会话技术:session
cookie 概念

客户端会话技术,将数据保存在客户端

快速使用 使用步骤
    创建cookie对象,绑定数据:new cookie(“msg”, “hellocookie”)发送cookie对象:Response.addcookie©获取cookie,拿到数据:cookie[] cookies = req.getcookies();
@WebServlet("/cookieDemo1")
public class cookieDemo1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1 创建cookie对象
        cookie c = new cookie("msg", "hellocookie");
        //2 发送cookie
        resp.addcookie(c);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req,resp);
    }
}
@WebServlet("/cookieDemo2")
public class cookieDemo2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       //3 获取cookie
        cookie[] cookies = req.getcookies();
        //4 便利cookies
        if (cookies != null){
            for (cookie cookie : cookies) {
                String name = cookie.getName();
                String value = cookie.getValue();
                System.out.println(name+":"+value);
            }
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req,resp);
    }
}
使用原理

基于响应头set-cookie和请求头cookie实现的

cookie细节 一次是否可以发送多个cookie

可以创建多个cookie对象,经response多次调用addcookie方法即可

cookie在浏览器中的保存时长 默认情况

浏览器关闭后,cookie数据会销毁

持久化存储

setMaxAge(int seconds)

    正数:持久将将cookie数据写到硬盘的文件中,持续化存储,seconds:存活时间负数:默认值零:删除cookie信息
cookie能不能存中文

tomcat8之前不能直接存中文:中文数据转码–一般采用URL编码
tomcat8之后可以直接存中文

cookie获取范围 假设一个tomcat服务器中部署了多个项目,cookie能否共享?

默认情况下cookie不能共享
setPath(String path):设置cookie的获取范围,默认是当前的虚拟目录
如果要共享,可以将path设置未"/"

不同tomcat服务器间cookie共享问题?

setDomain(String path):如果设置他的一级域名相同
setDomain(".baidu.com"),那么tieba.baidu.com与news.baidu.com中的cookie可以共享

cookie的特点

cookie存储数据在客户端浏览器
浏览器对于单个cookie的大小有限制,对于同一域名下总cookie的数量有限制
作用:

    cookie存储少量的不太敏感的数据在不登录的情况下来完成服务器对客户端的登录
JSP学习 概念

Java服务器端页面:一个特殊的页面,既可以定义html标签,又可以定义Java代码;用于简化书写

原理
    服务器解析请求消息,找对应的jsp文件找到后将对饮的jsp文件转化为.java文件编译.java文件,生成.class文件由字节码文件提供访问
JSP脚本:JSP定义Java代码的方式
    <% 代码%>:定义的Java代码,在service方法中。service中可以定义啥,该脚本中就可以定义啥<%! 代码%>:定义的Java代码,在jsp转化后的Java类的成员位置。<%= 代码%>:定义的Java代码,会输出到页面上。输出语句定义的啥,前端展示的就是啥
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

  
    $Title$
  
  
  $END$
  <%
    System.out.println("hello jsp");
    int i = 5;
  %>
  <%!
    int i = 3;
  %>
  <%=
    i
  %>
  hello ~jsp
  


JSP内置对象

在jsp中不用定义的对象,可以直接使用的对象为内置对象。只要service方法对这些对象声明,可以直接使用

jsp总共有9个内置对象:

request、response、out:字符输出流对象,可以将数据输出到页面上。和response.getWriter()

response.getWriter()和out的区别:

out定义到哪,就在那显示;response.getWriter()不管在哪都会在最上面;tomcat服务器真正给客户端做出相应的时候,会先找response缓冲区数据,再找out缓冲区数据。

session 概念

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

快速入门
    获取session对象‘
    HttpSession session = req.getSession();使用session对象
    Object getAtrribute(String name )
    void setAtrribute(String name,Object value)
    void removeAtrribute(String name )
@WebServlet("/sessionDemo1")
public class sessionDemo1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        // 1 获取session
        HttpSession session = req.getSession();
        // 2 设置数据
        session.setAttribute("msg","hello session");
    }
}

@WebServlet("/sessionDemo2")
public class sessionDemo2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        // 1 获取session
        HttpSession session = req.getSession();
        //2 获取session值
        Object msg = session.getAttribute("msg");
        System.out.println(msg);
    }
}
session原理

session依赖于cookie实现的

细节 客户端关闭,服务器不关闭,两次获取的session是同一个吗?

默认情况下。不是。
如果需要相同,则可以创建cookie,键值为JSESSIONID,设置最大存储时间,让cookie持久化保存

// 1 获取session
        HttpSession session = req.getSession();
        // 客户端关闭后,session相同
        cookie jsessionid = new cookie("JSESSIONID", session.getId());
        jsessionid.setMaxAge(60*60);
        resp.addcookie(jsessionid);
        //2 获取session值
        Object msg = session.getAttribute("msg");
        System.out.println(msg);
客户端不关闭,服务器关闭后,两次获取的session是同一个吗?

不是同一个,但是要确保数据不丢失

session的钝化

在服务器正常关闭之前,将session对象序列化到硬盘上

session的活化

在服务器启动后,将session文件转化为内存中的session对象即可。

session 失效时间
    服务器关闭session对象调用invalidate()方法session默认失效时间是30分钟
    选择性配置修改
特点
    session用于一次会话的多次请求的数据,存在服务器端session可以存储任意类型,任意大小的数据
session与cookie的区别
    session存储数据在服务器端,cookie在客户端session没有数据大小限制,cookie有大小限制session相对安全,cookie相对不安全

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5708532.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存