zoukankan      html  css  js  c++  java
  • java基础81 jsp的内置对象(网页知识)

    1、什么是内置对象?

      在jsp开发中,会频繁使用到一些对象,如:HttpSession,ServletContext,HttpServletRequest。
          如果每次使用这些对象时,都要去创建对象 显示非常麻烦。所有sun公司就设计jsp时,在jsp页面加载完毕后会自动帮助开发者创建好这些对象,而开发者只需要直接使用这些对象去调用方法即可,这些创建好的对象就叫内置对象。

    举例:

    Servlet:
        HttpSession session = Request.getSession(true);(需要开发者动手做)
    Jsp:
      Tomcat服务器:
         HttpSession session = request.getSession(true);(不需要开发者动手做)
    开发者只需要用session对象去调用相应的方法即可,比如:session.getId();

    2、9大内置对象

    内置对象名 对应类型
    request      
    response   
    config            
    application                
    session                  
    exception     
    page         
    out       
    pageContext    
    HttpServletRequest
    HttpServletResponse
    ServletConfig
    ServletContext
    HttpSession
    Throwable
    Object(this)
    JspWriter
    pageContext

    2.1、Out 对象

      out对象是jspWrite类中的,相当于带缓冲的PrintWriter
            printWriter:
                 writer(内容):直接向浏览器写出内容
            jspWriter
                writer(内容):向jsp缓冲区写出内容

      当满足以下条件之一,缓冲区内容就会写出(如下面代码)
          1) 缓冲区满了
          2) 刷新缓冲区
          3) 关闭缓冲区
          4) 执行完jsp页面

     1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8" buffer="1kb" %>
     2 <%
     3 String path = request.getContextPath();
     4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
     5 %>
     6 
     7 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
     8 <html>
     9   <head>
    10     <base href="<%=basePath%>">
    11     
    12     <title>My JSP 'MyJsp.jsp' starting page</title>
    13     
    14     <meta http-equiv="pragma" content="no-cache">
    15     <meta http-equiv="cache-control" content="no-cache">
    16     <meta http-equiv="expires" content="0">    
    17     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    18     <meta http-equiv="description" content="This is my page">
    19     <!--
    20     <link rel="stylesheet" type="text/css" href="styles.css">
    21     -->
    22   </head>
    23   <body>
    24        <%
    25           //方法1:顶部设置缓冲区的大小为1Kb(buffer="1kb"26            for(int i=1;i<=500;i++){
    27            out.write("123");
    28            }
    29            //查看缓冲区大小
    30            System.out.println("当前缓冲区的大小:"+out.getBufferSize());
    31            //查看缓冲区剩余大小
    32            System.out.println("剩余缓冲区大小:"+out.getRemaining());
    33            //方法2:刷新缓存
    34            //out.flush();
    35         
    36            response.getWriter().write("a"); //解析:方法1或2,都能让123先输出来,最后输出a;如果两者都去掉,那么先输出a,后输出123.
    37         %>
    38   </body>
    39 </html>

    2.2、pageContext 对象

         PageContext对象类型是PageContextjsp的上下文对象

      2.2.1、可以获取其他八个内置对象
     1 public class pageContext{
     2     public void _jspService(){
     3          //创建了对象
     4          HttpSession session=””…
     5          ServletConfig config=””….
     6          //把8个常见使用的内置对象封装到了PageContext对象中了
     7          public void method(PageContext pageContext){
     8               //从pageContext对象中获取其他八个内置对象
     9               JspWriter out=pageContext.getOut();
    10               ....
    11          }
    12      }
    13 }
       2.2.2、pageContext 对象,本身就是一个域对象

          ServletContext     context域对象
          HttpServletRequest    request域对象
          HttpSession    session域对象
          PageContext    page  域对象

          作用:保存数据和获取数据,用于共享数据

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

          #获取数据
             1)默认情况,从page域获取:PageContext.getAttribute(“name”);
             2)可以从4个域中获取数据:PageContext.getAttribute(“name”,域范围常量);
                  域范围常量
                        PageContext.PAGE_Scope
                        PageContext.REQUEST_SCOPE
                        PageContext.SESSION_SCOPE
                        PageContext.APPLICATION_SCOPE
             3)自动在四个域中搜索数据:PageContext.findAttribute(“name”);
    顺序:page域 ----> request域 ----> session域 ----> context域(application域)               注:请求转发:request就有值;浏览器不关闭:session就有值;服务器不关闭:context域(application域)就有值

     1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>
     2 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
     3 <html>
     4   <head>
     5     <title>pageContext对象</title>
     6   </head>
     7   <body>
     8     <%
     9         //1)可以获取其他八个内置对象
    10         response.getWriter().write("是否相等?"+(out==pageContext.getOut())+"<br/>");
    11         response.getWriter().write("是否相等?"+(session==pageContext.getSession())+"<br/>");
    12     %>
    13     <%--
    14          2)pageContext作为作用域对象使用
    15              2.1可以往不同域对象存取数据
    16     --%>
    17     <%
    18         //保存数据,默认情况下,保存在page域中
    19         pageContext.setAttribute("message","page message");
    20         pageContext.setAttribute("message","request message",pageContext.REQUEST_SCOPE);//保存到request域中
    21         pageContext.setAttribute("message", "session message",pageContext.SESSION_SCOPE);//保存到session域中
    22         pageContext.setAttribute("message","application message",PageContext.APPLICATION_SCOPE);//保存到context域中
    23         // request.setAttribute("message","request message");//等价于上面代码
    24     %>
    25     <%
    26         //获取数据
    27         String message=(String)pageContext.getAttribute("message");
    28         out.write(message);
    29     %>
    30     <%--
    31         原则:
    32         1)在哪个域中存储数据,就必须在哪个域中取出数据!!!
    33     --%>
    34     <hr/>
    35     <%=pageContext.getAttribute("message",pageContext.PAGE_SCOPE) %><br/>
    36     <%=pageContext.getAttribute("message",pageContext.REQUEST_SCOPE) %><br/>
    37     <%=pageContext.getAttribute("message",pageContext.SESSION_SCOPE) %><br/>
    38     <%=pageContext.getAttribute("message",pageContext.APPLICATION_SCOPE) %><br/>
    39     <hr/>
    40     <%-- findAttribute():在四个域中自动搜索数据
    41         顺序:page域-->request域--->session域--->application域
    42     --%>
    43         
    44     <%=pageContext.findAttribute("message") %><br/>
    45     <%=session.getAttribute("message") %>
    46     <%
    47         //转发
    48         //request.getRequestDispatcher("/pageContext2.jsp").forward(request, response);
    49         response.sendRedirect("/pageContext2.jsp");
    50     %>
    51   </body>
    52 </html>

    3、jsp中的四个域对象

        PageContext       page域
        request           reuquest域
        session           session域
        application        context域

      1)域对象的作用
              保存数据和获取数据   ,用于数据共享.
      2)域对象方法
              SetAttribute(“name”,Object)保存数据
              getAttribute(“name”)获取数据
              removeAttribute(“name”)清除数据
      3)域对象的范围
              Page域:只能在当前jsp页面使用(当前页面)
              Request域:只能在同一个请求中使用(转发)
              Session域:只能在同一个会话(Seesion对象)中使用(私有的)
              Context域:只能在同一个文本应用中使用(全局的)

     1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>
     2 <%
     3 String path = request.getContextPath();
     4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
     5 %>
     6 
     7 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
     8 <html>
     9   <head>
    10     <base href="<%=basePath%>">
    11     
    12     <title>My JSP 'pageContext3.jsp' starting page</title>
    13     
    14     <meta http-equiv="pragma" content="no-cache">
    15     <meta http-equiv="cache-control" content="no-cache">
    16     <meta http-equiv="expires" content="0">    
    17     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    18     <meta http-equiv="description" content="This is my page">
    19     <!--
    20     <link rel="stylesheet" type="text/css" href="styles.css">
    21     -->
    22 
    23   </head>
    24   
    25   <body>
    26     page域 <%=pageContext.getAttribute("message",PageContext.PAGE_SCOPE) %><br/>
    27     reuest域 <%=pageContext.getAttribute("message",PageContext.REQUEST_SCOPE) %><br/>
    28     session域 <%=pageContext.getAttribute("message",pageContext.SESSION_SCOPE) %><br/>
    29     context域 <%=pageContext.getAttribute("message",pageContext.APPLICATION_SCOPE) %><br/>
    30   </body>
    31 </html>

    原创作者:DSHORE

    作者主页:http://www.cnblogs.com/dshore123/

    原文出自:https://www.cnblogs.com/dshore123/p/9816583.html

    欢迎转载,转载务必说明出处。(如果本文对您有帮助,可以点击一下右下角的 推荐,或评论,谢谢!

  • 相关阅读:
    删数问题
    八中公司_二分图带权最大匹配模板题
    完美子图(这道题太难了,得写下来要不回头又忘了)
    最近集训的图论(思路+实现)题目汇总(内容包含tarjan、分层图、拓扑、差分、奇怪的最短路):
    方格取数(简单版)+小烈送菜(不知道哪来的题)-----------奇怪的dp增加了!
    单调队列优化题:最大数(P1198)
    单调队列+线性dp题Watching Fireworks is Fun (CF372C)
    关于看了几道洛谷灰题(暂无评定)的感想
    洛谷的奇妙今日运势
    互不侵犯(洛谷P1896)
  • 原文地址:https://www.cnblogs.com/dshore123/p/9816583.html
Copyright © 2011-2022 走看看