JSP内置对象和域对象

什么是内置对象?
在使用 jsp 页面时,有某些对象 使用频率非常高 。如果我们每次都去创建这些对象再使用,就会变得麻烦。所以在加载完 jsp 页面时,就 把这些对象创建好了 ,我们只需要直接使用这些对象即可!!!!这些对象就叫内置对象。

JSP9大内置对象

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")
%>



猜你喜欢

转载自blog.csdn.net/mchenys/article/details/80942829