JSP内置对象包含
request请求、response响应、out输出、session会话、application应用程序等
为什么需要内置对象?
为了方便Web程序的开发 JSP页面内置了一些默认的对象 这些对象不需要预先声名就可以在脚本代码和表达式中使用,它们也称为 隐式对象、预定义变量
九大内置对象
PageContext 存数据
Request 存数据
Response
Session 存数据
Application [ServletContext] 存数据
config [ServletConfig]
out
page
exception
敲个demo理解存数据的几个对象
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>PageContext</title>
</head>
<body>
<%-- 内置对象--%>
<%
pageContext.setAttribute("name1","潮");//保存的数据只在一个页面中有效
request.setAttribute("name2","汕");//保存的数据只会在一次请求中有效,请求转发也会携带这个数据
session.setAttribute("name3","奴");//保存的数据只会在一次会话中有效,从打开浏览器到关闭浏览器
application.setAttribute("name4","仔");//保存的数据只在服务器中有效,从打开服务器到关闭服务器
%>
<%--代码片段
我们从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");
String name5 = (String) pageContext.findAttribute("name5");
%>
<%--使用EL表达式进行输出--%>
<h3>从EL表达式取出的值为:</h3>
<h4>${ name1}</h4>
<h4>${ name2}</h4>
<h4>${ name3}</h4>
<h4>${ name4}</h4>
<h4>${ name5}</h4>
<h2><%= name5%></h2>
</body>
</html>
启动服务器运行
可以清楚的看到 我们没有存入name5的值 但是<%= name5%>会打印出null
使用EL表达式却不会打印出null 说明EL表达式会帮我们自动过滤
使用EL表达式注意需要在Page指令处添加 isELIgnored="false"
接下来再来敲个小demo
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>PageDemo2</title>
</head>
<body>
<%--代码片段
我们从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");
String name5 = (String) pageContext.findAttribute("name5");
%>
<%--使用EL表达式进行输出--%>
<h3>从EL表达式取出的值为:</h3>
<h4>${name1}</h4>
<h4>${name2}</h4>
<h4>${name3}</h4>
<h4>${name4}</h4>
<h4>${name5}</h4>
<h2><%= name5%></h2>
</body>
</html>
启动服务器 注意先访问有set值的demo1 再访问取值的demo2
发现只有session和application的作用域有效
接下来再来修改一下demo实现转发
启动服务器访问demo1
实现转发到demo2
说明Request被携带过去了