5

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

 2 years ago
source link: https://blog.51cto.com/u_15568258/5634870
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Table of Contents

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

  • 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 %>

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

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

1.2 原理画图理解

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

1.3 通俗理解存储对象

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

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

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

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

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

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

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

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

JavaWeb对于JSP内置对象及其作用域的深入理解与运用_服务器_03

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

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

运行结果如下:

JavaWeb对于JSP内置对象及其作用域的深入理解与运用_服务器_04

原因解释:

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

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

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

JavaWeb对于JSP内置对象及其作用域的深入理解与运用_服务器_05

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

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK