JSP内置对象

内置对象的概述

   在JSP页面中,有一些对象需要频繁使用,如果每次都重新创建这些对象则会非常麻烦。为了简化

Web应用程序的开发,JSP2.0规范中提供了9个隐式(内置对象),他们是JSP默认创建的,可以直接在JSP

页面中使用。这9个隐含对象的名称、类型和描述如表1-2所示。



    名称           类型                                   描述

       out            javax.servlet.jsp.JspWriter             用于页面输出

    request        javax.servlet.http.HttpServletRequest   得到用户请求信息

    response       javax.servlet.http.HttpServletResponse  服务器向客户端的回应信息

    config         javax.servlet.ServletConfig             服务器配置,可以取得初始化参数

    session        javax.servlet.http.HttpSession          用来保存用户的信息

    application    javax.servlet.ServletContext            所有用户的共享信息

    page           java.lang.Object                        指当前页面转换后的Servlet类的实例

    pageContext    javax.servlet.jsp.PageContext           JSP的页面容器

    exception      java.lang.Throwable                     表示JSP页面所发生的异常,在错误页中
                                                           才起作用

out对象

    在JSP页面中,经常需要向客户端发送文本内容,这时,可以使用out对象来实现。out对象是javax.servlet

.jsp.JspWriter类的实例对象,它的作用与ServletResponse.getWriter()方法返回的PrintWriter对象非常相似,

都是用来向客户端发送文本形式的实体内容。不同的是,out对象的类型为JspWriter,它相当于一种带缓存功能的

PrintWriter。接下来,通过一张图来描述JSP页面的out对象与Servlet引擎提供的缓冲之间的工作关系,具体如图

1-11所示。

                 Response          JspWriter对象
                 的缓冲区          的缓冲区
                    |                   |
                |---------|        |------------|    
                |         |        |            |
servlet引擎<----|         |<-------|            |<-----JSP页面 
                |         |    |   |            |   |
                |         |    |   |            |   |
                |---------|    |   |------------|   |
                               |                    |
                    调用ServletResponse      调用out隐式对象的方法
                    .getWriter()方法返回     写入数据
                    的PrintWriter对象的
                    方法写入数据

                 图1-11  out对象与Servlet引擎的关系

    从图1-11可以看出,在JSP页面中,通过out隐式对象写入数据相当于将数据插入到JspWriter

对象的缓冲区,只有调用了ServletResponse.getWriter() 方法,缓冲区中的数据才能真正写入

到Servlet引擎所提供的缓冲区中。为了验证上述说法是否正确,接下来,通过一个具体的案例来

演示out对象的使用。

    在day12项目的WebContent目录下创建一个名称为out的JSP页面,如文件1-5所示。

              文件1-5  out.jsp

    <%@ page language="java" contentType="text/html;charset=UTF-8"%>
    <html>
    <head>
       <title>Insert title here</title>
    </head>
    <body>
        <% out.println("first line<br>");
           response.getWriter().println("second line<br>");
        %>
    </body>
    </html>

    启动Tomcat服务器,在浏览器地址栏中访问"http://localhost:8080/day12/out.jsp",浏览器的显示结果

如下所示:

    second line
    first line  

如上可以看出,尽管out.println语句位于response.getWriter().println()语句之前,但它的输出内容却在

后面。由此可以说明,**out对象通过print语句写入数据后,直到整个JSP页面结束,out对象中输入缓冲区的数据
(即:first line)  才真正写入到Servlet引擎提供的缓冲区中**,而response.getWriter().println()语句则是直

接把内容(即: second line)写入Servlet引擎提供的缓冲区中,Servlet引擎按照缓冲区的数据存放顺序输出内容。

pageContext对象

    在JSP页面中,使用pageContext对象可以获得JSP的其他8个隐式对象。pageContext对象是javax.servlet.jsp

.PageContext类的实例对象,它代表当前JSP页面的运行环境,并提供了一系列用于获取其他隐式对象的方法。

pageContext对象获取隐式对象的方法如表1-3所示。

            表1-3 pageContext获取隐式对象的方法

    方法名                             功能描述

    JspWriter getOut()                 用于获取out隐式对象

    Object getPage()                   用于获取page隐式对象

    ServletRequest getRequest()        用于获取request隐式对象

    ServletResponse getResponse()      用于获取response隐式对象

    HttpSession getSession()           用于获取session隐式对象

    Exception getException()           用于获取exception隐式对象

    ServletConfig getServletConfig()   用于获取config隐式对象

    ServletContext getServletContext() 用于获取application隐式对象

    表1-3中列举了pageContext获取其他隐式对象的方法,这样,当传递一个pageContext对象后,就可以通过

这些方法轻松地获取到其他8个隐含对象的方法,这样,当传递一个pageContext对象后,就可以通过这些方法

轻松地获取到其他8个隐式对象了。

    pageContext对象不仅提供了获取隐式对象的方法,还提供了存储数据的功能。pageContext对象存储数据

是通过操作属性来实现的,表1-4列举了pageContext操作属性的一系列方法,具体如下:

            表1-4   pageContext操作属性的相关方法

    方法名称                                                 功能描述

    void setAttribute(String name,Object value,int scope)   用于设置pageContext对象的属性

    Object getAttribute(String name,int scope)              用于获取pageContext对象的属性

    void removeAttribute(String name,int scope)             删除指定范围内名称为name的属性

    void removeAttribute(String name)                       删除所有范围名称为name的属性

    Object findAttribute(String name)                       从4个域对象中查找名称为name的属性

    表1-4 列举了pageContext 对象操作属性的相关方法,其中,参数name指定的是属性名称,参数scope指定的

是属性的作用范围。pageContext对象的作用范围有4个值,具体如下:

    ● PageContext.PAGE_SCOPE:表示页面范围

    ● PageContext.REQUEST_SCOPE:表示请求范围

    ● PageContext.SESSION_SCOPE:表示会话范围

    ● PageContext.APPLICATION_SCOPE:表示Web应用程序范围

    需要注意的是,当使用 findAttribute() 方法查找名称为name的属性时,会按照page、request、session

和application的顺序依次进行查找,如果找到,则返回属性的名称,否则返回null。接下来,通过一个案例来

演示pageContext对象的使用。

    在day12 项目的WebContext目录下创建一个名称为pageContext.jsp的页面,编辑后如文件1-6所示。   

       文件1-6 pageContext.jsp

   <%@ page language="java" contentType="text/html;charset=UTF-8"%>
    <html>
    <head>
       <title>pageContext</title>
    </head>
    <body>
        <% 
           //获取request对象
           HttpServletRequest req=(HttpServletRequest) pageContext.getRequest();
           //设置page范围内属性
           pageContext.setAttribute("str","Java",pageContext.PAGE_SCOPE);
           //设置request范围内属性
           req.setAttribute("str","Java Web");
           //获得的page范围属性
           String str1=(String) pageContext.getAttribute("str",pageContext.PAGE_SCOPE);
           //获得的request范围属性
           String str2=(String) pageContext.getAttribute("str",pageContext.REQUEST_SCOPE);
        %>

         <%="page 范围:"+str1 %><br>
         <%="request 范围:"+str2 %><br>
    </body>
    </html> 

    在上述代码中,首先使用pageContext获取了request对象,并设置page范围内属性:然后使用获取的

request对象设置了request范围内属性,接下来使用pageContext对象获得page和request范围内的相应属性,

最后使用JSP表达式输出数据。

   启动Tomcat服务器,在浏览器的地址栏中输入地址"http://localhost:8080/day17/pageContext.jsp"

访问pageContext.jsp 页面,浏览器显示的结果如图1-13所示。

  page 范围:Java
  request 范围:Java Web    

  如上的显示结果可以看出,通过pageContext对象可以获取到request对象,并且还可以获取到不同范围内的属性。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值