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

上进小菜猪 发表于 2022/10/30 23:46:42 2022/10/30
【摘要】 一.JSP内置对象及其作用域 1.1 九大内置对象PageContext 用来存东西pageContext.setAttribute("name1","上进小菜猪");​ 注意:保存的数据只在对应的页面中有效。Request 用来存东西request.setAttribute("name2","上进小菜猪2号");注意:保存的数据只在一次请求有效,当然请求转发会携带这个数据。Resp...

一.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。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。