JSP为简化页面的开发提供了一些内部对象,这些内部对象不需要由JSP的编写者实例化,它们由容器实现和管理,
在所有的JSP页面中能使用内部对象。所有的隐含对象只能对Scriptlets或者表达式有用,在JSP申明中不可用。
JSP有以下的内部对象:
*request对象
*response对象
*pageContext对象
*session对象
*application对象
*out对象
*config对象
*page对象
*exception对象
| 对象 | 类型 | 描述 | 作用域 |
| request | javax.servlet.ServletRequest | 客户端的请求,通常是HttpServlet的子类,如果客户的请求中有参数,则该对象就有一个参数列表 | request(用户请求期)) |
| response | javax,servlet.ServletResponse的子类 | JSP页面的响应,是HttpS而vletResponse的子类,页面的属性和需求通过标准API访问相关的对象,以便JSP引擎编译页面。但是,不同Server对这些属性和对象的实现方式不同 | page(页面执行期) |
| pageContext | java.servlet.jsp.PageContext | 解决方案是JSP引擎编译用factory类返回的服务器PageContext类的实现方法。PageContext类和request、response对象及page指令的一些属性(errorpage,session,buffer,autoflush)同时被初始化,同时提供request请求的相关的对象 | page(页面执行期) |
| session | javax.servlet.HttpSession | HTTPsession是与request联合的对象 | session(会话期) |
| application | javax.servlet.ServletContext | servlet的环境通过调用getServletConfig().getContext()方法获得 | applicaiton(整个web环境运行期) |
| out | javax.servlet.jsp.JspWriter | 代表输出流的对象 | page(页面执行期) |
| config | javax.servlet.ServletConfig | 页面的ServletConfig对象 | page(页面执行期) |
| page | javax.lang.Object | 指向页面自身的方式(在Java代码中多以this替代) | page(页面执行期) |
| exception | java.lang.Throwable | 没有被Throwable不活的错误,传向了errorpage的URI | page(页面执行期) |
内置对象详细介绍:
1 out对象
out对象被封装成javax.servlet.jsp.JspWriter接口。它表示为客户打开的输入流,PrintWriter使用它向客户端发送输出流。简单的说,它主要用来向客户端输出数据,代表输出流的对象:
主要方法有:
out.print(各种类型): 输出各种类型的字符
out.newLine() 输出一个换行字符
out.flush() 输出缓冲区里的数据
out.close() 关闭输出流
out.clearBuffer() 清除缓冲里的数据 并把数据输出到客户端
out.clear() 清除缓冲区里的数据,但不会吧数据输出到客户端
out.getBufferSize() 获得缓冲区的大小
out.getRemaining() 获得缓冲区中没有被占用的空间的大小
out.isAutoFlush() 返回布尔值 如果AutoFlush为真,则返回ture;反之,则返回false;
2 request对象
request对象代表请求对象,它被包装成HttpServletRequest接口。通过getParameter方法可以得到request的参数,
通过GET POST HEAD等方法可以得到request的类型,通过Cookies、Referer等可以得到请求的HTTP头。来自客户端
的请求经Servlet容器处理后,由request对象进行封装。它作为jspService()方法的一个参数由容器传递给JSP页面:
request的主要方法有:
3 response对象
response被包装成HttpServletResponse接口,它封装了JSP产生的响应,然后被发送到客户端以响应用户的请求。和request对象一样,它由容器生成,作为jspService()方法的参数被传入JSP。因为输出流是缓冲的,所以可以设置HTTP状态码和response头。
response对象的主要方法有:
实例如下:
|
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
|
4 session对象
session对象用来保存每个用户信息,以便跟踪每个用户的操作状态。其中,session信息保存在容器里,session的ID保存在客户机的Cookie中。在许多服务器上,如果浏览器支持Cookie的话,就直接使用Cookie。但是如果不支持或废除Cookie的话,就自动转化为URL-rewriting(重写URL,这个URL包含客户端的信息),session自动为每个流程提供了方便的存储信息的方法。
一般情况下,用户首次登陆系统时容器会给此用户分配一个唯一标识的session id,这个ID用于区分其他的用户。当用户推出系统时,这个session就会自动消失。和session对应的是HTTPSession接口。
session对象的主要方法是:
实例:
5 pageContext对象
pageContext对象被封装成javax.servlet.jsp.pageContext接口,它为JSP页面包装页面的上下文,管理对属于JSP中特殊可见部分中已命名对象的访问。它的创建和初始化都是容器完成的。JSP页面里可以直接使用pageContext对象的句柄。pageContext对象的getXXX() setXXX() findXXX()方法可以用来根据不同的对象范围实现对这些对象的管理。
pageContext对象的主要功能是管理对属于JSP中可见部分中已经命名对象的访问。PageContext对象的创建于初始化通常对于JSP程序员是透明的,JSP程序员可以从JSP中获取到用来代表PageContext对象的句柄,因此可以使用pageContext对象的各种API。
pageContext对象的实用的方法:、
例如:
ServletRequest req=pageContext.getRequest();
String name=req.getParameter("name");
pageContext.setAttribute("userName",name); #默认情况下,该属性只在当前页面有效
String name=req.getParameter("name");
6 application对象
application对象为多个应用程序保存信息。对于一个容器来说,每个用户都共同使用一个application对象,这和session对象是不一样的。服务器启动后,就会自动创建application对象,这个对象会一直保持,直到服务器关闭为止。
application对象的主要方法是:
7 config对象
config对象被封装成javax.servlet.ServletConfig接口,它表示Servlet的配置。当一个Servlet初始化时,容器把某些信息通过此对象传递给这个Servlet。
config对象的常用方法是:
实例:假设有个计数器(由application实现),为了使得每次服务器启动后,计数器能够按以前的数继续计数,而不是重新计数,代码如下:
|
<body> <% int org=0; int count=0; try{ org=integer.parseInt(config.getInitParameter("counter"); }catch(Exception e) { count.print("org:"+e); } try{ count=Integer.parseInt((application.getAttribute("congif_counter").toString())); }catch(Exception e){ out.println("config_counter"+e); } if(count<org)count=org; out.println("此页面已经访问了“+count+"次”); count++; application.setAttribute("config_counter",new Integer(count)); %> |