JSP第二篇【内置对象的介绍、4种属性范围、应用场景】

小编 2026-06-27 阅读:509 评论:0
什么是JSP内置对象JSP引擎在调用JSP对应的jspServlet时,会传递或创建9个与web...

什么是JSP内置对象

JSP引擎在调用JSP对应的jspServlet时,会传递或创建9个与web开发相关的对象供jspServlet使用。JSP技术的设计者为便于开发人员在编写JSP页面时获得这些web对象的引用,特意定义了9个相应的变量,开发人员在JSP页面中通过这些变量就可以快速获得这9大对象的引用

细心的朋友会发现,我们没有在JSP页面上定义过out对象,却可以直接使用!其实out对象就是JSP内置对象之一

九个内置对象:

  • pageContext
  • page
  • config
  • request
  • response
  • session
  • application
  • exception
  • out

out对象

out对象的API

  • int getBufferSize()【得到缓存大小】
  • int getRemaining()【得到未使用缓存的大小】
  • boolean isAutoFlush()
  • void println()
  • void flush()
  • void close()
  • void clearBuffer()
  • void clear()

  • out对象用于向浏览器输出数据,与之对应的是Servlet的PrintWriter对象。然而这个out对象的类型并不是PrintWriter,是JspWriter

JSP第二篇【内置对象的介绍、4种属性范围、应用场景】

  • 我们可以简单理解为:JspWriter就是带缓存的PrintWrieter

  • out对象的原理如下:

JSP第二篇【内置对象的介绍、4种属性范围、应用场景】

  • 只有向out对象中写入了内容,且满足如下任何一个条件时,out对象才去调用ServletResponse.getWriter方法,并通过该方法返回的PrintWriter对象将out对象的缓冲区中的内容真正写入到Servlet引擎提供的缓冲区中
    • 设置page指令的buffer属性关闭了out对象的缓存功能
    • out对象的缓冲区已满
    • 整个JSP页面结束
  • 一般我们在JSP页面输出都是用表达式(<%=%>),所以out对象用得并不是很多

request

  • 内置对象request其实就是HttpServletRequest,在Servlet讲解的时候已经详细说明了,没什么好说的

JSP第二篇【内置对象的介绍、4种属性范围、应用场景】

response

  • 内置对象response其实就是HttpServletResponse,在Servlet讲解的时候已经详细说明了,没什么好说的

JSP第二篇【内置对象的介绍、4种属性范围、应用场景】

config

  • 内置对象config其实就是ServletConfig,在Servlet讲解的时候已经详细说明了,没什么好说的

JSP第二篇【内置对象的介绍、4种属性范围、应用场景】

session

  • 内置对象session其实就是HttpSession。,在Servlet讲解的时候已经详细说明了,没什么好说的

JSP第二篇【内置对象的介绍、4种属性范围、应用场景】

注意:在page指令配置如下信息,session将不可使用

    <%@page session="false" %>

application

  • 内置对象application其实就是ServletContext对象,在Servlet讲解的时候已经详细说明了,没什么好说的

JSP第二篇【内置对象的介绍、4种属性范围、应用场景】

page

  • 内置对象page是HttpJasPage对象,其实page对象代表的就是当前JSP页面,是当前JSP编译后的Servlet类的对象。也就是说:page对象相当于普通java类的this

exception

  • 内置对象exception是java.lang.Exception类的对象,exception封装了JSP页面抛出的异常信息。exception经常被用来处理错误页面

  • 前面我们已经讲过了怎么设置错误页面了,下面我们就来简单使用一下exception对象吧

  • 1.jsp页面
    ```JSP

    <%@ page contentType="text/html;charset=UTF-8" language="java" errorPage="error.jsp" %>

    <%--模拟空指针异常的错误--%><% String sss = null; sss.length();%>

```

  • error.jsp页面
    <%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" %>        <html>    <head>        <title>错误页面</title>    </head>    <body>        <%        out.println("程序抛出了异常:" + exception);    %>        </body>    </html>
  • 效果:

JSP第二篇【内置对象的介绍、4种属性范围、应用场景】

pageContext

pageContext是内置对象中最重要的一个对象,它代表着JSP页面编译后的内容(也就是JSP页面的运行环境)!

pageContext获取8个内置对象

  • 既然它代表了JSP页面编译后的内容,理所当然的:它封装了对其他8大内置对象的引用!,也就是说,通过pageContext可以获取到其他的8个内置对象!
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>    <html>    <head>        <title>获取八大内置对象</title>    </head>    <body>    <%            System.out.println(pageContext.getSession());        System.out.println(pageContext.getRequest());        System.out.println(pageContext.getResponse());            System.out.println(pageContext.getException());            System.out.println(pageContext.getPage());        System.out.println(pageContext.getServletConfig());        System.out.println(pageContext.getServletContext());        System.out.println(pageContext.getOut());        %>        </body>    </html>
  • 看下效果:

JSP第二篇【内置对象的介绍、4种属性范围、应用场景】

pageContext作为域对象

  • 类似于request,session,ServletContext作为域对象而言都有以下三个方法
    • setAttribute(String name,Objcet o)
    • getAttribute(String name)
    • removeAttribute(String name)
  • 当然了,pageContext也不例外,pageContext也有这三个方法

  • pageContext本质上代表的是当前JSP页面编译后的内容,作为域对象而言,它就代表着当前JSP页面(也就是page)!也就是说:pageContext域对象只在page范围内有效,超出了page范围就无效了

  • 首先来看看在page范围内能不能使用

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>    <html>    <head>        <title>使用page域对象</title>    </head>    <body>    <%        pageContext.setAttribute("name", "zhongfucheng");    %>    <%        String value = (String) pageContext.getAttribute("name");        System.out.println(value);    %>        </body>    </html>
  • 效果如下:

JSP第二篇【内置对象的介绍、4种属性范围、应用场景】

  • 我们现在来试验一下是不是超出了page范围就无效了!

  • 在2.jsp中request域对象设置属性

        <%@ page contentType="text/html;charset=UTF-8" language="java" %>    <html>    <head>        <title>request域对象设置属性</title>    </head>    <body>    <%        //这是request域对象保存的内容        request.setAttribute("name","zhongfucheng");    %>    <%--跳转到1.jsp中--%>    <jsp:forward page="1.jsp"/>        </body>    </html>
  • 企图在1.jsp中pageContext取出request存进去的属性
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>    <html>    <head>        <title>在page域对象获取属性</title>    </head>    <body>        <%        //企图获取request域对象存进的属性        String value = (String) pageContext.getAttribute("name");        System.out.println(value);    %>        </body>    </html>
  • 效果如下:

JSP第二篇【内置对象的介绍、4种属性范围、应用场景】


  • pageContext本质上代表着编译后JSP的内容,pageContext还可以封装了访问其他域的方法

  • 上面的pageContext默认是page范围的但pageContext对象重载了set、get、removeAttribute这三个方法
    • getAttribute(String name,int scope)
    • setAttribute(String name,Object value,int scope)
    • removeAttribute(String name,int scope)
  • 多了一个设置域范围的一个参数,如果不指定默认就是page。当然了,pageContext把request、session、application、page这几个域对象封装着了静态变量供我们使用
    • PageContext.APPLICATION_SCOPE
    • PageContext.SESSION_SCOPE
    • PageContext.REQUEST_SCOPE
    • PageContext.PAGE_SCOPE
  • 刚才我们没有使用重载方法的时候,使用pageContext是无法获取到request域对象设置的属性的。现在我们使用重载后的方法看一下能不能获取得到

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>    <html>    <head>        <title>在page域对象获取request域对象的属性</title>    </head>    <body>        <%        //使用重载的方法获取request域对象的属性        String value = (String) pageContext.getAttribute("name",pageContext.REQUEST_SCOPE);        System.out.println(value);    %>        </body>    </html>
  • 效果:

JSP第二篇【内置对象的介绍、4种属性范围、应用场景】


  • pageContexst还有这么一个方法:
    • findAttribute(String name)
  • 该方法会查找各个域的属性,从小到大开始寻找!也就是page—>request->session->application。这个是EL表达式的原理!,EL表达式后面会讲到!

  • 我们用此方法看能不能查找出request域对象的属性吧!

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>    <html>    <head>        <title>使用findAttribute</title>    </head>    <body>        <%            //使用findAttribute查找2.jsp中request域对象的属性        String value = (String) pageContext.findAttribute("name");        System.out.println(value);    %>        </body>    </html>
  • 效果如下:

JSP第二篇【内置对象的介绍、4种属性范围、应用场景】


引入和跳转

PageContext类中定义了一个forward方法和两个include方法来分别简化和替代RequestDispatcher.forward方法和include方法

  • pageContext.forward(String url)
  • pageContext.include(String url)

JSP第二篇【内置对象的介绍、4种属性范围、应用场景】


4种属性范围

到目前为止,我们已经学了4种属性范围了。

  1. page【只在一个页面中保存属性,跳转页面无效】
  2. requet【只在一次请求中保存属性,服务器跳转有效,浏览器跳转无效】
  3. session【在一个会话范围中保存属性,无论何种跳转均有效,关闭浏览器后无效】
  4. application【在整个服务器中保存,所有用户都可以使用】

  • 4个内置对象都支持以下的方法:
  1. setAttribute(String name, Object o )
  2. getAttribute(String name)
  3. removeAttribute(String name)

应用场景

  1. request:如果客户向服务器发请求,产生的数据,用户看完就没用了,像这样的数据就存在request域,像新闻数据,属于用户看完就没用的
  2. session:如果客户向服务器发请求,产生的数据,用户用完了等一会儿还有用,像这样的数据就存在session域中,像购物数据,用户需要看到自己购物信息,并且等一会儿,还要用这个购物数据结帐
  3. servletContext:如果客户向服务器发请求,产生的数据,用户用完了,还要给其它用户用,像这样的数据就存在servletContext域中,像聊天数据

如果文章有错的地方欢迎指正,大家互相交流。习惯在微信看技术文章的同学,可以关注微信公众号:Java3y

更多的文章可往:文章的目录导航
版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

热门文章
  • 机房智能化温湿度解决方式之POE供电以太网温湿度传感器

    机房智能化温湿度解决方式之POE供电以太网温湿度传感器
    机房智能化温湿度解决方式之POE供电以太网温湿度传感器 北京盈创力和电子科技有限公司 智能型TCP网口温湿度记录仪 北京IP网络温湿度记录仪厂家,北京盈创力和 北京智能型TCP网口温湿度记录仪IP网络温湿度记录仪是一种新型的基于TCP/IP协议双绞线以太网标准温湿度采集模块,利用它可以实现现场温度值、相对湿度值的采集,同时利用其自身的RJ45通信接口可以方便地和机房监控主机或交换机集线器进行联网。 工作于-40℃~85℃工业级带...
  • Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering

    Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering
    Problem Statement 我们考虑一个具有马尔可夫性质、非线性、非高斯的状态空间模型(State Space Model):对于一个时间序列上的观测结果{yt,t∈N}\\{ y_t , t \\in N \\}{yt​,t∈N},我们认为每个观测结果yty_tyt​的生成依赖于一个无法直接观察的隐变量xt∈{xt,t∈N}x_t \\in \\{x_t , t \\in N \\}xt​∈{xt​,t∈N},即:p(...
  • HTTP状态保持的原理

    HTTP状态保持的原理
    a)在用户登录之后,浏览器返回响应的时候会在响应中添加上cookieb)浏览器接收到cookie之后会自动保存c)当用户再次请求同一服务器中的其他网页的时候,浏览器会自动带上之前保存的cookied)服务接收到请求之后可以请 request 对象中取到cookie 判断当前用户是否登录  Http是无状态的,就是连接时数据互通,关闭后...
  • Hive 系统函数及示例

    Hive 系统函数及示例
    查看所有系统函数 show functions; 函数分类 内置函数【系统函数】 数学函数: floor、round、ceil、cos、log2等 字符串函数: length、reverse、trim、lower、get_json_object、repeat等 收集函数: size 转换函数: cast 日期函数: year、month、datediff、date、date_add等 条件函数: coalesce、case…w...
  • CSRF的原理和防范措施

    CSRF的原理和防范措施
    a)攻击原理:i.用户C访问正常网站A时进行登录,浏览器保存A的cookieii.用户C再访问攻击网站B,网站B上有某个隐藏的链接或者图片标签会自动请求网站A的URL地址,例如表单提交,传指定的参数iii.而攻击网站B在访问网站A的时候,浏览器会自动带上网站A的cookieiv.所以网站A在接收到请求之后可判断当前用户是登录状态,所以...
标签列表