什么是内置对象?
在使用
jsp
页面时,有某些对象
使用频率非常高
。如果我们每次都去创建这些对象再使用,就会变得麻烦。所以在加载完
jsp
页面时,就
把这些对象创建好了
,我们只需要直接使用这些对象即可!!!!这些对象就叫内置对象。
JSP的9大内置对象
JSP的4大域对象
由上2张表可以发现9大内置对象中就包含了4个域对象了.
out
对象
out
内置对象,类型是
JspWriter
。
JspWriter
相当于一个带缓存功能的
PrintWriter
。
PrintWriter
的作用:
向浏览器输出内容
writer.writer("
内容
");
PrintWriter writer = response.getWriter();
JspWriter
的作用:
向
PrintWriter
输出内容
JspWriter out = pageContext.getOut();
out.writer("
内容
");
问题
1
:
JspWriter
的缓冲区大小是多少?
默认情况下,是
8kb
。也可以改变缓冲区大小,通过
page
指令
buffer
属性设置
问题
2
:
JspWriter
缓冲区的内容在什么情况下会写入到
PrintWriter
?
1
)缓存区满了
2
)
jsp
页面执行完毕
3
)缓存区关闭
<%@ page language="java" import="java.util.*" pageEncoding="utf-8" buffer="8kb"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>out对象</title>
</head>
<body>
abc
<%
out.write("ac");
//直接把内容发送到浏览器
response.getWriter().write("def");
%>
</body>
</html>
<%-- 以上输出的结果是:def abc ac 、因为out对象是JspWriter类的对象 --%>
pageContext
对象
1
)通过
pageContext
得到其他
8
个内置对象
<%@ page language="java" import="java.util.*" pageEncoding="utf-8" buffer="8kb" isErrorPage="true"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>out对象</title>
</head>
<body>
<%--1.通过pageContext获取其他8个对象 --%>
<%out.write("是否相同"+(request==pageContext.getRequest()));%><br/>
<%out.write("是否相同"+(response==pageContext.getResponse()));%><br/>
<%out.write("是否相同"+(session==pageContext.getSession()));%><br/>
<%out.write("是否相同"+(config==pageContext.getServletConfig()));%><br/>
<%out.write("是否相同"+(application==pageContext.getServletContext()));%><br/>
<%out.write("是否相同"+(out==pageContext.getOut()));%><br/>
<%out.write("是否相同"+(page==pageContext.getPage()));%><br/>
<%-- exception不能直接使用,需要在page指令中设置isErrorPage="true"属性 --%>
<%out.write("是否相同"+(exception==pageContext.getException()));%><br/>
</body>
</html>
pageContext
域对象
作用:保存数据和得到数据
,
在资源之间共享数据。
pageContext
的作用范围:仅在当前的
jsp
页面中有效!!
2.1
设置数据
默认情况,把数据设置到
page
域中
pageConetxt.setAtribute("name");
可以设置到其他域中
pageContext.setAttribute("name", PageContext.
域名称
)
域名称:
PAGE_SCOPE, REQUEST_SCOPE ,SESSION_SCOPE,APPLICATION_SCOPE
2.2
得到数据
默认情况下,从
page
域得到数据
pageContext.getAttribute("name");
可以指定域得到
pageContext.getAttribute("name",PageContext.
域名称
);
自动搜索域得到数据
pageContext.findAttribute("name");
搜索规则:从四个域中按顺序查询数据:
page -> request -> session -> application,
如果找到,则返回该域的数据,如果没找到继续找完四个域为止,
如果四个域都没有,那么返回
null
<%--2.通过pageContext保存域数据 --%>
<%
//2.1往pageContext域中保存数据(默认情况下,是保存在page域中的)
pageContext.setAttribute("name","eric");
//2.2往其他域保存数据
pageContext.setAttribute("message","page's message",PageContext.PAGE_SCOPE );
pageContext.setAttribute("message","request's message",PageContext.REQUEST_SCOPE );
pageContext.setAttribute("message","session's message",PageContext.SESSION_SCOPE);
pageContext.setAttribute("message","applicaton'smessage",PageContext.APPLICATION_SCOPE);
%>
<hr/>
<%--3.通过pageContext获取域数据 --%>
<%=
//3.1获取pagecontext域保存的数据
pageContext.getAttribute("name")
%>
<br/>
<%=
//3.2获取request域保存的数据
pageContext.getAttribute("message",PageContext.REQUEST_SCOPE)
%>
<br/>
<%=
//3.3通过pageContext.findAttribute方法按顺序查找域中的数据
pageContext.findAttribute("message")
%>