什么是内置对象?
在使用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")
%>
作者:mChenys
来源:CSDN
原文:https://blog.csdn.net/mChenys/article/details/80942829
版权声明:本文为博主原创文章,转载请附上博文链接!