JSP隐含对象是JSP容器为每个页面提供的Java对象,开发者可以直接使用它们而不用显式声明。JSP隐含对象也被称为预定义变量。

 

JSP所支持的九大隐含对象:

 

request              HttpServletRequest类的实例

response     HttpServletResponse类的实例

out                     PrintWriter类的实例,用于把结果输出至网页上

session        HttpSession类的实例

application ServletContext类的实例,与应用上下文有关

config          ServletConfig类的实例

pageContext     PageContext类的实例,提供对JSP页面所有对象以及命名空间的访问

page          httpJspPage类的实例,类似于Java类中的this关键字

Exception   Exception类的对象,代表发生错误的JSP页面中对应的异常对象

 

request对象

request对象是javax.servlet.http.HttpServletRequest类的实例。每当客户端请求一个JSP页面时,JSP引擎就会制造一个新的request对象来代表这个请求。

request对象提供了一系列方法来获取HTTP头信息,cookies,HTTP方法等等。

 

response对象

response对象是javax.servlet.http.HttpServletResponse类的实例。当服务器创建request对象时会同时创建用于响应这个客户端的response对象。

response对象也定义了处理HTTP头模块的接口。通过这个对象,开发者们可以添加新的cookies,时间戳,HTTP状态码等等。

out对象

out对象是javax.servlet.jsp.JspWriter 类的实例,用来在response对象中写入内容。

最初的JspWriter类对象根据页面是否有缓存来进行不同的实例化操作。可以在page指令中使用buffered='false'属性来轻松关闭缓存。

JspWriter类包含了大部分java.io.PrintWriter类中的方法。不过,JspWriter新增了一些专为处理缓存而设计的方法。还有就是,JspWriter类会抛出IOExceptions异常,而PrintWriter不会。

下表列出了我们将会用来输出boolean,char,int,double,Srtring,object等类型数据的重要方法:

1.public abstract void clear()

清除缓冲区中的内容,不将数据发送至客户端。

2.public abstract void clearBuffer()

将数据发送至客户端后,清除缓冲区中的内容。

3.public abstarct void close()

关闭输出流。

4.public abstract void flush()

输出缓冲区中的数据。

5.public intgetBufferSize()

获取缓冲区的大小。缓冲区的大小可用<%@page buffer="size" %>设置。

6.public abstract int getRemainning()

获取缓冲区剩余空间的大小

7.public booleanisAutoFlush()

获取用<%@ page is AutoFlush="true/false"%>设置的AutoFlush值。

8.public abstract void newLine()

输出一个换行字符,换一行。

9.public abstract void print()

显示各种数据类型的内容。

10.public abstract void println()

分行显示各种数据类型的内容。

session对象

session对象是javax.servlet.http.HttpSession 类的实例。和Java Servlets中的session对象有一样的行为。

session对象用来跟踪在各个客户端请求间的会话。

application对象

application对象直接包装了servlet的ServletContext类的对象,是javax.servlet.ServletContext类的实例。

 

这个对象在JSP页面的整个生命周期中都代表着这个JSP页面。这个对象在JSP页面初始化时被创建,随着jspDestroy()方法的调用而被移除。

通过向application中添加属性,则所有组成您web应用的JSP文件都能访问到这些属性。

application、session、request、page他们的使用方法基本上都是一致的,只不过作用范围不一样而已:

 

application:全局作用范围,整个应用程序共享,就是在部署文件中的同一个webApp共享,生命周期为:应用程序启动到停止。 

session:会话作用域,当用户首次访问时,产生一个新的会话,以后服务器就可以记住这个会话状态。生命周期:会话超时,或者服务器端强制使会话失效。 

request:请求作用域,就是客户端的一次请求。 

page:一个JSP页面。

 

服务器启动后就产生了这个application对象,当客户再所访问的网站的各个页面之间浏览时,这个application对象都是同一个,直到服务器关闭。但是与session不同的是,所有客户的application对象都是同一个,即所有客户共享这个内置的application对象。

 

1.getAttribute()

返回由name指定的名字的application对象的属性的值.

2.getAttributeNames()

返回所有的application对象的属性的名字,其结果是一个枚举的实例.

3.getInitParameter( String name )

返回由name指定的名字的application对象的某个属性的初始值.

4.getServletInfo()

返回servlet编译器的版本的信息.

5. setAttribute(String name , Object object )

设置由name指定的名字的application对象的属性的值object.

 

需要说明的是在一个所用范围内setAttruibute时请尽量不要多次set同一个对象ID,以防止对象所保存的信息被改变而无用。(但某些情况下这恰恰是有用处的!)

config对象

config对象是javax.servlet.ServletConfig 类的实例,直接包装了servlet的ServletConfig类的对象。

这个对象允许开发者访问Servlet或者JSP引擎的初始化参数,比如文件路径等。

以下是config对象的使用方法:

config.getInitParameter(“name”):取得指定名字的Servlet初始化参数值。

config.getInitParameterNames():取得Servlet初始化参数列表,返回一个枚举实例。

config.getServletContext():取得Servlet上下文(ServletContext)。

config.getServletName():取得生成的Servlet的名字。

pageContext 对象

pageContext对象是javax.servlet.jsp.PageContext类的实例,用来代表整个JSP页面。

这个对象主要用来访问页面信息,同时过滤掉大部分实现细节。

这个对象存储了request对象和response对象的引用。application对象,config对象,session对象,out对象可以通过访问这个对象的属性来导出。

pageContext对象也包含了传给JSP页面的指令信息,包括缓存信息,ErrorPage URL,页面scope等。

PageContext类定义了一些字段,包括PAGE_SCOPE,REQUEST_SCOPE,SESSION_SCOPE,APPLICATION_SCOPE。它也提供了40余种方法,有一半继承自javax.servlet.jsp.JspContext 类。

其中一个重要的方法就是removeArribute(),它可接受一个或两个参数。比如,pageContext.removeArribute("attrName")移除四个scope中相关属性,但是下面这种方法只移除特定scope中的相关属性:

pageContext.removeAttribute("attrName",PAGE_SCOPE);

1)getOut()

该方法返回一个JspWriter类的实例对象,也就是JSP内置对象——out对象,可以往客户端写入输入流。它的使用方法如下:

2)getSession()

该方法的返回值是一个HttpSession接口的实例对象,即JSP内置对象——session对象,可以保存不同用户的信息。它的使用方法如下:

3)getPage()

该方法的返回值是一个java.lang.Object对象,也就是JSP内置对象——page对象。它的使用方法如下:

4)getResponse()

该方法的返回对象是javax.servlet.ServletResponse,也就是JSP内置对象——response对象,主要用于控制HTTP连接。它的使用方法如下:

5)getRequest()

该方法的返回对象是javax.servlet.ServletRequest,也就是JSP内置对象——request对象,主要用于获取客户端的信息。它的使用方法如下:

6)getException()

该方法的返回值是当前页的exception对象。它的使用方法如下:

7)getServletConfig()

该方法可以返回当前的config对象,用于获取JSP/Servlet程序的初始参数。它的使用方法如下:

8)getServletContext()

该方法的返回值是一个ServletConfig接口的实例对象,也就是JSP内置对象——application对象的副本。它的使用方法如下:

9)setAttribute(Stringname, Object o, int scope)

pageContext对象的setAttribute()方法可以将参数或者Java对象绑定到application对象、session对象、request对象或者page对象上,这里的scope参数可以取以下的值。

l        pageContext.PAGE_SCOPE

l        pageContext.REQUEST_SCOPE

l        pageContext.SESSION_SCOPE

l        pageContext.APPLICATION_SCOPE

当scope参数的值为pageContext.SESSION_SCOPE时,调用PageContext对象的setAttribute()方法和调用session对象的putValue()方法是等效的,都是将某个参数或者Java对象和当前的session绑定起来。如果scope参数的值为如果scope参数的值为pageContext.APPLICATION_SCOPE,那么调用PageContext对象的setAttribute()方法和调用application对象的setAttribute()方法是等效的。如果scope参数是其他的值,原理也是一样的,我们就不多说了。它的使用方法如下:

<%
 
   pageContext.setAttribute("username","george",
 
        pageContext.APPLICATION_SCOPE);
 
   pageContext.setAttribute("username","robin",pageContext.
 
        SESSION_SCOPE);
 
%>
 

10)getAttribute(Stringname, int scope)

pageContext对象的getAttribute()方法也可以直接获取和application对象、page对象、session对象、request对象相互绑定的参数或者Java对象的值。这个方法的scope参数的意义和上面讲的一样。如果scope参数的值是pageContext.REQUEST_SCOPE,那么getAtttribute()方法就在当前的request对象内部查找有没有绑定一个名为name的Java对象,如果有,就返回这个对象,如果没有,返回null值。如果scope参数的值是pageContext.APPLICATION_SCOPE,那么getAtttribute()方法的作用范围将是application对象。它的使用方法如下:

<%
 
    pageContext.getAttribute("username",pageContext.APPLICATION_SCOPE);
 
    pageContext.getAttribute("username",pageContext.SESSION_SCOPE);
 
%>
 

11)removeAttribute(Stringname, int scope)

顾名思义,pageContext对象的removeAttribute()方法可以直接解除application对象、session对象、request对象、page对象和某个特定的参数或者Java对象的绑定关系。这个方法的scope参数指定了作用的范围,如果scope参数的值为pageContext.SESSION_SCOPE,那么removeAttribute()方法将会使某个参数或者Java对象和当前的session对象解除绑定关系,如果scope参数是其他值,原理也一样的。它的使用方法如下:

<%
 
    pageContext.removeAttribute("username",
 
        pageContext.APPLICATION_SCOPE);
 
    pageContext.removeAttribute("username",pageContext.SESSION_SCOPE);
 
%>
 

12)findAttribute(Stringname)

pageContext对象的findAttribute()方法将在application对象、session对象、request对象、page对象内部查找是否有某个参数或者Java对象与这些对象绑定了,搜索顺序是先是范围最小的page对象,其次是request对象、session对象,最后是application对象,这个方法的返回值是第一个符合要求的Java对象的值。它的使用方法如下:

13)getAttributeScope(Stringname)

使用这个方法可以知道特定的参数或者Java对象和哪一个JSP对象绑定在一起。该方法的返回值是整型常数,可能是下面4个常数之一:

l        pageContext.PAGE_SCOPE

l        pageContext.REQUEST_SCOPE

l        pageContext.SESSION_SCOPE

l        pageContext.APPLICATION_SCOPE

如果返回值是pageContext.SESSION_SCOPE,表明这个Java对象和session对象绑定在一起。如果是其他返回值,读者可以依次类推。它的使用方法如下:

     Intscope=pageContext.getAttributeScope("username");

14)getAttributeNameInScope(intscope)

该方法可以获取特定JSP对象内部绑定了哪些参数或者Java对象,scope参数指定了该方法的作用范围。这个方法的返回值是一个枚举对象(Enumeration)。它的用法示例如下:

上面的JSP代码段将返回session对象中所绑定的参数或者Java对象的名字。

15)release()

该方法将会释放pageContext对象所占的资源。

16)forward(Stringurl)

该方法可以实现网页的重定向功能,类似于response.sendRedirect()方法。

17)include(StringrelativeUrlPath)

该方法可以让当前文件包含进一个外部文件,类似于JSP的include编译指令和<jsp:include>操作指令。

由上面对pageContext对象的介绍,读者应该不难看出,pageContext对象有两大主要功能,分别是获取各JSP内部对象,以及直接操作与某些JSP对象绑定在一起的参数或者Java对象。

page 对象

这个对象就是页面实例的引用。它可以被看做是整个JSP页面的代表。

page 对象就是this对象的同义词。

exception 对象

exception 对象包装了从先前页面中抛出的异常信息。它通常被用来产生对出错条件的适当响应

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐