一.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 %>
验证结果如下,我们可以使用内置对象来取出对应的变量的值。
1.2 原理画图理解
1.3 通俗理解存储对象
request:原理:客户端向服务器端发送请求,产生的数据用户只使用一次,之后就不会再使用了,比如:新闻等等,用户只看一次的!
session:原理:客户端向服务器端发送请求,产生的数据用户使用过后还有可能再次使用,比如购物车等等。
application:原理:客户端向服务器端发送请求,产出的数据一个用户用完之后,其他的用户还可以使用,比如聊天数据等等。
二.JSP内置存储对象小实战
1.新建一个jsp文件,名为:pageContextDemo03.jsp
2.使用pageContext实现转发,转发到我们上一步的pagecintextDemo01实例中。
<%
pageContext.forward("/pagecintextDemo01.jsp");
%>
3.在路径里访问pageContextDemo03,结果如下:
这样可以实现前端转发,比较方便。
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
运行结果如下:
原因解释:
我们发现第一个为null,它的存储方式为:pageContext.setAttribute
只在当前的页面中有效,当我们转发存储之后,pageContext里存储的数据就失效了,所以第一个输出null。
7.验证猜想,直接访问pageDemo02.jsp:运行结果截图如下:
原因解释,第二个采用的存储方式是:request.setAttribute
我们直接访问了pageDemo02,没有走转发路线,所以request.无法请求转发数据,所以我们的运行结果为null。