JavaWeb对于JSP内置对象及其作用域的深入理解与运用
  TEZNKK3IfmPf 2024年03月29日 67 0

一.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");
%>

使用<%= %>来输出:

取出的值为:
<%=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");
%>
取出的值为:
<%=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@moduyun.com

  1. 分享:
最后一次编辑于 2024年03月29日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   2024年05月31日   29   0   0 服务器
  TEZNKK3IfmPf   2024年05月31日   48   0   0 linux服务器
  TEZNKK3IfmPf   2024年05月31日   28   0   0 linux服务器centos
  TEZNKK3IfmPf   2024年05月31日   42   0   0 服务器java
  TEZNKK3IfmPf   2024年05月31日   36   0   0 服务器http
TEZNKK3IfmPf