博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JSP内置对象的学习
阅读量:4183 次
发布时间:2019-05-26

本文共 21908 字,大约阅读时间需要 73 分钟。

隐式对象

Servlet创建了几个由JSP引擎使用的隐式对象。开发人员不用事先声明就可以使用标准的变量来访问这些对象。JSP提供了9种隐式对象。

一、学习JSP的page 对象

page对象代表JSP本身,更准确地说它代表JSP被转译后的Servlet,它可以调用Servlet类所定义的方法。page对象其实是java.lang.Object类的实例对象,它可以使用Object类的方法,例如,hashCode()、toString()等方法。page对象在JSP程序中的应用不是很广,但是java.lang.Object类还是十分重要的,因为JSP内置对象的很多方法的返回类型是Object。

二、学习JSP的config 对象

config对象是在一个servlet程序初始化时,JSP引擎向它传递消息用的,此消息包括servlet程序初始化时所需要的参数及服务器的有关信息。Config对象其实是实现javax.servlet.ServletConfig接口的类的实例对象,它可以使用下面的3个方法。

1)getServletContext()

调用这个方法可以返回一个含有服务器相关信息的ServletContext对象,即JSP内置对象--application对象。

2)getInitParameter(String name)

调用这个方法可以返回servlet程序初始参数的值,参数名由name指定。

3)getInitParameterNames()

调用这个方法可以返回一个枚举对象,该对象由servlet程序初始化所需要的所有参数的名称构成。

我们可以通过如下所示的方式获取JSP/Servlet程序初始化所需要的参数名称和它们的值:

 <%Enumeration enum=config.getInitParameterNames();while(enum.hasMoreElements){String paraName=(String)enum.nextElement();out.println(paraName+"----->"+config.getInitParameter(paraName)+"
");}%>

上面的代码段仅适用于JSP程序,如果要用于Servlet程序,需要修改部分代码。其次,有些服务器仅仅支持设定Servlet程序的初始参数,还支持设定JSP程序的初始参数,对于这一点,请读者要特别留心服务器的说明文档。

config对象在Servlet程序中的作用很大,不过在Servlet程序中没有内置对象这一说,严格的说法应该是ServletConfig接口在servlet程序中作用很大。但是JSP页面中的config对象的作用很小。

三、学习JSP的request 对象

request对象可以获得客户端的输入信息。request对象包括了从客户端传来的请求信息。在HTTP 1.1协议中,客户端请求信息是从客户端通过HTTP头(HTTP Header)和消息体传送到服务器端的。请求的参数是一个请求的组成部分,它们被作为字符串从客户端传送到JSP/Servlet容器,并被用于初始化request对象。

request 对象实现javax.servlet.http.HttpServletRequest接口的,

getAttribute(String name):返回由name指定的属性值getAttributeNames():返回request对象所有属性的名字集合,结果是一个枚举的实例getCookies():返回客户端的所有Cookie对象,结果是一个Cookie数组getCharacterEncoding():返回请求中的字符编码方式getContentLength():返回请求的Body的长度实例getInputStream():返回请求的输入流,用于获得请求中的数据getMethod():获得客户端向服务器端传送数据的方法getParameter(String name):获得客户端传送给服务器端的有name指定的参数值getParameterNames():获得客户端传送给服务器端的所有参数的名字,结果是一个枚举的实例getParameterValues(String name):获得有name指定的参数的所有值getProtocol():获取客户端向服务器端传送数据所依据的协议名称getQueryString():获得查询字符串getRequestURI():获取发出请求字符串的客户端地址getRemoteAddr():获取客户端的IP地址getRemoteHost():获取客户端的名字getSession([Boolean create]):返回和请求相关SessiongetServerName():获取服务器的名字getServletPath():获取客户端所请求的脚本文件的路径

四、学习JSP的response 对象

Response对象用于动态响应客户端请示,控制发送给用户的信息,并将动态生成响应。Response对象只提供了一个数据集合cookie,它用于在 写入cookie值。若指定的cookie不存在,则创建它。若存在,则将自动进行更新。结果返回给客户端浏览器。
语法格式:Response.Cookies(CookieName)[(key)|.attribute]=value。这里的CookiesName是指定的Cookie的名称,如果指定了Key,则该Cookie就是一个字典,Attribute属性包括Domain,Expires,HasKeys,Path,Secure。
response 对象在ASP中负责将信息传递给用户.Response对象用于动态响应客户端请求,并将动态生成的响应结果返回到客户端浏览器中,使用Response对象可以直接发送信息给浏览器,重定向浏览器到另一个URL或设置cookie的值等.Response对象在asp编程中非常广泛,也是一种非常好用的工具.
基本格式:response.集合|属性|方法
response 的write方法:
response.write **
功能:向 发送浏览器能够处理的各种数据,包括:html代码, 等.
实例:
response.write "I LOVE YOU !!"
response的redirect方法:
response.redirect("url")的作用是在服务器端重定向于另一个网页。
实例:
response.redirect(http://www.tiaotiaocn.com)
●JSP 中的response
在Java Servlet中同样用到response对象,是J2EE中java.servlet.http包中的类
HttpServletResponse response实例化后将用此对象响应客户端的请求
使用HttpServletResponse response的示例代码:
------------------
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ServletTest extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=gbk");
PrintWriter out = response.getWriter();
out.println("HttpServletResponse response");
....
//方法示例..详细方法可以继续补充
response.addCookie(arg0);
response.addDateHeader(arg0, arg1);
response.addHeader(arg0, arg1);
....
out.flush();
out.close();
}
}
response的End方法:
用来终止 。在ASP程序中碰到Response.End语句后,立即终止。不过它会将之前的页面内容发送到客户端,只是不再执行后面的语句了。
response的Clear方法:
要说到Clear方法,就必须提到response的Buffer属性,Buffer属性用来设置服务器端是否将页面先输出到缓冲区。语法为:Response.Buffer=True/False
当Buffer的值为True时,Clear方法用于将缓冲区中的当前页面内容全部清除。
语法为:Response.Clear
response的Flush方法:
当Buffer的值为True时,Flush方法用于将缓冲区中的当前页面内容立刻输出到客户端。
语法为:Response.Flush
下面为Clear方法和Flush方法举例:
<%
Response.Write "第一句"
Response.Flush ‘立刻输出缓冲区中的内容
Response.Write "第二句"
Response.Clear ‘清除缓冲区中的内容
Response.Write "第三句"
%>
---------------------
语法:
Response.collection|property|method
一、集合
Response对象只有一个集合--Cookies,Cookies数据集合允许将数据设置在 的浏览器中。若指定的cookie不存在,则创建它。若存在,则自动更新数据。
语法:Response.Cookies(Cookie)[Key.Attribute]
这里的cookie是指定cookie的名称。而如果指定了key,则该cookie就是一个字典。attribute指定cookie自身的有关信息。attribute参数可以是下列之一:
Domain只写。若被指定,则cookie将被发送到对该域的请求中去。
Expires只写。指定cookie的过期日期。为了在会话结束后将cookie存储在客户端磁盘上,必须设置该日期。若此项属性的设置未超过当前日期,则在任务结束后cookie将到期。
HasKeys只读。指定cookie是否包含 。
Path只写。若被指定,则cookie将只发送到对该路径的请求中。如果未设置该属性,则使用应用程序的 。
Secure只写。指定Cookie是否安全。
二、方法
Response.AddHeaderName,Value
向应答中添加一个新的HTML标题。Name为新HTML标题的名称。Value为该头 的值。你可以添加任何名称和任何值的HTML标题。它并不替代现有的同名标题。一旦标题被添加,将不能删除。
Response.AppendToLogString
向Web服务器的日志条目的末尾添加一字符串。String为要添加到日志文件中的字符串。
Response.BinaryWriteData
该方法可以不经任何 转换就将制定的信息写到HTTP输出,主要用于写非字符串信息(如客户端应用程序所需的二进制数据等)。Data是要发送的数据。
Response.Clear
删除缓冲区的所有HTML输出,但只删除响应正文而不删除响应标题。可以用该方法处理错误情况。需要注意的是,如果Response.Buffer设置为True,则该方法将导致运行是错误。
Response.End
强迫Web服务器停止执行更多的 ,并发送当前结果,文件中剩余的内容将不被处理。如果Response.Buffer设置为True,则调用Response.end将缓冲输出。
Response.Flush
对于一个缓冲的回应,发送所有的缓冲信息。如果Response.Buffer设置为True,则该方法将导致运行是错误。
Response.RedirectURL
将客户端的浏览器重定向到一个新的Internet地址。Url为新网页的Internet地址。
Response.WriteVariant
Response.Write是Response对象最常用的方法,该方法可以向 发送字符串。Variant是一字符串或一个具有字符串值的 。
三、属性
Response.Buffer
缓冲一ActiveServerPage。回应只到某一页结束或Response.Flush或Response.End方法调用时才发送出去。服务器将输出送给客户端后就不能再设置Buffer属性。
Response.CacheControl
指明是否Proxy服务器能 ActiveServerPage。缺省时,其值为FALSE。当设置其属性为Public时,Proxy服务器可以缓冲由Asp产生的输出。
Response.CharSet(Charsetname)
将 名称(如GB)附加到Response对象中content-type标题的后面,用来设置web服务器响应给客户端的文件 。一个可能的值为“ISO_LATIN_1”。
Response.ContentType
指明回应内容的类型。可能的值为text/plain和image/GIF,默认值text/HTML。
Response.Expires
可以缓存当前页的时间长度,以分钟为单位。
Response.ExpiresAbsolute
浏览器不能再缓存当前页的日期和时间。在未到期之前,可以返回。如果未指定时间,该主页在当天午夜到期;如果未指定日期,则到当天指定时间到期。
True/False=Response.IsClientConnected
属性为只读,指明自上次调用Response.Write之后,客户端是否仍然和服务器连接。该属性允许用户在 和服务器没有联接的情况下有更多的控制。例如,在从 提出请求起到服务器做出相应,其间要用去很长一段时间的情况下,这就可能有助于确保在继续处理脚本之前客户端仍是连通的。具有值TRUE或FALSE。
Response.PICS(PICS字符串)
用于添加网页的PICS等级。PICS级别指明某一网页的内容级别,比如暴力或色情的程度等。
Response.Status="状态描述字符串"
用来设置Web服务器要响应的状态行的值。

五、学习JSP的out 对象

out 对象能把结果输出到网页上。

out主要是用来控制管理输出的缓冲区(buffer)和输出流(output stream)。

void clear( ) 清除输出缓冲区的内容

void clearBuffer( ) 清除输出缓冲区的内容

void close( ) 关闭输出流,清除所有的内容

int getBufferSize( ) 取得目前缓冲区的大小(KB)

int getRemaining( ) 取得目前使用后还剩下的缓冲区大小(KB)

boolean isAutoFlush( )回传true表示缓冲区满时会自动清除;false表示不会自动清除并且产生异常处理

六、学习JSP的session 对象

session对象是十分重要的一个JSP内置对象,它可以用来在每一个用户之间分别保存用户信息,这与application对象不同。application对象用于在多个程序之间保存信息,application对象只有一个,它可以绑定若干个相当于全局变量的参数或者Java对象,每个JSP程序所访问的都是application对象的一个同步副本,都是一样的,而且application对象的生命周期贯穿服务器的整个运行周期。但是,服务器上的session对象却可以有多个,不同的用户所面临的session对象一般来说是不同的,当用户登录网站,系统将为他生成一个独一无二的session对象,用以记录该用户的个人信息,一旦该用户退出网站,那么该session对象将会被注销。session对象也可以绑定若干个参数或者Java对象,这些参数或者Java对象就相当于局部变量,不同session对象间的同名变量是不会相互干扰的。我们应用session对象的功能,可以十分简单地实现购物车等功能。

session对象实现javax.servlet.http.HttpSession接口。获取session对象有以下方法:

1)使用session关键字直接引用session对象

<% session.Method();%>

2)使用request对象的getSession()方法

使用request对象的getSession()方法可以返回HttpSession接口的实例对象,也就是session对象,注意,这个新获得的HttpSession对象不能够被命名为session,因为session是JSP引擎自动创建的当前session对象的一个同步副本,如程序4-18所示。

     createSession1.jsp

01 <%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>02 03 04 05 <%06     HttpSession mysession=request.getSession(true);07     out.println(mysession.getId());08     out.println("
");09     out.println(session.getId());10 %>11 12 

程序演示了getSession()方法的使用,它首先使用getSession()方法获取HttpSession对象--mysession,然后输出它的id,同时也输出session的id,运行结果证明了这两个id是一样的,要注意的是每个用户的session对象的id是不同的(服务器就靠不同的id鉴别不同的session对象),而且每个用户只能够有一个session对象,无论mysession还是session,都是当前session对象的一个同步副本。

 
图4-18  createSession1.jsp程序的运行效果

3)使用PageContext对象的getSession()方法

使用pageContext对象的getServletContext()方法可以获得application对象的副本,同样,使用pageContext对象的getSession()方法也可以获取session对象的一个副本,如程序4-19所示。

【程序4-19】createSession2.jsp

01 <%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>02 03 04 05 <%06     HttpSession mysession=request.getSession();07     HttpSession mysession2=pageContext.getSession();08     out.println(mysession.getId()+"
");09     out.println(session.getId()+"
");10     out.println(mysession2.getId()+"
");11 %>12 13 
 
 
图4-19  createSession2.jsp程序的运行效果

下面我们介绍session对象的主要用法:

1)getValue(String name)

和application对象一样,session对象也允许将若干个参数或者Java对象绑定在自己身上,相当于局部变量的作用,这些变量的生命周期就是session对象的存活周期,我们可以使用putValue()方法或者getValue()方法存取这些变量的值,或者使用removeValue()方法将它们删除,也就是解除它们和session对象之间的绑定关系,getValue()方法就用于获取指定名字的(由name指定)和session对象绑定的变量的值,如果不存在这个参数或者Java对象,那么该方法将会返回null值。getValue()方法的用法如下所示:

<% String username=(String)session.getValueNames("username");Vector vector=(Vector)session.getValue("vector");%>

2)getValueNames()

该方法可以返回和当前session对象绑定在一起的参数或者Java对象的名字,该方法的返回值是一个字符串数组。它的使用方法如下所示:

<%String []name=session.getValueNames();

for(int i=0; i<name.length; i++)

{
out.println(session.getValue(name[i]));
}
%>

3)getCreationName()

该方法可以返回当前session对象创建的时间,单位以毫秒计算,从1970年1月1日开始。用不同方法获取的session对象的副本,如果都调用这个方法,那么返回值都是一样的。读者可以试验一下下面的JSP代码片段,看看是否真的如此:

<%HttpSession mysession=request.getSession();HttpSession mysession2=pageContext.getSession();
    out.println(mysession.getId()+"--->"+mysession.getCreationTime()+"
");out.println(session.getId()+"--->"+session.getCreationTime()+"
");out.println(mysession2.getId()+"--->"+mysession2.getCreationTime()+"
");%>

4)getId()

服务器端每生成一个session对象,都会赋予它一个独一无二的编号,这个编号不会重复,服务器就依赖此编号来鉴别不同的客户,getId()方法就返回当前session的编号,如果你使用上面介绍的方法创建了多个session对象的副本,那么这些副本调用getId()方法的返回值都是一样的。

5)getLastAccessedTime()

该方法用于返回当前session对象最后一次被操作的时间,单位是毫秒,该方法返回自1970年1月1日至今的毫秒数。应用这个方法,我们可以判断某个用户在站上一共待了多少时间。

6)getMaxInactiveInterval()

该方法可以获取当前session对象的最大休眠时间。服务器会为每个用户创建一个session对象,如果用户不断地进行浏览等操作,那么这个session对象就一直处于活动状态,如果用户仅仅是打开一个页面,然后不做任何操作,那么这个session对象就处于休眠状态,session对象如果处于休眠状态太久了,超过了一定的时间,那么服务器会默认用户已经退出了网站,并且会自动清除这个session对象。这个时间限制就是所谓的最大休眠时间,设定一个session对象的最大休眠时间,对于一个JSP服务器来说是十分重要的,因为这样可以及时回收闲置的资源。如果getMaxInactiveInterval()方法的返回值是-1,那么,session对象的最大休眠时间为无限长。

7)setMaxInactiveInterval(int time)

该方法通常和getMaxInactiveInterval()方法配合使用,主要用于设定最大休眠时间。它的使用情况如下所示:

<%session. setMaxInactiveInterval(300);%>

8)removeValue(String name)

该方法可以使得某个参数或者Java对象与当前的session对象解除绑定状态。

9)putValue(String name, java.lang.Object value)

putValue()方法和removeValue()方法恰好相对,putValue()方法可以将某个参数或者Java对象和当前的Java对象绑定起来。putValue()方法的参数name指定需要绑定的名称,value指定需要绑定的参数或者Java对象的值。如果在使用putValue()方法以前,已经有同名的参数或者Java对象被绑定于session对象上,那么新值将会覆盖旧值。

10)invalidate()

该方法将会清除当前的session对象,解除它和任何参数或者Java对象的绑定关系。

注意:

能够和application对象或者session对象绑定的只能够是Java对象,如String、Integer、Vector等,而不能够是普通的数据类型,如int、double、float等,如果真需要将它们绑定到application对象或者session对象上,那么它们必须首先转化为相应的Java对象。

七、学习JSP的application对象

application对象是一个特别重要的JSP对象,它存在于服务器的内存空间中,服务器一旦启动,就会自动产生一个application对象,除非服务器被关闭,否则这个application对象将一直保持下去。application对象要由服务器自动清除它,不能被用户创建,用户也不能清除application对象,我们只能创建这个application对象的同步副本。application就是由JSP引擎自动创建的第一个application对象的同步副本。特别需要注意的是这些副本是同步的,任何一个副本上发生的变化都会影响到其他的副本。在application对象的生命周期中,在当前服务器上运行的每一个JSP程序都可以任意存取和这个application对象绑定的参数(或者Java对象)的值。application对象的这些特性为我们在多个JSP程序中、多个用户共享某些全局信息(如当前的在线人数等)提供了方便。由此我们可以不借助数据库就实现聊天室的功能。

因为环境的信息通常都储存在ServletContext中,所以常利用application对象来存取ServletContext中的信息。

application 对象实现javax.servlet.ServletContext 接口。我们具体如何获得application对象呢?有以下几种方法:

1)在JSP程序中直接使用application以代表application对象

<% application.Method(); %>

2)使用ServletConfig接口

使用ServletConfig接口可以间接获取application对象,但是这个application对象的名字不能同样为application,因为application是JSP引擎创建的默认的application对象的副本,不能够被覆盖。使用ServletConfig接口其实就是使用config对象,config对象是实现ServletConfig接口的类的实例对象,它可以通过调用getServletContext()方法返回一个ServletContext接口的对象,也就是application对象的一个副本,如程序4-3所示。

【程序4-3】createApp1.jsp

01 <%@ page language="java" import="java.util.*"02     pageEncoding="ISO-8859-1"%>03 04 05 06 <%07     ServletContext app=config. getServletContext();08     out.println(app.getServerInfo());09 %>10 11 
程序4-3首先创建了一个application对象的拷贝app,然后使用getServletInfo()方法获取服务器的相关信息,该程序的运行效果如图4-4所示。

 
图4-4  createApp1.jsp程序的运行效果

3)使用pageContext对象获取application对象

pageContext对象的getServletContext()方法同样可以返回一个application对象的副本,如程序4-4所示。

【程序4-4】createApp2.jsp

01 <%@ page language="java" import="java.util.*"02     pageEncoding="ISO-8859-1"%>03 04 05 06 <%07     ServletContext app= pageContext. getServletContext();08     out.println(app.getServerInfo());09 %>10 11 

程序4-4的运行效果如图4-5所示,我们从图中可以发现,与程序4-3的运行效果是相同的。

 
图4-5  createApp2.jsp程序的运行效果

application对象的方法

1)getAttribute(String name)

当我们创建application对象的同步副本后,就可以存取和application对象绑定在一起的参数或者Java语言中的类的对象,因为application对象的生命周期是贯穿服务器的运行周期,因此,这些参数或者Java对象既然和application对象绑定在一起,那么它们的生命周期也应该和application对象一样,除非使用application对象的方法去绑定它或者使它和application对象解除绑定。使用getAttribute()方法可以返回那些和当前application对象绑定在一起的值或者Java对象。getAttribute()方法的参数name指定了目标参数或者目标Java对象的名字。

getAttribute()方法的使用方法如下:

<% String username=(String)application. getAttribute ("username");out.println(username);%>

2)getAttributeNames()

该方法可以返回所有与当前application对象绑定在一起的参数或者Java对象的名字。这个方法的返回值是一个枚举对象(Enumeration)。它的使用方法如下:

<%Enumeration enum1=application.getAttributeNames();while(enum1.hasMoreElements()){String attrName=(String)enum1.nextElement();out.println(attrName+"
");}%>

3)getServerInfo()

该方法可以获得当前服务器的详细信息,不同的服务器返回的信息格式不一样。

4)setAttribute(String name, Object object)

该方法通常和getAttribute()方法及removeAttribute()方法搭配使用,它的作用就是将某个参数或者Java对象与application对象绑定在一起,在setAttribute()方法中,参数name指定和application对象绑定的参数或者Java对象的名称,参数object指定需要绑定的值,object必须是一个Java对象,例如Integer对象,但不能够是int类型的数据。如果在绑定新值时,已经有同名的参数或者Java对象和application对象绑定了,那么新值将会覆盖旧值。

setAttribute()方法的使用方法如下。

将某个字符串参数和application对象绑定在一起:

<%String username="george";String password="george";application.setAttribute("username",username);application.setAttribute("password", password);out.println(application.getAttribute("username"+"
"));out.println(application.getAttribute("password"));%>
将某个Java对象和application对象绑定在一起:

<%Vector vector=new Vector();//init this vectorapplication.setAttribute("vector", vector);Vector newVector=(Vector) application.getAttribute("vector");//user newVector…%>

5)removeAttribute(String name)

通过该方法,我们可以使某个参数或Java对象与application对象解除绑定关系。一旦绑定关系被解除,我们就不能使用getAttribute()方法获取它们的值了,否则,将会返回null值。

它的使用方法如下:

<%String username="george";application.setAttribute("username",username);out.println(application.getAttribute("username"));application.removeAttribute("username");out.println(application.getAttribute("username"));%>

6)log(String msg)

该方法用于往服务器的log文件中写入信息,至于是哪一个log文件,则由服务器来决定。利用这个方法,我们可以在log文件中记录访问者的信息,这对于统计访问流量来源方面十分有用,同时也便于管理员监控网站的运行情况。其实,还有一个同名但使用不同参数的log()方法,利用后者,我们可以将JSP程序执行过程中所发生的错误事件都记入log文件中。

在大部分的服务器中我们可以使用application.Method(…),但在有些较旧版本的服务器中,它们不支持application的形式,但它们支持以getServletContext().Method(…)的形式实现application对象的功能,读者一定要多加留心。

八、学习JSP的pageContext对象

pageContext对象是JSP中很重要的一个内置对象,不过在一般的JSP程序中,很少用到它,所以知道request对象、response对象的人比较多,知道pageContext对象的人就比较少了。它是javax.servlet.jsp.PageContext类的实例对象,可以使用PageContext类的方法。实际上,pageContext对象提供了对JSP页面所有的对象及命名空间的访问。pageContext对象的方法可以访问除本身以外的8个JSP内部对象,还可以直接访问绑定在application对象、page对象、request对象、session对象上的Java对象。pageContext对象相当于JSP程序中所有对象功能的集成者。不过,这里存在着一个问题,既然可以直接访问JSP内部对象,为什么还要多此一举,通过pageContext对象来访问它们呢?这也正是pageContext对象应用较少的原因。话虽这样说,pageContext对象总是JSP中9个内置对象不可或缺的一部分,读者还是需要掌握它的用法的。

pageContext对象的主要用法如下。

1)getOut()

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

 <%JspWriter myout=pageContext.getOut();myout.println("myout write: hello world"+"
");out.println("out write: hello world");%>

2)getSession()

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

<%String username1="george";String password1="george";HttpSession mySession= pageContext. getSession();mySession.putValue("username",username1);mySession.putValue("password", password1);%>

3)getPage()

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

<%Object mypage=pageContext.getPage();out.println(mypage.toString());%>

4)getResponse()

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

<%ServletResponse myresponse=pageContext.getResponse();out.println(myresponse.getCharacterEncoding());%>

5)getRequest()

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

<%ServletRequest myrequest=pageContext.getRequest();out.println(myrequest.getRemoteHost());String username2="robin";String password2="robin";
    myrequest.setAttribute("username",username2);myrequest.setAttribute("password", password2);%>

6)getException()

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

<%Exception myexception=pageContext. getException();out.println(myexception.getMessage());%>

上面的代码片段最好在错误处理程序中使用,也就是page编译指令的isErrorPage属性为true的页面中。

7)getServletConfig()

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

<%ServletConfig myconfig=pageContext.getServletConfig();%>

8)getServletContext()

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

<%ServletContext myapplication=pageContext.getServletContext();out.println(myapplication.getServerInfo());String username3="java";String password3="java";
    myapplication.setAttribute("username",username3);myapplication.setAttribute("password", password3);%>

9)setAttribute(String name, Object o, int scope)

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

pageContext.PAGE_SCOPE

pageContext.REQUEST_SCOPE

pageContext.SESSION_SCOPE

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(String name, 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(String name, 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(String name)

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

<%String username=pageContext.findAttribute("username");%>

13)getAttributeScope(String name)

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

pageContext.PAGE_SCOPE

pageContext.REQUEST_SCOPE

pageContext.SESSION_SCOPE

pageContext.APPLICATION_SCOPE

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

<%Int scope=pageContext.getAttributeScope("username");%>

14)getAttributeNameInScope(int scope)

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

<%Enumeration enum=null;enum=pageContext.getAttributeNamesInScope(pageContext.SESSION_SCOPE);while(enum.hasMoreElements()){out.println(enum.nextElement()+"
");}%>

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

15)release()

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

16)forward(String url)

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

17)include(String relativeUrlPath)

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

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

九、学习JSP的exception对象

若要使用exception 对象时,必须在page 指令中设定。< %@ page isErrorPage="true" %>才能使用。

exception提供的三个方法:

getMessage( )   该方法返回错误信息。

printStackTrace( )   该方法以标准错误的形式输出一个错误和错误的堆栈。

toString():该方法以字符串的形式返回一个对异常的描述。

如果某个JSP页面在执行的过程中出现了错误,那么JSP引擎会自动产生一个异常对象,如果这个JSP页面指定了另一个JSP页面为错误处理程序,那么JSP引擎会将这个异常对象放入到request对象中,传到错误处理程序中,在错误处理程序里,因为page编译指令的isErrorPage属性的值被设为true,那么JSP引擎会自动声明一个exception对象,这个exception对象从request对象所包含的HTTP参数中获得:

 Throwable exception=(Throwable)request.getAttribute("javax.servlet.jspException");

事实上,javax.servlet.jspException是JSP引擎为exception对象所取的名字,并不存在所谓的jspException类,exception对象实际上是java.lang.Throwable类的实例对象。

下面的程序4-9和程序4-10分别演示了exception对象的使用方法。程序4-9中首先引发一个Java异常事件,使得当前JSP页面定向到指定的错误处理程序--程序4-10,并且在该页面中将错误信息输出。

【程序4-9】errorthrow1.jsp

01 <%@ page language="java" import="java.util.*" 02      pageEncoding="ISO-8859-1" errorPage="error.jsp"%>03 04 05 06 <%07     int result=1/0;08 %>09 10 

程序4-9在执行时,将会引发一个除数为零的异常,并指定该异常由程序4-10进行处理。

【程序4-10】error.jsp

01 <%@ page language="java" import="java.util.*" 02      pageEncoding="ISO-8859-1" isErrorPage="true"%>03 <%04 String path = request.getContextPath();05 String basePath = request.getScheme() + "://" + request.getServerName() + ":" +06      request.getServerPort()+path+"/";07 %>08 09 10 11   My JSP 'error.jsp' starting page12   13 14 Error Message:getMessage() Method
15 <%16     out.println(exception.getMessage());17 %>18 
19 Error String:toString() Method
20 <%21     out.println(exception.toString());22 %>23 24 
程序4-10使用exception对象的getMessage()方法和toString()方法输出错误的具体信息。程序4-9和程序4-10的运行效果如图4-9所示。

 
图4-9  errorthrow1.jsp的运行效果

 

 

每个对象的范围,即作用域:

 

内置对象 代表内容 范围
request 触发服务调用的请求 request
response 对请求的应答 page
session 为请求的客户创建的session对象 session
application 从 servlet 配置对象获得的 servlet 上下文(如在getServletConfig() ,getContext()的调用中) application
out 向输出流写入内容的对象 page
pageContext 本 JSP 的页面上下文 page
page 实现处理本页当前请求的类的实例 page
config 本 JSP 的 ServletConfig page
exception 表示JSP页面运行时产生的异常 Page

转载地址:http://ajyoi.baihongyu.com/

你可能感兴趣的文章
JSP内置对象的学习
查看>>
用java写文件输入输出流,实现复制粘贴的方法
查看>>
学习JSP的方法步骤(参考)
查看>>
JSP中常见TOMCAT错误代码原因
查看>>
MyEclipse中WEB项目加载mysql驱动方法
查看>>
常见编写JAVA报错总结
查看>>
org.gjt.mm.mysql.Driver和com.mysql.jdbc.Driver的区别
查看>>
UTF-8和GBK有什么区别
查看>>
增加MyEclipse分配内存的方法
查看>>
头痛与早餐
查看>>
[转]在ASP.NET 2.0中操作数据::创建一个数据访问层
查看>>
Linux命令之chmod详解
查看>>
【java小程序实战】小程序注销功能实现
查看>>
leetcode Unique Paths II
查看>>
几个大数据的问题
查看>>
CareerCup Pots of gold game:看谁拿的钱多
查看>>
CarreerCup Sort Height
查看>>
CareerCup Sort an array in a special way
查看>>
CareerCup Find lexicographic minimum in a circular array 循环数组字典序
查看>>
CareerCup Cost of cutting wood
查看>>