JSP和JSTL板块:第三节 JSP四大域对象 来自【汤米尼克的JAVAEE全套教程专栏】

JSP和JSTL板块:第三节 JSP四大域对象

  • 一、page范围
  • 二、request范围
  • 三、session范围
  • 四、application范围

在服务器和客户端之间、各个网页之间、哪怕同一个网页之内,总是需要传递各种参数值,这时JSP的内置对象就是传递这些参数的载具。内置对象是JSP在对应Servlet里自动载入的,因此不需要用new实例化。在JSP中直接写就可以。
内置对象共有四种,每种对象都可以在各自的范围里进行传递参数,它们都有各自的特点。
更多域对象深度内容可看Sevlet板块的五大对象小节(还没写好)

域对象取得到取不到
1.page范围pageContext:只在一个页面中保存属性服务器跳转(请求转发forward)之后无效
2. request范围request:只在一次请求中保存,服务器跳转后依然有效客户端跳转(重定向/超链接)
3. session范围session:在一次会话范围中,无论何种跳转都可以使用换一个浏览器
4.application 范围application:在整个服务器上保存重启服务器或换一台电脑

每个域对象都提供了这三个基本方法
在这里插入图片描述
如果IDEA无法获取以上中的某个方法,可能是jar包未导入,需要在项目结构里导入对应Tomtcat文件->lib文件下的jar包

一、page范围

只能在本页面取得参数,服务器端跳转<jsp:forward page="...">后就接收不到参数了

实例
设置参数页 start.jsp

<%--Created by IntelliJ IDEA.User: TommyNike
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>设置参数页</title>
</head>
<body><%// 设置page范围的域对象pageContext.setAttribute("page","zhangsan");// 设置request范围的域对象request.setAttribute("request","lisi");// 设置session范围的域对象session.setAttribute("session", "wangwu");// 设置application范围的域对象application.setAttribute("application","zhaoliu");%><%--    JSP的服务器跳转:请求转发--%><jsp:forward page="after.jsp"/>
</body>
</html>

获取参数页 after.jsp

<%--Created by IntelliJ IDEA.User: TommyNike
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html><head><title>获取参数页</title></head><body><%// 获取域对象中的值System.out.println("page范围: " + pageContext.getAttribute("page") + "\n");System.out.println("request范围:"+ request.getAttribute("request") + "\n");System.out.println("session范围: " + session.getAttribute("session") + "\n");System.out.println("application范围: " + application.getAttribute("application"));%></body>
</html>

启动服务器后在浏览器访问设置参数页,自动请求转发到获取参数页(请求转发地址栏不变
在这里插入图片描述

得到获取参数页终端输出
在这里插入图片描述
结论:除了page对象都接受到参数了,因为page对象只能接受到同一个页面中的参数,服务器请求转发后就接不到参数了

二、request范围

服务器跳转有效,客户端跳转失效
如果是客户端跳转,也就是重定向,则相当于发出了两次请求,那么第一次的请求将不存在了,就接收不到参数了。如果希望不管是客户端还是服务器跳转,都能保存的话,就需要继续扩大范围到seesion。

实例
设置参数页 start.jsp

<%--Created by IntelliJ IDEA.User: TommyNike
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>设置参数页</title>
</head>
<body><%// 设置page范围的域对象pageContext.setAttribute("page","zhangsan");// 设置request范围的域对象request.setAttribute("request","lisi");// 设置session范围的域对象session.setAttribute("session", "wangwu");// 设置application范围的域对象application.setAttribute("application","zhaoliu");//     重定向response.sendRedirect("after.jsp"); //如果改成超链接用<a>标签的效果也一样%>
</body>
</html>

获取参数页 after.jsp

<%--Created by IntelliJ IDEA.User: TommyNike
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html><head><title>获取参数页</title></head><body><%// 获取域对象中的值System.out.println("page范围: " + pageContext.getAttribute("page") + "\n");System.out.println("request范围:"+ request.getAttribute("request") + "\n");System.out.println("session范围: " + session.getAttribute("session") + "\n");System.out.println("application范围: " + application.getAttribute("application"));%></body>
</html>

启动服务器后在浏览器访问设置参数页,自动重定向到获取参数页(重定向地址栏会变
在这里插入图片描述

得到获取参数页终端输出
在这里插入图片描述

结论:page和request对象接受不到参数了,因为reuqest对象最多只能接受到服务器跳转(请求转发)的范围,重定向相当于服务器进行了两次会话:关闭了start.jsp,又打开了after.jsp所以接受不到参数了

三、session范围

无论客户端还是服务器端都可以取得,但如果重新开启一个新的浏览器,则无法取得之前设置的session了,因为每一个session只保存在当前的浏览器当中
对于服务器而言,每一个连接到它的客户端都是一个session,如果想要让属性设置一次之后,不管是否是新的浏览器打开都能取得则可以使用application

实例
现在到上一步中的重定向结束,可以访问到session的范围
在这里插入图片描述
如果此时重启浏览器,再访问after.jsp
在这里插入图片描述
终端就拿不到session对象里的参数了
在这里插入图片描述
结论:seesion对象虽然可以保存参数越过请求转发和重定向,但seesion是存活在一个浏览器中的,如果手动删除浏览器中保存的seesion
在这里插入图片描述
或者重启浏览器都会导致这个session死亡。

四、application范围

只要是通过application设置的属性,则所有此时服务器中的session都可以取得。可以简单的理解成application是所有seesion的集合,而且放在服务器中保存,但是如果此时服务器重启了,就无法取得了,因为关闭服务器后所有的对象都消失了。

实例
来到上一步中的

在这里插入图片描述
此时如果重启服务器,或者干脆换了一台电脑再访问after.jsp
在这里插入图片描述
当然就什么都拿不到了
在这里插入图片描述

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

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

相关文章

Redis面试题38

人工智能在医疗领域有哪些应用&#xff1f; 答&#xff1a;人工智能在医疗领域有许多应用&#xff0c;下面是一些常见的例子&#xff1a; 图像识别和辅助诊断&#xff1a;人工智能可以用于图像识别和辅助诊断&#xff0c;例如在医学影像领域&#xff0c;人工智能可以辅助医生分…

​(四)hive的搭建2

在&#xff08;三&#xff09;hive的搭建1中我们搭建好了hive环境&#xff0c;但是只能本地访问&#xff0c;在本节中配置Hive的访问方式。 1.元数据服务的方式 1.1 编辑hive-site.xml sudo vi hive-site.xml 在文件最后增加以下内容 <!– 指定存储元数据要连接的地址 –…

WebGL 1.0 内置函数

前言 本篇文章介绍WebGL 1.0 shader中支持的内置函数 角度弧度转化 角度转弧度radians 计算公式&#xff1a; R π d e g r e e 180 R \pi \times degree \div 180 Rπdegree180 float radians(float degree) vec2 radians(vec2 degree) vec3 radians(vec3 degree)…

无里程计下的纯跟踪算法实现

文章目录 概要生成相机坐标系下的三维坐标无里程计下的纯跟踪算法实现 概要 当你只有一个相机的时候&#xff0c;想要快速实现机器人跟随功能&#xff0c;没有里程计的情况下&#xff0c;就可以看这里了。这篇博文实现了一个无里程计下的纯跟踪算法。 生成相机坐标系下的三维…

1、安全开发-Python爬虫EDUSRC目标FOFA资产Web爬虫解析库

用途&#xff1a;个人学习笔记&#xff0c;有所借鉴&#xff0c;欢迎指正 前言&#xff1a; 主要包含对requests库和Web爬虫解析库的使用&#xff0c;python爬虫自动化&#xff0c;批量信息收集 Python开发工具&#xff1a;PyCharm 2022.1 激活破解码_安装教程 (2022年8月25日…

For debugging consider passing CUDA_LAUNCH_BLOCKING=1.

环境&#xff1a; wsl ubuntu22.04 vits2 问题描述&#xff1a; RuntimeError: CUDA error: unknown error [rank0]: CUDA kernel errors might be asynchronously reported at some other API call, so the stacktrace below might be incorrect. [rank0]: For debugging …

【Android新版本兼容】startActivityForResult()方法被弃用的解决方案

提示&#xff1a;此文章仅作为本人记录日常学习使用&#xff0c;若有存在错误或者不严谨得地方欢迎指正。 文章目录 一、使用registerForActivityResult()方法 一、使用registerForActivityResult()方法 startActivityForResult()方法在appcompat库1.3.0或更高版本中被废弃了&…

Linux下find命令详解

find #查找文件 #按照文件名、大小、时间、权限、类型、所属者、所属组来搜索文件 格式&#xff1a; find 查找路径 查找条件 具体条件&#xff08;按文件名或时间大小等&#xff09; 操作 注意&#xff1a; find命令默认的操作是print输出 find是检索…

MATLAB绘制电磁场

MATLAB绘制电磁场举例: clc;close all;clear all;warning off;%清除变量 rand(seed, 100); randn(seed, 100); format long g; m12 for k1:m for j1:m if k1 V(j,k)1; elseif((j1)|(jm)|(km)) V(j,k)0; else …

PKG系统安装包及IPSW固件:MacOS 11-14 Sonoma 正式版

MacOS 14 Sonoma&#xff0c;为提高生产力和创造力带来了全新的功能&#xff0c;有了更多使用小部件和令人惊叹的新屏幕保护程序进行个性化设置的方法&#xff0c;对Safari浏览器和视频会议进行了重大更新&#xff0c;以及优化的游戏体验——Mac体验比以往任何时候都更好。 mac…

贝叶斯的缺点

贝叶斯方法是一种统计学习方法&#xff0c;通过利用贝叶斯定理来计算给定先验概率的情况下&#xff0c;后验概率的条件概率。虽然贝叶斯方法在许多领域中应用广泛且有效&#xff0c;但也存在一些缺点。以下是一些贝叶斯方法的缺点的例子&#xff1a; 1、先验概率的选择 贝叶斯方…

体验数学之美:绘制曲线

文章目录 一、实战概述二、实战步骤(一)圆锥曲线1、绘制圆2、绘制椭圆3、绘制双曲线4、绘制抛物线(二)心形线(三)雅各布线一、实战概述 通过Python编程,我们可以借助matplotlib与numpy库绘制一系列迷人的数学曲线,展现数学之美。例如,利用极坐标绘制椭圆(圆锥曲线的一…

第二十四天| 77. 组合

Leetcode 77. 组合 题目链接&#xff1a;77 组合 题干&#xff1a;给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。你可以按 任何顺序 返回答案。 思考&#xff1a;回溯法。把回溯法的搜索过程抽象为树形结构。 每次从集合中选取元素&#xff0…

关于el-select组件修改v-model值之后重新选择却选择不上的问题

本人遇到的问题是这样的 <el-selectref"jingzhongSelect"clearablestyle"width: 100%"v-model"form.policeCategoryId"><el-optionv-for"item in policeCategoryArr":key"item.id":value"item.id":label…

vue3实现图片懒加载vue3-lazy

图片懒加载&#xff08;Lazy Loading&#xff09;是一种延迟加载图片的技术&#xff0c;它只有在图片即将进入浏览器可视区域时才加载图片&#xff0c;从而减少页面初始加载时间和提高页面加载性能。 图片懒加载的作用和好处如下&#xff1a; 提高页面加载速度&#xff1a;只…

LeetCode 24天

77. 组合 今天就做一题&#xff0c;回溯剪枝。我的理解就是把多层for循环放到递归里实现&#xff0c;通过剪枝来减少递归次数。遍历顺序类似N叉树的遍历。 class Solution { public://定义全局变量更方便vector<int> path;vector<vector<int>> res;void bac…

vio参数文件内相机imu参数的修改

imu标定工具 https://github.com/mintar/imu_utils网络上有各种IMU校准工具和校准教程&#xff0c;曾经花费了巨大精力跟着各种教程去跑校准。 然而&#xff0c;标定使用的数据都是在静止状态下录制的&#xff0c;我们在使用vio或者imu-cam联合标定的时候&#xff0c;imu确是处…

计算机视觉实战项目4(单目测距与测速+摔倒检测+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别+无人机检测+A_路径规划+行人车辆计数+动物识别等)

基于YOLOv5的无人机视频检测与计数系统 摘要&#xff1a; 无人机技术的快速发展和广泛应用给社会带来了巨大的便利&#xff0c;但也带来了一系列的安全隐患。为了实现对无人机的有效管理和监控&#xff0c;本文提出了一种基于YOLOv5的无人机视频检测与计数系统。该系统通过使用…

【2024-02-02】华为秋招笔试三道编程题解

恭喜发现宝藏&#xff01;搜索公众号【TechGuide】回复公司名&#xff0c;解锁更多新鲜好文和互联网大厂的笔经面经。 作者TechGuide【全网同名】 订阅专栏&#xff1a; 【专享版】2024最新大厂笔试真题解析&#xff0c;错过必后悔的宝藏资源&#xff01; 第一题&#xff1a;找…

AJAX-认识URL

定义 概念&#xff1a;URL就是统一资源定位符&#xff0c;简称网址&#xff0c;用于访问网络上的资源 组成 协议 http协议&#xff1a;超文本传输协议&#xff0c;规定浏览器和服务器之间传输数据的格式&#xff1b;规定了浏览器发送及服务器返回内容的格式 协议范围&#xf…