JSP实现数据传递与保存(二)

一、session对象

  • session机制是一种服务器端的机制,在服务器端保存信息
  • 用于存储与用户相关的会话信息

1.1 session与窗口的关系

  • 每个session对象都与一个浏览器窗口对应,重新开启一个浏览器窗口,可以重新创建一个session对象(不同版本浏览器可能有所差别)
  • 通过超链接打开新的窗口,新窗口的session与其父窗口的session相同
  • 每个session都有唯一的session ID          public String getId();

代码演示

展示session ID
//首页:
<%
    String sessionId = session.getId();
%>
<h1>SESSIONID:<%=sessionId%></h1>

//后台首页:
<%
    String sessionId = session.getId();
%>
<h1>SESSIONID:<%=sessionId%></h1>

1.2 使用session对象存储数据

使用session对象存储数据的步骤:

  1. 使用属性保存数据
  2. 从属性中读取数据,必要时需要进行数据类型转换

代码演示

使用session保存数据
//doLogin:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<html>
<head>
    <title></title>
</head>
<body>
<%
    //修改request和response的字符集编码
    request.setCharacterEncoding("UTF-8");
    response.setCharacterEncoding("UTF-8");

    //获取注册的用户名和密码
    String userName = request.getParameter("userName");
    String userPwd = request.getParameter("userPwd");

    if ("admin".equals(userName) && "123456".equals(userPwd)) {
        //登录成功,使用绝对定位跳转到后台主页

        //重定向跳转:
        session.setAttribute("loginUserName",userName);     //使用session保存数据
        response.sendRedirect(request.getContextPath() + "/manage/index.jsp");

        //转发跳转:
        //request.getRequestDispatcher("/manage/index.jsp").forward(request,response);
    } else {
        //登录失败,调回系统登录首页

        //这种写法也属于重定向跳转:
        out.print("<script>alert('登录失败');location.href=" + request.getContextPath() + "/index.jsp");
        out.flush();
    }
%>
</body>
</html>



//后台首页:
<%
    //String userName = request.getParameter("userName");

    //从doLogin的session中调用数据
    String loginUserName = (String) session.getAttribute("loginUserName");
%>
<h2><%=loginUserName%></h2>

1.3 会话清除和过期

程序主动清除session数据有两种实现方式:

  1. 设置会话失效:session.invalidate();
  2. 只移除会话的一个属性:session.removeAttribute(String name);

服务器主动清除长时间没有再次发出请求的session,两种实现方式:

        1.通过setMaxInactiveInterval(int interval)方法,单位是秒

<%
    session.setAttribute("loginUser",user); 
    session.setMaxInactiveInterval(600); 
    response.sendRedirect("admin.jsp"); 
%>

        2.修改tomcat服务器的web.xml,单位是分钟

<session-config>
       <session-timeout>30</session-timeout>
</session-config>

代码演示

到时间后自动失效
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<html>
<head>
    <title></title>
</head>
<body>
<%
    //修改request和response的字符集编码
    request.setCharacterEncoding("UTF-8");
    response.setCharacterEncoding("UTF-8");

    //获取注册的用户名和密码
    String userName = request.getParameter("userName");
    String userPwd = request.getParameter("userPwd");

    if ("admin".equals(userName) && "123456".equals(userPwd)) {
        //登录成功,使用绝对定位跳转到后台主页

        //重定向跳转:
        session.setMaxInactiveInterval(30);       //到时间后自动失效(30秒)
        session.setAttribute("loginUserName",userName);     //使用session保存数据
        response.sendRedirect(request.getContextPath() + "/manage/index.jsp");

        //转发跳转:
        //request.getRequestDispatcher("/manage/index.jsp").forward(request,response);
    } else {
        //登录失败,调回系统登录首页

        //这种写法也属于重定向跳转:
        out.print("<script>alert('登录失败');location.href=" + request.getContextPath() + "/index.jsp");
        out.flush();
    }
%>
</body>
</html>

小结

  • 用浏览器访问服务器——产生会话
  • 通过浏览器在网站登录——在会话中保存数据
  • 登录成功后用个人身份进行访问——会话有效期内
  • 关闭了浏览器——结束会话
  • 服务器主动结束会话——会话到期
  • 使会话失效、删除属性——及时释放会话资源
  • 程序主动结束会话、会话到期——会话中的数据丢失

二、JSP页面中的包含操作

2.1 JSP中实现页面包含操作的方法

        1.使用<%@include%>指令实现静态包含

<%@include file = "URL"%>

        2.使用<jsp:include>标签实现动态包含

<jsp:include page = "URL">

2.2 动态包含与静态包含的区别

2.3 application对象

  • application对象代表web应用本身,整个web应用共享一个application对象,该对象主要用于在多个JSP页面或servlet之间共享变量
  • application对象开始于服务器的启动,终止于服务器的关闭
  • application对象实现了用户间的数据共享,可以存放全局变量

application对象常用方法

小结

JSP常用内置对象

三、对象的作用域

3.1 作用域的分类

小结

四、Cookie

4.1 Cookie简介

Cookie是Web服务器保存在客户端的一系列文本信息

Cookie的作用:

  1. 对特定对象的追踪(Cookie能告诉在线广告商广告被点击的次数,从而可以更精确的投放广告)
  2. 实现各种个性化服务(Cookie能帮助站点统计用户个人资料从而实现各种各样的个性化服务)
  3. 简化登录(Cookie有效期限未到时,Cookie能使用户在不重新输入用户名和密码的情况下进入曾经浏览过的一些站点)

Cookie在安全方面,容易泄露信息

4.2 session和Cookie的联系

服务器可以将session ID写入Cookie并发送返回客户端,这样客户端就可以在后续的请求中将该Cookie作为身份验证的一部分发送给服务器

4.3 Cookie常用方法

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

IO进程线程复习:进程线程

1.进程的创建 #include<myhead.h>int main(int argc, const char *argv[]) {printf("hello world\n");//父进程执行的内容int num520;//在父进程中定义的变量pid_t pidfork();//创建子进程if(pid>0){while(1){printf("我是父进程&#xff0c;num%d\n&…

input输入框过滤非金额内容保留一个小数点和2位小数

这篇是输入框过滤非金额内容保留一个小数点和2位小数&#xff0c;金额的其他格式化可以看这篇文章常用的金额数字的格式化方法 js方法直接使用 该方式可以直接使用过滤内容&#xff0c;也可以到onInput或onblur等地方过滤&#xff0c;自行使用 /*** 非金额字符格式化处理* p…

有趣的CSS - 弹跳的圆

大家好&#xff0c;我是 Just&#xff0c;这里是「设计师工作日常」&#xff0c;今天分享的是用css写一个好玩的不停弹跳变形的圆。 《有趣的css》系列最新实例通过公众号「设计师工作日常」发布。 目录 整体效果核心代码html 代码css 部分代码 完整代码如下html 页面css 样式页…

解读2024生物发酵展览会-蓝帕控制阀门

参展企业介绍 感谢你正在或即将使用LAPAR系列产品&#xff0c;感谢你关注LAPAR&#xff01; LAPAR&#xff0c;流体控制领域的国际品牌之一&#xff0c;总部位于意大利米兰&#xff0c;成立多年以来&#xff0c;LAPAR凭借其完善的网络体系、优秀的产品质量、一体式的客户解决…

蓝桥杯-成绩分析

许久不敲代码&#xff0c;库名也忘了&#xff0c;精度设置还有求最大最小值都是常规题了。 #include <iostream> #include <iomanip> using namespace std; int main() { //一种不用开数组的方法 int n; cin>>n; int top0; int low100;//确定最大…

Uva 101: 木块问题(The Blocks Problem)

看着算法书看到了这一题&#xff0c;想着不能只看不做&#xff0c;就想着做了一下 算法书上的描述太抽象了&#xff0c;就网上找了其他的描述 当然去看英文描述是最准确的&#xff0c;算法书上说是哪一个oj网来着&#xff1f;我给忘了 STL还是很好用的 代码如下&#xff1a; …

【Vue3】学习watch监视:深入了解Vue3响应式系统的核心功能(下)

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

【Android12】Monkey压力测试源码执行流程分析

Monkey压力测试源码执行流程分析 Monkey是Android提供的用于应用程序自动化测试、压力测试的测试工具。 其源码路径(Android12)位于 /development/cmds/monkey/部署形式为Java Binary # development/cmds/monkey/Android.bp // Copyright 2008 The Android Open Source Proj…

Windows 安装Redis(图文详解)

一、Redis是什么数据库&#xff1f; Remote Dictionary Server(Redis) 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库&#xff0c;并提供多种语言的 API&#xff0c;是跨平台的非关系型数据库。 …

多线程和并发

线程 进程&#xff1a;在操作系统中运行的程序&#xff0c;一个进程可以包含多个线程 程序就是指令和数据的有序集合&#xff0c;静态概念 进程就是执行程序的一次执行过程&#xff0c;动态概念系统资源分配的单元 一个进程中包含多个线程&#xff0c;一个进程至少包含一个线…

图解KMP算法

目录 1.最长公共前后缀1.1前缀1.2后缀1.3最长公共前后缀 2、KMP算法过程2.1例子12.2例子22.3Python代码&#xff1a;2.4next数组的计算过程 1.最长公共前后缀 1.1前缀 前缀说的是一个字符串除了最后一个字符以外&#xff0c;所有的子串都算是前缀。 前缀字符串&#xff1a;A…

KubeSphere实战

我是南城余&#xff01;阿里云开发者平台专家博士证书获得者&#xff01; 欢迎关注我的博客&#xff01;一同成长&#xff01; 一名从事运维开发的worker&#xff0c;记录分享学习。 专注于AI&#xff0c;运维开发&#xff0c;windows Linux 系统领域的分享&#xff01; 知…

49.仿简道云公式函数实战-文本函数-Ip

1. Ip函数 获取当前用户的ip地址 注意是Ipv4的地址 2. 函数用法 IP() 3. 函数示例 获取当前用户的ip地址IP() 4. 代码实战 首先我们在function包下创建text包&#xff0c;在text包下创建IpFunction类&#xff0c;代码如下&#xff1a; package com.ql.util.express.sel…

11:日志分析系统ELK|Elasticsearch|kibana

日志分析系统ELK&#xff5c;Elasticsearch&#xff5c;kibana 日志分析系统ELKELK概述Elasticsearch安装Elasticsearch部署Elasticsearch集群Elasticsearch插件 熟悉Elasticsearch的API调用_cat API创建 tedu 索引使用 PUT 方式增加数据查询数据修改数据删除数据 KibanaKibana…

(挖坑) Python调用图工具

基本效果 输入 #!/usr/bin/env pythonThis example demonstrates a simple use of pycallgraph.from pycallgraph import PyCallGraph from pycallgraph.output import GraphvizOutputclass Banana:def eat(self):passclass Person:def __init__(self):self.no_bananas()def…

Xcode与Swift开发小记

引子 鉴于React Native目前版本在iOS上开发遇到诸多问题&#xff0c;本以为搞RN只需理会Javascript开发&#xff0c;没想到冒出CocoaPod的一堆编译问题。所以横下一条心&#xff0c;决定直接进攻iOS本身。不管你是用React Native&#xff0c;还是用Flutter&#xff0c;iOS下的…

算能RISC-V通用云开发空间编译pytorch @openKylin留档

终于可以体验下risc-v了&#xff01; 操作系统是openKylin&#xff0c;算能的云空间 尝试编译安装pytorch 首先安装git apt install git 然后下载pytorch和算能cpu的库&#xff1a; git clone https://github.com/sophgo/cpuinfo.git git clone https://github.com/pytorc…

java农产品商城商城计算机毕业设计包运行调试讲解

jsp mysql农业商城 特效&#xff1a;js产品轮播 功能&#xff1a; 前台&#xff1a; 1.绿色水果 图文列表 详情 2.新闻动态 文章标题列表 详情 3.有机蔬菜 图文列表 详情 4.有机谷物 图文列表 详情 5.有机大米 图文列表 详情 6.用户注册 登陆&#xff08;选择用户和管…

c++ 广度优先搜索(Breadth-First Search,BFS)

广度优先搜索&#xff08;Breadth-First Search&#xff0c;BFS&#xff09;是一种图遍历算法&#xff0c;通常用于搜索或遍历树和图等数据结构。其基本思想是先访问起始顶点&#xff0c;然后逐层遍历其相邻的顶点&#xff0c;直到找到目标顶点或遍历完所有顶点。 BFS通常使用…

前端基础面试题(一)

摘要&#xff1a;最近&#xff0c;看了下慕课2周刷完n道面试题&#xff0c;记录下... 1.请说明Ajax、Fetch、Axios三者的区别 三者都用于网络请求&#xff0c;但维度不同&#xff1a; Ajax&#xff08;Asynchronous Javascript ang XML&#xff09;&#xff0c;是一种在不重新…