1.JSP九大内置对象
jsp的九大内置对象如下所示:- out:该内置对象的类型是JspWriter,等同与response.getWriter(),用来向客户端发送文本数据;
- config:该内置对象的类型是ServletConfig,对应jsp翻译成的java文件中的ServletConfig对象;
- page:该内置对象的类型是Object,在jsp对应的java文件中有这样一句代码:Object page=this,即表示该内置对象代表当前对象;
- pageContext:该内置对象的类型是PageContext,是页面上下文对象,它是最后一个没讲的域对象,后面我们会详细讲解;
- exception:该内置对象的类型是Throwable,只有在错误页面中可以使用这个对象;
- request:该内置对象的类型是HttpServletRequest,代表请求对象,并且是一个域对象;
- response:该内置对象的类型是HttpServletResponse,代表响应对象;
- application:该内置对象的类型是ServletContext,一个应用只有一个application,也是一个域对象,域范围是整个应用;
- session:该内置对象的类型是HttpSession,也是一个域对象,但是不是每个JSP页面中都可以使用,如果在某个JSP页面中设置<%@page session=”false”%>,说明这个页面不能使用session。
2.pageContext对象
pageContext对象是页面上下文对象,一个页面就对应一个pageContext对象。我们知道Servlet有三大域对象,而jsp有四个域对象,分别是:- ServletContext:域范围是整个应用;
- session:域范围是整个会话,注意一个会话中只有一个用户,如果要统计站点的访问次数,使用的域是ServletContext,因为这个时候统计的是多个用户,而非一个用户;
- request:域范围是整个请求链;
- pageContext:域范围是一个jsp页面,在一个页面中存数据再取数据没有任何意义,所以这里所说的域指的是在当前jsp页面和当前jsp页面中使用的标签之间共享数据。
2.1pageContext对象的功能
pageContext对象有如下四个功能:- 域对象功能
- 代理其他域功能
- 全域查找功能
- 获取其他8个内置对象功能
- void setAttribute(String name,Object value)
- Object getAttribute(String name);
- Void removeAttribute(String name);

图1-1 pageContext
由图1-1可知,PageContext类继承了JspContext类,在其父类中定义了一些与域功能相关的方法,可以发现,除了在域功能中介绍的那三个方法,还有另外三个方法,如下所示:
- Object getAttribute(String name, int scope):
- int APPLICATION_SCOPE:当参数为这个常量时,表示从application域中获取数据;
- int PAGE_SCOPE:当参数是这个常量时,表示从page域中获取数据;
- int REQUEST_SCOPE:当参数是这个常量时,表示从request域中获取数据;
- int SESSION-SCOPE:当参数是这个常量时,表示从session域中获取数据。
- void setAttribute(String name,Object value,int scope):
- void removeAttribute(String name,int scope):
有了以上三个方法,pageContext对象就可以代理其他三个域对象了,例如:
pageContext.setAttribute(“name”,”zhangsan”,PageContext.SESSION_SCOPE).
(3)获取其他8个内置对象,也就是说可以通过pageContext对象获取jsp中其他的内置对象。pageContext是如何获取的呢?我们来看一下帮助文档,如图1-2所示:

图1-2 帮助文档
图1-2中,PageContext类中定义了如下八个方法:
getPage()、getRequest()、getResponse()、getServletConfig()、getServletContext()、getException()、getSession()等方法,其中getOut()放是在其父类中定义的,有了这些方法,pageContext对象自然能够获取其他八个内置对象了。
(4)全域查找功能,在PageContext类的父类中定义了如下方法:
- Object findAttribute(String name):该方法是从jsp的四个域page、request、session、application依次查找指定名称的域属性,如果找到就停止,这说明如果这四个域中存在同名的属性,那么返回的数据是从page范围中获取的。即表示谁的域范围越小,谁的优先级越高。
本文版权归传智播客 Java培训 学院所有,欢迎转载,转载请注明作者出处。谢谢!