栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【JavaWeb】Servlet的应用全面讲解(三)cookie和session

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【JavaWeb】Servlet的应用全面讲解(三)cookie和session

【JavaWeb】Servlet的应用全面讲解(三)cookie和session

一、cookie

(一)cookie的创建和发送(二)cookie的获取(三)cookie的到期时间

1. 到期时间的表示2. 代码演示 (四)cookie中文乱码问题、以及如何重新设置

1. 说明2. 代码演示 (五)指定路径获取cookie

1. 说明2. 代码演示 二、Session

(一)session对象的获取和访问

1. 说明2.代码演示 (二)session域对象的应用

1. 说明2. 代码演示 session对象的过期和销毁

1. 说明2. 代码演示 End

HTTP 协议是一种无状态协议,即每次服务端接收到客户端的请求时,都是一个全新的请求,服务器并不知道客户端的历史请求记录;Session 和 cookie 的主要目的就是为了弥补 HTTP 的无状态特性。

一、cookie

cookie,有时也用其复数形式cookies,指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密)

(一)cookie的创建和发送
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //cookie的创建
        cookie cookie = new cookie("name","admin");
        //发送(响应) cookie对象
        resp.addcookie(cookie);
    }
(二)cookie的获取

将会返回一个cookie数组,供获取cookie数据

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取cookie数组
        cookie[] cookies = req.getcookies();
        //判断cookie是否为空
        if(cookies != null && cookies.length>0){
            //遍历cookie数组
            for (cookie cookie : cookies){
                //获取cookue的名称和值
                String name = cookie.getName();
                String value = cookie.getValue();
                System.out.println("名称:"+name+" 值:"+value);
            }
        }
    }
(三)cookie的到期时间 1. 到期时间的表示
 
2. 代码演示 
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        

        cookie cookie = new cookie("uname1","zhangsan");
        cookie.setMaxAge(-1); //关闭浏览器失效
        resp.addcookie(cookie);

        

        cookie cookie2 = new cookie("uname2","lisi");
        cookie.setMaxAge(30); //存活30s
        resp.addcookie(cookie2);

        

        cookie cookie3 = new cookie("uname3","wangwu");
        cookie.setMaxAge(0); //删除cookie
        resp.addcookie(cookie3);
    }
(四)cookie中文乱码问题、以及如何重新设置 1. 说明
 
2. 代码演示 
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        
        String name = "姓名";
        String value = "张三";

        //将中文通过URLEncoder进行编码
        name = URLEncoder.encode(name);
        value = URLEncoder.encode(value);

        //创建cookie对象
        cookie cookie = new cookie(name,value);
        //响应cookie
        resp.addcookie(cookie);

        //获取cookie时,通过URLDecoder进行解码
        cookie[] cookies = req.getcookies();
        //判断非空
        if(cookies != null&& cookies.length>0){
            //遍历
            for(cookie cook : cookies){
                //解码
                System.out.println(URLDecoder.decode(cook.getName()));
                System.out.println(URLDecoder.decode(cook.getValue()));
            }
        }

        //将原来已有的cookie对象重新设置
        cookie cookie2 = new cookie("name","zhangsan");
        resp.addcookie(cookie2);

    }
(五)指定路径获取cookie 1. 说明
 
2. 代码演示 
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        
        cookie cookie01 = new cookie("cookie01","cookie01");
        //设置路径为“/”,表示在当前服务器下任何项目都可访问到cookie对象
        cookie01.setPath("/");
        resp.addcookie(cookie01);

        
        cookie cookie02 = new cookie("cookie02","cookie02");
        //默认不设置cookie的path 或者 设置为当前站点名
        cookie01.setPath("/servlet");
        resp.addcookie(cookie02);

        
        cookie cookie03 = new cookie("cookie03","cookie03");
        //设置为指定项目的站点名
        cookie01.setPath("/指定站点名");
        resp.addcookie(cookie03);

        
        cookie cookie04 = new cookie("cookie04","cookie04");
        //设置为指定项目的站点名
        cookie01.setPath("/servlet/cookie04");
        resp.addcookie(cookie04);
    }
二、Session

在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。

(一)session对象的获取和访问 1. 说明
 
2.代码演示 
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 获取session对象
        HttpSession session = req.getSession();

        //获取session的会话标识符
        String id = session.getId();
        System.out.println(id);
        //获取session的创建时间
        System.out.println(session.getCreationTime());
        //获取最后一次访问时间
        System.out.println(session.getLastAccessedTime());
        //判断是否是新的session对象
        System.out.println(session.isNew());

    }
(二)session域对象的应用 1. 说明
 
2. 代码演示 

重定向时,session域依旧能够共享

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 获取session对象
        HttpSession session = req.getSession();

        //设置域对象
        session.setAttribute("uname", "admin");
        session.setAttribute("upwd", "123456");

        //移除session域对象
        session.removeAttribute("upwd");

        
        req.setAttribute("name","zhangsan");

        //请求转发跳转到jsp页面
        //req.getRequestDispatcher("sessionTest.jsp").forward(req,resp);
        //重定向跳转到jsp页面
        resp.sendRedirect("sessionTest.jsp");

    }

jsp页面获取session域对象

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    获取域对象


<%
  //获取session域对象
  String uname = (String) request.getSession().getAttribute("uname");
  String upwd = (String) request.getSession().getAttribute("upwd");

  //获取request域对象
  String name = (String) request.getAttribute("name");

  out.print("uname :"+ uname + ",upwd :"+ upwd +",name :" +name);
%>


session对象的过期和销毁 1. 说明
 
2. 代码演示 
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 获取session对象
        HttpSession session = req.getSession();

        //设置域对象
        session.setAttribute("uname", "admin");

        

        //立即销毁
        session.invalidate();
    }
End

简单理解cookie和session和cookie就是一个字典,只是一个储存在服务器、一个存储在客户端。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/763598.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号