1.引入
在jsp开发中,会频繁使用到一些对象。例如HttpSession,ServletContext,ServletContext,HttpServletRequet。如果我们每次要使用这些对象都去创建这些对象就显示非常麻烦。所以Sun公司设计Jsp时,在jsp页面加载完毕之后就会自动帮开发者创建好这些对象,而开发者只需要直接使用这些对象调用方法即可!,这些创建好的对象就叫内置对象。
9大内置对象
内置名称 | 类型 |
request | HttpServletRequest |
response | HttpServletResponse |
config | ServletConfig |
application | ServletContext |
session | HttpSession |
exception | Throwable |
out | JspWriter |
pageContext | PageContext |
page | Object(this) |
out对象
out对象类型,JspWriter类,相当于带缓存的PrintWriter
PrintWriter: wrier(内容): 直接向浏览器写出内容。
JspWriter:writer(内容): 向jsp缓冲区写出内容
当满足以下条件之一,缓冲区内容写出:
1)缓冲区满了
2)刷新缓存区
3)关闭缓存区
4)执行完毕jsp页面
<%@ page language="java" import="java.util.*" pageEncoding="utf-8" buffer="1kb"%><%
for(int i=1;i<=1024;i++){
out.write("a");
}
//查看缓存区大小
System.out.println("当前缓存区大小:"+out.getBufferSize());
//查看缓存区剩余大小
System.out.println("缓存区剩余大小:"+out.getRemaining());
//刷新缓存
//out.flush();
response.getWriter().write("123");
%>
</body>
</html>
原理图:
pageContext对象
pageContext对象的类型是PageContext,叫jsp的上下文对象
1.可以获取其他八个内置对象
使用场景: 在自定义标签的时候,PageContext对象频繁使用到
<% //1)可以获取其他8个内置对象 response.getWriter().write("是否相等?"+(out==pageContext.getOut()) +"<br/>"); response.getWriter().write("是否相等?"+(session==pageContext.getSession())); %> |
2本身是一个域对象
ServletContext context域
HttpServletRequet request域
HttpSession session域 --Servlet学习的
PageContext page域 --jsp学习的
作用: 保存数据和获取数据,用于共享数据
#保存数据
1)默认情况下,保存到page域
pageContext.setAttribute("name");
2)可以向四个域对象保存数据
pageContext.setAttribute("name",域范围常量)
#获取数据
1)默认情况下,从page域获取
pageContext.getAttribute("name")
2)可以从四个域中获取数据
pageContext.getAttribute("name",域范围常量)
域范围常量:
PageContext.PAGE_SCOPE
PageContext.REQUEST_SCOPE
PageContext..SESSION_SCOPE
PageContext.APPLICATION_SCOPE
<%
//保存数据。默认情况下,保存在page域中
pageContext.setAttribute("message","page's message");
pageContext.setAttribute("message","request's messsage",PageContext.REQUEST_SCOPE);//保存到request域中
pageContext.setAttribute("message","session's messsage",PageContext.SESSION_SCOPE);//保存到sessio域中
pageContext.setAttribute("message","application's messsage",PageContext.APPLICATION_SCOPE);//保存到context域中
//request.setAttribute("message","request's message"); 等价于上面的代码
%>
<%--
原则:
1)在哪个域中保存数据,就必须从哪个域取出数据!!!
--%>
<%=pageContext.getAttribute("message",PageContext.PAGE_SCOPE) %><br/>
<%=pageContext.getAttribute("message",PageContext.REQUEST_SCOPE) %><br/>
<%=pageContext.getAttribute("message",PageContext.SESSION_SCOPE) %><br/>
<%=pageContext.getAttribute("message",PageContext.APPLICATION_SCOPE) %><br/>
<hr/>
3)自动在四个域中搜索数据
pageContext.findAttribute("name");
顺序: page域 -> request域 -> session域- > context域(application域)
<%--
findAttribute(): 在四个域自动搜索数据
顺序: page域 -> request域 -> session域 -> context域
--%>
<%=pageContext.findAttribute("message") %>
<% //request.getAttribute("message") %><br/>
Jsp中的四个域对象
四个域对象:
pageContext page域
request request域
session session域
application context域
1)域对象作用: 保存数据 和 获取数据 ,用于数据共享。
2)域对象方法:
setAttribute("name",Object) 保存数据
getAttribute("name") 获取数据
removeAttribute("name") 清除数据
3)域对象作用范围:
page域: 只能在当前jsp页面中使用(当前页面),即是同一个servlet里面
request域: 只能在同一个请求中使用(转发)
session域: 只能在同一个会话(session对象)中使用(私有的)
context域: 只能在同一个web应用中使用。(全局的)