当前位置: 首页 > news >正文

JavaWeb对于JSP内置对象及其作用域的深入理解与运用

文章目录

  • 一.JSP内置对象及其作用域
    • 1.1 九大内置对象
    • 1.2 原理画图理解
    • 1.3 通俗理解存储对象
  • 二.JSP内置存储对象小实战

一.JSP内置对象及其作用域

1.1 九大内置对象

  • PageContext 用来存东西

    pageContext.setAttribute("name1","上进小菜猪");
    

​ 注意:保存的数据只在对应的页面中有效。

  • Request 用来存东西

    request.setAttribute("name2","上进小菜猪2号");
    

    注意:保存的数据只在一次请求有效,当然请求转发会携带这个数据。

  • Response

  • Session 用来存东西

    session.setAttribute("name3","上进小菜猪3号");
    

    注意:保存的数据只在一次会话中有效,这个过程包括打开游览器到关闭游览器。

  • Application 【ServletContext】 用来存东西

    application.setAttribute("name4","上进小菜猪4号");
    

    注意:保存的数据只在服务器中有效,这个过程包括打开服务器到关闭服务器。

  • Config 【ServletConfig】

  • out

  • page 几乎不使用,不用了解

  • exception 异常,和java异常一样

备注:

脚本片段中的jsp代码,会不改变的自动生成到java文件里。注意要保证java语法的正确性。

取出使用pageContext取出,通过寻找的方式来获取到变量的值。如下:

<%
String name1 =(String) pageContext.findAttribute("name1");
String name2 =(String) pageContext.findAttribute("name2");
String name3 =(String) pageContext.findAttribute("name3");
String name4 =(String) pageContext.findAttribute("name4");
%>

使用<%= %>来输出:

<h1>取出的值为:</h1>
<%=name1 %>
<%=name2 %>
<%=name3 %>
<%=name4 %>

验证结果如下,我们可以使用内置对象来取出对应的变量的值。

image-20220830193556335

1.2 原理画图理解

image-20220830192522844

1.3 通俗理解存储对象

request:原理:客户端向服务器端发送请求,产生的数据用户只使用一次,之后就不会再使用了,比如:新闻等等,用户只看一次的!

session:原理:客户端向服务器端发送请求,产生的数据用户使用过后还有可能再次使用,比如购物车等等。

application:原理:客户端向服务器端发送请求,产出的数据一个用户用完之后,其他的用户还可以使用,比如聊天数据等等。

二.JSP内置存储对象小实战

1.新建一个jsp文件,名为:pageContextDemo03.jsp

2.使用pageContext实现转发,转发到我们上一步的pagecintextDemo01实例中。

<%
    pageContext.forward("/pagecintextDemo01.jsp");
%>

3.在路径里访问pageContextDemo03,结果如下:

image-20220830201350349

这样可以实现前端转发,比较方便。

4.配置输出语句,用来验证转发的有效性:新建jsp文件pageDemo02.jsp。

<%
    String name1 =(String) pageContext.findAttribute("name1");
    String name2 =(String) pageContext.findAttribute("name2");
    String name3 =(String) pageContext.findAttribute("name3");
    String name4 =(String) pageContext.findAttribute("name4");
%>
<h1>取出的值为:</h1>
<%=name1 %>
<%=name2 %>
<%=name3 %>
<%=name4 %>

5.配置Dome01,来转发到demo02里,观察存储的数据是否还存在:

<%
String name1 =(String) pageContext.findAttribute("name1");
String name2 =(String) pageContext.findAttribute("name2");
String name3 =(String) pageContext.findAttribute("name3");
String name4 =(String) pageContext.findAttribute("name4");
pageContext.forward("/pageDemo02.jsp");
%>

6.验证猜想:直接访问

localhost:8080/JSP-01/pagecintextDemo01.jsp

运行结果如下:

image-20220830202151161

原因解释:

我们发现第一个为null,它的存储方式为:pageContext.setAttribute

只在当前的页面中有效,当我们转发存储之后,pageContext里存储的数据就失效了,所以第一个输出null。

7.验证猜想,直接访问pageDemo02.jsp:运行结果截图如下:

image-20220830202336311

原因解释,第二个采用的存储方式是:request.setAttribute

我们直接访问了pageDemo02,没有走转发路线,所以request.无法请求转发数据,所以我们的运行结果为null。

相关文章:

  • HarmonyOS(鸿蒙系统)物联网开发教程——环境搭建
  • 《MySQL》增删查改(进阶)
  • 【Django】REST_Framework框架——APIView类源码解析
  • 多线程之Thread
  • Selenium自动化测试框架
  • 四年时间,从一个浑浑噩噩的程序员到csdn博客专家的成长之路
  • Spring Boot 9 :详细描述Spring Boot + Vue项目部署过程:Centos为例(重点)
  • 医疗项目业务介绍
  • 猿创征文 | Git的良心教程
  • 【线性代数基础进阶】特征值和特征向量-补充+练习
  • dc_shell的report_xx和查找pin或cell的input/output [all_fanin/out]
  • (LeetCode C++)盛最多水的容器
  • vue3 eventBus订阅发布模式
  • Maven的安装与配置以及注意事项
  • 【JavaWeb】JavaScript
  • Apache Pulsar 2.1 重磅发布
  • CSS 专业技巧
  • ES6语法详解(一)
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • spark本地环境的搭建到运行第一个spark程序
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 解决iview多表头动态更改列元素发生的错误
  • 如何选择开源的机器学习框架?
  • 使用SAX解析XML
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 线上 python http server profile 实践
  • 小程序01:wepy框架整合iview webapp UI
  • 运行时添加log4j2的appender
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • ​力扣解法汇总946-验证栈序列
  • ###项目技术发展史
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (转)清华学霸演讲稿:永远不要说你已经尽力了
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • .NET Core WebAPI中封装Swagger配置
  • .Net Redis的秒杀Dome和异步执行
  • .NET 表达式计算:Expression Evaluator
  • .NET 发展历程
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • /run/containerd/containerd.sock connect: connection refused
  • [ IOS ] iOS-控制器View的创建和生命周期
  • [ 常用工具篇 ] AntSword 蚁剑安装及使用详解
  • [ 英语 ] 马斯克抱水槽“入主”推特总部中那句 Let that sink in 到底是什么梗?
  • [2544]最短路 (两种算法)(HDU)
  • [BZOJ]4817: [Sdoi2017]树点涂色
  • [BZOJ4010]菜肴制作
  • [C#]winform使用引导APSF和梯度自适应卷积增强夜间雾图像的可见性算法实现夜间雾霾图像的可见度增强
  • [CentOs7]搭建ftp服务器(2)——添加用户
  • [Gamma]阶段测试报告
  • [iOS开发]iOS中TabBar中间按钮凸起的实现
  • [Luogu P3527BZOJ 2527][Poi2011]Meteors(整体二分+BIT)
  • [MongoDB]------windos下的安装部署与基础使用
  • [NOIP2004] 提高组 洛谷P1090 合并果子