JSP的内置对象

Jsp的内置对象

  • 什么是内置对象: 在jsp开发中,会频繁使用到一些对象, 例如HttpSession, ServletContext, ServletContext, HttpServletRequet。如果我们每次要使用这些对象都去创建这些对象就显示非常麻烦。所以Sun公司设计Jsp时,在jsp页面加载完毕之后就会自动帮开发者创建好这些对象,而开发者只需要直接使用这些对象调用方法即可!这些创建好的对象就叫内置对象!
  • 举例:
    • servlet: HttpSession session = request.getSession(true); (需要开发者做)
    • jsp:
      • tomcat服务器: HttpSession session = request.getSession(true);(不需要开发者做)
      • 开发者做的: session.getId();

JSP-9大内置对象(内置对象名 : 类型)

  • request : HttpServletRequest
  • response : HttpServletResponse
  • config : ServletConfig
  • application : ServletContext
  • session : HttpSession
  • exception : Throwable
  • page : Object(this)
  • out : JspWriter
  • pageContext : PageContext

Out对象

  • out对象类型,JspWriter类,相当于带缓存的PrintWriter
    • PrintWriter.wrier(内容) : 直接向浏览器写出内容
    • JspWriter.writer(内容) : 向jsp缓冲区写出内容(默认8kb)
  • JSP页面缓冲机制 :
    • JspWriter首先写到JspWriter缓冲区, 然后当缓冲区满足下面4个条件时, 缓冲区的内容会向外写入PrintWriter到的对象当中,最后PrintWriter的write方法直接输送到浏览器中
    • 当满足以下条件之一,缓冲区内容写出:
      1)缓冲区满了 :
      2)刷新缓存区 : out.flush
      3)关闭缓存区 : buffer = "0kb"
      4)执行完毕jsp页面 :
  • 方法:
    • out.flush() : 刷新缓存
    • out.getRemaining : 查看缓冲区剩余大小
    • out.getBufferSize : 查看缓冲区大小
<%@ 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对象中获取其他8个内置对象
  • 使用场景: 在自定义标签的时候,PageContext对象频繁使用到!
    JspWriter out =pageContext.getOut();
    HttpServletRequest rquest = pageContext.getRequest();
  1. 本身是一个域对象
  • ServletContext : context域
  • HttpServletRequet : request域
  • HttpSession : session域
    Servlet中的域对象: ServletContext, HttpServletRequet, HttpSession
  • PageContext : page域 (jsp特有的)
    • 作用 : 保存数据和获取数据,用于共享数据

    • 保存数据
      1)默认情况下,保存到page域 : pageContext.setAttribute("name");
      2)可以向四个域对象保存数据 : pageContext.setAttribute("name",域范围常量)

    • 获取数据
      1)默认情况下,从page域获取 : pageContext.getAttribute("name")
      2)可以从四个域中获取数据 : pageContext.getAttribute("name",域范围常量)

      • 域范围常量:
        1. PageContext.PAGE_SCOPE
        2. PageContext.REQUEST_SCOPE
        3. PageContext..SESSION_SCOPE
        4. PageContext.APPLICATION_SCOPE

      3)自动在四个域中搜索数据: pageContext.findAttribute("name");

      顺序 : page域 -> request域 -> session域- > context域(application域)

Jsp中的四个域对象 :

  1. 简介:
  • pageContext : page域
  • request : request域
  • session : session域
  • application : context域
  1. 域对象作用:保存数据和获取数据, 用于数据共享
  2. 域对象方法:
  • setAttribute("name",Object) : 保存数据
  • getAttribute("name") : 获取数据
  • removeAttribute("name") : 清除数据
  1. 域对象作用范围:
  • page域 : 只能在当前jsp页面中使用 (当前页面)
  • request域 : 只能在同一个请求中使用 (转发)
  • session域 : 只能在同一个会话 (session对象) 中使用 (私有的)
  • context域 : 只能在同一个web应用中使用(全局的)
<%@ page language="java" import="java.util.*" pageEncoding="utf-8" 
isErrorPage="true" 
session="true"
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head> 
    <title>pageContext对象</title>  
  </head>
  
  <body>
    从四个域中获取数据
    page域 :<% = pageContext.getAttribute("message",PageContext.PAGE_SCOPE) %><br/>
    request域 : <% = pageContext.getAttribute("message",PageContext.REQUEST_SCOPE) %><br/>
    session域 : <% = pageContext.getAttribute("message",PageContext.SESSION_SCOPE) %><br/>
    context域 : <% = pageContext.getAttribute("message",PageContext.APPLICATION_SCOPE) %><br/>

    <%
        //1)可以获取其他8个内置对象
        //response.getWriter().write("是否相等?"+(out==pageContext.getOut()) +"<br/>");
        //response.getWriter().write("是否相等?"+(session==pageContext.getSession()));
     %>
     
     <%--
        2)pageContext作为域对象使用
                2.1 可以往不同域对象中存取数据
      --%>
      <%
        //保存数据。默认情况下,保存在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"); 等价于上面的代码
 
       %>
       
       <%
        //获取数据
        //String message = (String)pageContext.getAttribute("message");
        //out.write(message);
       
        %>
        <%--从request域中取出数据 --%>
        <%--
              原则: 
            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/>
        <%--
            findAttribute(): 在四个域自动搜索数据
                顺序: page域 -> request域  -> session域 -> context域
                
         --%>
         <%=pageContext.findAttribute("message") %>
         <% //request.getAttribute("message") %><br/>
      
      <%
        //转发
        // request.getRequestDispatcher("/03.pageContext2.jsp").forward(request,response);
        //重定向
        response.sendRedirect(request.getContextPath()+"/03.pageContext2.jsp");
       %>
  </body>
</html>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容