jsp-9大内置对象简介

产生背景

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

request

response

config

session

application

在JSP中,尤其重要的是pageContext对象。

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

既然它代表了JSP页面编译后的内容,理所当然的:它封装了对其他8大内置对象的引用!,也就是说,通过pageContext可以获取到其他的8个内置对象!

pageContext作为域对象

  • 类似于request,session,ServletContext作为域对象而言都有以下三个方法

    • setAttribute(String name,Objcet o)

    • getAttribute(String name)

    • removeAttribute(String name)

  • 当然了,pageContext也不例外,pageContext也有这三个方法

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

  • 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

  • pageContexst还有这么一个方法:

    • findAttribute(String name)

  • 该方法会查找各个域的属性,从小到大开始寻找!也就是page—>request->session->application。

out对象:

  • out对象用于向浏览器输出数据,与之对应的是Servlet的PrintWriter对象。然而这个out对象的类型并不是PrintWriter,是JspWriter,可以简单理解为:JspWriter就是带缓存的PrintWrieter

  • 只有向out对象中写入了内容,且满足如下任何一个条件时,out对象才去调用ServletResponse.getWriter方法,并通过该方法返回的PrintWriter对象将out对象的缓冲区中的内容真正写入到Servlet引擎提供的缓冲区中

    • 设置page指令的buffer属性关闭了out对象的缓存功能

    • out对象的缓冲区已满

    • 整个JSP页面结束

  • 一般我们在JSP页面输出都是用表达式(<%=%>),所以out对象用得并不是很多

 page对象

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

 exception对象

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

各对象作用域范围

  1. page【只在一个页面中保存属性,跳转页面无效】

  2. requet【只在一次请求中保存属性,服务器跳转有效,浏览器跳转无效】

  3. session【在一个会话范围中保存属性,无论何种跳转均有效,关闭浏览器后无效】

  4. application【在整个服务器中保存,所有用户都可以使用】

应用场景:

  1. request:如果客户向服务器发请求,产生的数据,用户看完就没用了,像这样的数据就存在request域,像新闻数据,属于用户看完就没用的

  2. session:如果客户向服务器发请求,产生的数据,用户用完了等一会儿还有用,像这样的数据就存在session域中,像购物数据,用户需要看到自己购物信息,并且等一会儿,还要用这个购物数据结帐

  3. servletContext:如果客户向服务器发请求,产生的数据,用户用完了,还要给其它用户用,像这样的数据就存在servletContext域中,像聊天数据

总结

  1. request 用户端请求,此请求会包含来自GET/POST请求的参数

  2. response 网页传回用户端的回应

  3. pageContext 网页的属性是在这里管理,代表的编译后JSP内容

  4. session 与请求有关的会话期

  5. application servlet 正在执行的内容

  6. out 用来传送回应的输出

  7. config servlet的构架部件

  8. page JSP网页本身

  9. exception 针对错误网页,未捕捉的例外

原文地址:https://www.cnblogs.com/hongchengshise/p/10383169.html