当前位置 : 主页 > 编程语言 > java >

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

来源:互联网 收集:自由互联 发布时间:2022-09-02
@[toc] 一.JSP内置对象及其作用域 1.1 九大内置对象 PageContext 用来存东西 pageContext.setAttribute("name1","上进小菜猪"); ​ 注意:保存的数据只在对应的页面中有效。 Request 用来存东西 request.

@[toc]

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

上一篇:MD5加密解密
下一篇:没有了
网友评论