19.JSP的内置对象

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应用中使用。(全局的)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值