Cookie Session JSP

news2024/11/27 6:42:20

这里写目录标题

  • 1 Cookie
    • 1.1 会话介绍
    • 1.2 Cookie 介绍
    • 1.3 Cookie 属性
    • 1.4 Cookie 方法
      • 1.4.1 Cookie 添加和获取
    • 1.5 Cookie 的使用
    • 1.6 Cookie 的细节
  • 2 Session
    • 2.1 HttpSession 介绍
    • 2.2 HttpSession 常用方法
    • 2.3 HttpSession 获取
    • 2.4 HttpSession 的使用
    • 2.5 HttpSession 的细节
  • 3 JSP
    • 3.1 JSP 介绍
    • 3.2 JSP 快速入门
    • 3.3 JSP 执行过程
    • 3.4 JSP 语法
    • 3.5 JSP 指令
    • 3.6 JSP 细节
    • 3.7 四大域对象
    • 3.8 MVC 模型

1 Cookie

1.1 会话介绍

  • 会话:浏览器和服务器之间的多次请求和响应
  • 会话过程中所产生的一些数据,可以通过会话技术(Cookie 和 Session)保存

1.2 Cookie 介绍

  • Cookie:客户端会话管理技术
    把要贡献的数据保存到客户端中
    每次请求时,把会话信息带到服务器端,从而实现多次请求的数据共享
  • 作用:可以保存客户端访问网站的相关内容,从而保证每次访问时先从本地缓存中获取,以此提高效率

1.3 Cookie 属性

在这里插入图片描述

1.4 Cookie 方法

在这里插入图片描述

1.4.1 Cookie 添加和获取

  • 添加:HttpServletResponse
    在这里插入图片描述
  • 获取:HttpServletRequest
    在这里插入图片描述

1.5 Cookie 的使用

  • 需求说明
    通过 Cookie 记录最后访问时间,并在浏览器上显示出来
  • 最终目的
    掌握 Cookie 的基本使用,从创建到添加客户端,再到从服务器获取
  • 代码演示:
package com.txt.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;

@WebServlet("/servletDemo01")
public class ServletDemo01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=UTF-8");
        PrintWriter pw = resp.getWriter();
        pw.write("欢迎访问本网站,您的最后访问时间为:<br>");

        Cookie cookie = new Cookie("time", System.currentTimeMillis() + "");

         cookie.setMaxAge(3600);

         resp.addCookie(cookie);

        Cookie[] cookies = req.getCookies();
        for (Cookie c : cookies){
            if ("time".equals(c.getName())){
                String value = c.getValue();
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
                pw.write(sdf.format(new Date(Long.parseLong(value))));
            }
        }
    }

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

  • 效果如下

在这里插入图片描述

1.6 Cookie 的细节

  • 数量限制
    每个网站最多有20和 Cookie, 且大小不能超过 4KB。所有网站的 Cookie 总数不能超过 300个
  • 名称限制
    Cookie 的名称只能包含 ASCCI 码表中的字母、数字字符。不能包含逗号、分号、空格,不能以 $ 开头
    Cookie 的值不支持中文
  • 存货时间限制 setMaxAge() 方法接收数字
    负整数:当前会话有效,浏览器关闭则清除
    0:立刻清除
    正整数:以秒为单位设置存活时间
  • 访问路径限制
    默认路径:取自第一次访问的资源路径前缀,只要以这个前缀为开头(包括子级路径),就能访问到
    设置路径:setPath() 方法设置指定路径

2 Session

2.1 HttpSession 介绍

  • HttpSession:服务器会话管理技术
    本质也是采用客户端会话管理技术
    只不过客户端保存的是一个特殊表示,而共享的数据保存到了服务器的内存对象中
    每次请求时,会将特殊标识带到服务器端,根据这个标识来找到对应的内存空间,从而实现数据共享
    是 Servlet 规范中四大域对象之一的会话域对象
  • 作用:可以实现数据共享
    在这里插入图片描述

2.2 HttpSession 常用方法

2.3 HttpSession 获取

  • HttpSession 实现类对象是通过 HttpSevletRequest 对象来获取
    在这里插入图片描述

2.4 HttpSession 的使用

  • 需求说明
    通过第一个 Servlet 设置共享数据用户名,并在第二个 Servlet 获取到
  • 最终目的
    掌握 HttpSession 的基本使用,如何获取和使用
  • 代码演示
package com.txt.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

@WebServlet("/servletDemo01")
public class ServletDemo01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1. 获取请求的用户名
        String username = req.getParameter("username");

        //2. 获取 HTTPSession 的对象
        HttpSession session = req.getSession();

        //3. 将用户名信息添加到共享数据中
        session.setAttribute("username",username);
    }

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

package com.txt.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

@WebServlet("/servletDemo02")
public class ServletDemo02 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1. 获取 HTTPSession 对象
        HttpSession session = req.getSession();

        //获取共享数据
        Object username = session.getAttribute("username");

        //将数据响应给浏览器
        resp.getWriter().write(username +"");
    }

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

2.5 HttpSession 的细节

  • 唯一标识的查看
    在这里插入图片描述
    在这里插入图片描述
  • 浏览器禁用 Cookie
    方式一:通过提示信息告知用户,大部分网站采用的解决方式
    方式二:访问时拼接 jsessionid 标识,通过 encodeURL() 方法重写地址
  • 钝化和活化
    • 什么是钝化和活化
      钝化:序列化。把长时间不用,但还不到过期时间的 HttpSession 进行序列化,写到磁盘上
      活化:相反的状态
    • 何时钝化
      第一种情况:当访问量很大是,服务器会根据 getLastAccessTime 来进行排序
      对长时间不用,但是还没有到过期时间的 HttpSession 进行序列化
      第二种情况:当服务器进行重启的时候,为了保持客户 HttpSession 中的数据,也要对其进行序列化
  • 注意:
    HttpSession 的序列化由服务器自动完成,我们无需关心

3 JSP

3.1 JSP 介绍

  • JSP(Java Servlet Page):是一种动态网页技术标准
  • JSP 部署在服务器上,可以处理客户端发送的请求,并根据请求内容动态的生成 HTML、XML 或其他格式文档的 Web 网页,然后再响应给客户端
  • JSP 是基于Java 语言的,它的本质就是 Servlet
    在这里插入图片描述

3.2 JSP 快速入门

  1. 创建一个web项目
  2. 在 web 目录下创建一个 index.jsp 文件
  3. 在文件中写一句内容为:这是我的第一个jsp
  4. 部署并启动项目
  5. 通过浏览器测试
  • 代码演示
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>JSP</title>
  </head>
  <body>
    这是我的第一个JSP
  </body>
</html>

3.3 JSP 执行过程

在这里插入图片描述

3.4 JSP 语法

  • JSP 注释
    <%--注释的内容-->

  • Java 代码块
    <% Java 代码块%>
    <%
    System.out.println("Hello JSP");
    out.print("Hello JSP");
    %>

    注意:
    System.out.println(“Hello JSP”); 普通输出语句,输出在控制台
    out.print(“Hello JSP”); out是 JSPWriter 对象,输出在页面

  • JSP 表达式
    <%=表达式%>
    <%="hello"%>

    相当于 out.print(“hello”); 的简化

  • JSP 声明
    <%! 声明变量或方法 %>
    <%! String s = "abc"; %>
    <%=s%>

    如果加!代表的是声明的是成员变量
    如果不加!代表的是声明的是局部变量

3.5 JSP 指令

  • page 指令
    <%@ page 属性名 = 属性值 属性名 = 属性值 … %>
    在这里插入图片描述
  • include 指令:可以包含其他页面
    <%@ include file=包含的页面 %>
  • taglib 指令:可以引入外部标签库
    <%@ taglib uri=标签库的地址 prefix=前缀名称%>

3.6 JSP 细节

  • 九大隐式对象
    在这里插入图片描述
  • PageContext 对象
    是 JSP 独有的,Servlet 中没有
    是四大域对象之一的页面域对象,还可以操作其他三个域对象中的属性
    还可以获取其他八个隐式对象
    生命周期是随着 JSP 的创建而存在,随着 JSP 的结束而小旺旺,每个 JSP 页面都有一个 PageContext 对象
    在这里插入图片描述

3.7 四大域对象

在这里插入图片描述

3.8 MVC 模型

  • M(Model):模型。 用与封装数据,封装的是数据模型
  • V(View):视图。 用于显示数据,动态资源用 JSP 页面,静态资源用 HTML 页面
  • C(Controller):控制器。 用于处理请求和响应,例如 Servlet
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/51736.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高压功率放大器在超声驻波声场的听声器中的应用

实验名称&#xff1a;高压功率放大器在超声驻波声场的听声器声压测量中的应用 研究方向&#xff1a;3D打印 测试目的&#xff1a;利用听声器对声场的测量是一种基于对声压的采集&#xff0c;利用CPB分析及FFT分析处理&#xff0c;得到涉入点声压的方法。介于听声器采集信号为时…

单字段纵向分栏

【问题】 Hi, I’m trying to display BIRT report Data (only one field) first vertically till the page ends and then it should continue in the next column of the same page. For example as A E I B F J C G D HBy using list element I’m able to get the data …

opencv上设置摄像头曝光参数的经验

实际应用中我们需要调整摄像头的参数比如曝光&#xff0c;由于opencv的后端是一般编译是支撑多种插件&#xff0c;详细信息请参考OpenCV: Video I/O with OpenCV Overview&#xff0c;这里引用里面的图&#xff1a; 对于VideoCaputure&#xff0c;后端有ffmpge&#xff0c;V4L&…

SpringMVC入门

SpringMVC 一、SpringMVC简介 1、什么是MVC MVC是一种软件架构的思想&#xff0c;将软件按照模型、视图、控制器来划分 M&#xff1a;Model&#xff0c;模型层&#xff0c;指工程中的JavaBean&#xff0c;作用是处理数据 JavaBean分为两类&#xff1a; 一类称为实体类Bea…

软件工程SSM毕设项目 - 基于SSM的中药店商城网站(含源码+论文)

文章目录1 项目简介2 实现效果2.1 界面展示3 设计方案3.1 概述3.2 系统流程3.3 系统结构设计4 项目获取1 项目简介 Hi&#xff0c;各位同学好呀&#xff0c;这里是M学姐&#xff01; 今天向大家分享一个今年(2022)最新完成的毕业设计项目作品&#xff0c;【基于SSM的中药店商…

微信小程序能给花店带来哪些作用_分享花店微信小程序开发优势

在开发过小程序的线下实体店铺中&#xff0c;有不少花店。开发了小程序的花店纷纷表示&#xff1a;"小程序提供了非常大的帮助&#xff0c;现在越来越离不开小程序了"。那么&#xff0c;小程序能给花店带来哪些帮助&#xff1f; 1、提升店铺曝光半径挖掘更多流量 对…

哈希表题目:键盘行

文章目录题目标题和出处难度题目描述要求示例数据范围解法思路和算法代码复杂度分析题目 标题和出处 标题&#xff1a;键盘行 出处&#xff1a;500. 键盘行 难度 2 级 题目描述 要求 给你一个字符串数组 words\texttt{words}words&#xff0c;只返回可以使用在美式键盘…

Scala集合习题Ⅱ

行是知之始&#xff0c;知是行之成。——陶行知 目录 练习题 3 &#xff1a;求出各城市的平均温度 练习题4&#xff1a;请用scala得出以下的结果 练习题 3 &#xff1a;求出各城市的平均温度 val d1 Array(("bj", 28.1), ("sh", 28.7), ("gz"…

RK3588平台开发系列讲解(PWM篇)PWM及backlight的使用方法

平台内核版本安卓版本RK3588Linux 5.10Android12🚀返回专栏总目录 文章目录 一、PWM驱动二、DTS配置三、PWM在user space的使用四、PWM在背光中的使用4.1 Backlight DTS4.2 PWM Backlight 调试沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍PWM以及backli…

SpringBoot结合Quartz实现定时任务

《从零打造项目》系列文章 工具 比MyBatis Generator更强大的代码生成器 ORM框架选型 SpringBoot项目基础设施搭建SpringBoot集成Mybatis项目实操SpringBoot集成MybatisPlus项目实操SpringBoot集成Spring Data JPA项目实操 数据库变更管理 数据库变更管理&#xff1a;Liquibase…

深入讲解Netty那些事儿之从内核角度看IO模型(上)

我们都知道Netty是一个高性能异步事件驱动的网络框架。 它的设计异常优雅简洁&#xff0c;扩展性高&#xff0c;稳定性强。拥有非常详细完整的用户文档。 同时内置了很多非常有用的模块基本上做到了开箱即用&#xff0c;用户只需要编写短短几行代码&#xff0c;就可以快速构建…

8、python中的模块和包

文章目录模块模块导入的方式直接导入部分导入import module 和from module import *的区别模块的其他信息_ _ name _ _ 的特殊使用模块的分类包从包中导入模块的方式模块 模块就是工具包,要想使用这个工具包中的工具(就好比函数),就需要导入这个模块 模块是非常简单的Python文…

pandas交叉表与透视表pd.crosstab()和pd.pivot_table()函数详解

一、交叉表 交叉表&#xff1a;用于计算一列数据对于另外一列数据的分组个数(用于统计分组频率的特殊透视表)&#xff0c;pd.crosstab(value1, value2)pandas.crosstab(index, columns, valuesNone, rownamesNone, colnamesNone, aggfuncNone, marginsFalse, margins_nameAll,…

【虚幻引擎】UE4/UE5 动画蓝图,混合空间,目标偏移,动画蒙太奇之间的联系

一、UE动画介绍 虚幻引擎在为角色设置移动行走时&#xff0c;为了更好的调节和控制人物的相关动画&#xff0c;设置了一系列的跟人物相关的动画&#xff0c;其中包括一维混合空间&#xff0c;二维混合空间&#xff0c;动画蒙太奇&#xff0c;目标偏移等&#xff0c;动画蓝图的出…

Day16--加入购物车-动态设置tabBar的数组徽标

问题1&#xff1a; ①&#xff1a;刚开始 ②&#xff1a;点击购物车的图标后&#xff0c;跳转到cart页面发现&#xff0c;并没有徽标在tabbar上&#xff1a; 提纲挈领&#xff1a; 我的操作&#xff1a; 1》把 Store 中的 total 映射到 cart.vue 中使用&#xff1a; 2》在页面…

Java ArrayLIst与顺序表

什么是集合类&#xff1f; Java当中的集合类&#xff0c;其实就是封装号的数据结构 原始的数据结构——>Java当中封装成的集合对应的那个原始的数据结构——>用Java封装的集合对应的。 集合类所在的包&#xff1a;java.util这个包底下 顺序表的底层是一个数组&#xff0…

Flutter状态管理

前言 状态管理是什么&#xff1f;简单的来说&#xff0c;就是当某个状态发生变化的时候&#xff0c;告知该状态的监听者&#xff0c;让状态所监听的属性随之而改变&#xff0c;达到UI层随着数据层变化而变化的效果。在Flutter中的状态(State)是一个组件的UI数据模型&#xff0…

【MySQL 读写分离】Sharding JDBC + Spring boot 实现数据库读写分离的登录 Demo

上篇文章我们搭建了 MySQL 数据库主从复制集群 MySQL 搭建主从复制集群~~~ 本篇文章我们利用搭建好的主从复制集群&#xff0c;使用 SpringBoot 结合 Sharding-JDBC 搭建一个小的 登录 Demo&#xff0c;测试实现数据库的读写分离 项目源码地址&#xff1a; https://gitee.com/l…

13 【操作mysql数据库】

13 【操作mysql数据库】 1.mysql 介绍 付费的商用数据库&#xff1a; Oracle&#xff0c;典型的高富帅&#xff1b;SQL Server&#xff0c;微软自家产品&#xff0c;Windows定制专款&#xff1b;DB2&#xff0c;IBM的产品&#xff0c;听起来挺高端&#xff1b;Sybase&#x…

android WebRtc 视频通话(P2P)

概述 WebRTC名称源自网页实时通信(Web Real-Time Communication)的缩写&#xff0c;是一个支持网页浏览器进行实时语音对话或视频对话的技术&#xff0c;是谷歌2010年以6820万美元收购Global IP Solutions公司而获得的一项技术。Google于2011年6月3日开源的即时通讯项目&#x…