《第8讲JSP内置对象》由会员分享,可在线阅读,更多相关《第8讲JSP内置对象(56页珍藏版)》请在金锄头文库上搜索。
1、上节回顾:上节回顾:JSP语法语法 JSPJSP的标记,在的标记,在的标记,在的标记,在JSPJSP中变量和方法的声明中变量和方法的声明中变量和方法的声明中变量和方法的声明、JavaJava程序片程序片程序片程序片、表达式表达式表达式表达式%= %和和和和注释注释注释注释。 将将将将HTMLHTML代码嵌入代码嵌入代码嵌入代码嵌入JavaJava中就构成了中就构成了中就构成了中就构成了servletservlet,而把而把而把而把JavaJava 代码嵌入代码嵌入代码嵌入代码嵌入HTMLHTML中就构成了中就构成了中就构成了中就构成了JSPJSP。 客户与服务器间的交互管理在客户与服务器间的交
2、互管理在servlet中通过中通过HttpServletRequest对象和对象和HttpServletResponse对象来完成,对象来完成,JSP中则通过中则通过JSP的内置对象来完成。的内置对象来完成。第第8讲讲 JSP的内置对的内置对象象 request 对象对象 response 对象对象 out对象对象 session对象对象 application对象对象1 1 request 对象对象request(接受客户端输入的信息) 作用:主要用于接受客户端通过http协议连接传输到服务器端的数据。方法:getParameter(String name):获得客户端传送给服务器端的参数值
3、,该参数由name指定getQueryString():获得查询字符串,该串由客户端以GET方法向服务器端传送setAttribute(String name,Java.lang.Object o):设定名字为name的request参数值,该值由Object类型的o指定getAttribute(String name):返回name指定的属性值,若不存在指定的属性,就返回空值(null)。getParameterValues(String name):获得指定参数所有值getparameterNames():获得客户端传送给服务器端的所有的参数名,结果集是一个Enumeration(枚举)类
4、的实例getattributeNames():返回request对象所有属性的名字,结果集是一个Enumeration(枚举)类的实例getCookies():返回客户端的cookie对象,结果是一个cookie数组getHeader(String name):获得http协议定义的传送文件头信息,如:request.getHeader(“User-agent”)返回客户端浏览器的版本号、类型getRequestURI():获得发出请求字符串的客户端地址getMethod():获得客户端向服务器端传送数据的方法有GET、POST、PUT等类型getServletPath():获得客户端所请求的
5、脚本文件的文件路径getHeaderNames():返回所有request header的名字,结果集是一个Enumeration(枚举)类的实例getHeaders(String name):返回指定名字的request header的所有值,结果集是一个Enumeration(枚举)类的实例getServerName():获得服务器的名字getServerPort():获得服务器的端口号getRemoteAddr():获得客户端的IP地址getRemoteHost():获得客户端电脑的名字,若失败,则返回客户端电脑的IP地址getProtocol():获取客户端向服务器端传送数据所依据的协
6、议名称,如http/1.1例获得客户端基本信息request_method.jsp 填写姓名:填写姓名: 例获取用户提交的请求信息form1.jsp获取文本框提供的信息:获取文本框提供的信息: 获取按钮的名字:获取按钮的名字: 客户端请求的方式:客户端请求的方式:客户端发送的姓名:客户端发送的姓名:响应程序响应程序request1.jspString textContent=request.getParameter(girl); if(textContent=null) textContent=; 注意:注意: 使用request对象获取信息时要避免使用了空对象。因为在客户请求页面时,客户可能
7、还没有提交数据,对象还没有被创建,就使用了该对象,Java解释器就会提示出现了NullPointerException异常。 为避免出现这种问题,使用如下代码加以避免:注意:中文显示问题 若是直接赋值的中文字符串,用就可正常显示。 request传过来的中文字符串可通过如下方法设置显示方式:String aa=str;byte aa=aa.getBytes(“ISO8859-1”);String bb=new String(aa); 或在使用request对象前插入语句:2 response对象 当当客客户户访访问问一一个个服服务务器器的的页页面面时时,会会提提交交一一个个HTTP请求,服务器
8、收到请求时,返回请求,服务器收到请求时,返回HTTP响应。响应。 与与request对象相对应的对象是对象相对应的对象是response对象。用对象。用response对象对客户的请求作出动态响应,向客户端发对象对客户的请求作出动态响应,向客户端发送数据。比如,当一个客户请求访问一个送数据。比如,当一个客户请求访问一个JSP页面时,该页面时,该页面用页面用page指令设置页面的指令设置页面的contentType属性的值是属性的值是text/html,那么,那么JSP引擎将按着这种属性值响应客户对引擎将按着这种属性值响应客户对页面的请求,将页面的静态部分返回给客户。如果想动页面的请求,将页面的
9、静态部分返回给客户。如果想动态地改变态地改变contentType的属性值就需要用的属性值就需要用response对象对象改变页面的这个属性的值,作出动态的响应。改变页面的这个属性的值,作出动态的响应。方法: addHeader(String name,String value):添加:添加HTTP文件文件头,该头,该header将会传到客户端,若同名的将会传到客户端,若同名的header存在,存在,原来的原来的header会被覆盖。会被覆盖。containsHeader(String name):判断指定名字的:判断指定名字的HTTP文件头是否存在并返回布尔值。文件头是否存在并返回布尔值。s
10、endError(int sc):向客户端发送错误信息,如:向客户端发送错误信息,如:505:服务器内部错误;服务器内部错误;404:网页找不到错误。如:网页找不到错误。如:response.sendError( response.SC_NO_CONTENT);setHeader(String name,String value):设定指定名字的:设定指定名字的HTTP文件头的值,若该值存在,它将会被新值覆盖。文件头的值,若该值存在,它将会被新值覆盖。如如1:让网页每隔:让网页每隔5秒刷新一次秒刷新一次the current dateis:如如2:利用:利用response对象设定对象设定HT
11、TP头头实例实例response_method.jsp动态响应动态响应contentType属性属性 由于由于page指令只能为指令只能为contentType指定一个值,来指定一个值,来决定响应的决定响应的MIME类型,如果想动态的改变这个属性的值类型,如果想动态的改变这个属性的值来响应客户,就需要使用来响应客户,就需要使用response对象的对象的setContentType(String s)方法来改变方法来改变contentType的的属性值:属性值: response.setContentType(String s); 该方法动态设置响应的该方法动态设置响应的MIME类型,参数类型
12、,参数s可取:可取:text/html、 application/x-msexcel、application/msword等。等。 MIME(Multipurpose Internet Mail Extentions),表示多用途表示多用途Internet邮件扩允协议邮件扩允协议 当服务器用当服务器用setContentType方法动态改变了方法动态改变了contentType的属性值,即响应的的属性值,即响应的MIME类型,并将类型,并将JSP页面的输出结果按着新的页面的输出结果按着新的MIME类型返回给客户时,客户类型返回给客户时,客户端要保证支持这种新的端要保证支持这种新的MIME类型。
13、类型。 客户如果想知道自己的浏览器能支持哪些客户如果想知道自己的浏览器能支持哪些MIME类型,类型,可以点击资源管理器可以点击资源管理器工具工具文件夹选项文件夹选项文件类型。文件类型。常见MIME类型: 我正在学习我正在学习response对象的对象的 setContentType方法方法 将当前页面保存为将当前页面保存为word文档吗?文档吗? JSP页面通过动态地改变contentType的属性值,浏览器提示用户用Ms-Word格式来显示当前页面。 运行Response重定向重定向 sendRedirect(URL):可以将用户重定向到一个不同:可以将用户重定向到一个不同的页面(的页面(U
14、RL)。)。 sendRedirect(URL)方法通过返回特定的状态代码而方法通过返回特定的状态代码而起作用,当它被调用时,返回一个状态代码,然后在响应起作用,当它被调用时,返回一个状态代码,然后在响应中定位,给新页面一个新地址。中定位,给新页面一个新地址。 在某些情况下,当响应客户时,需要将客户重新引导在某些情况下,当响应客户时,需要将客户重新引导至另一个页面。例如,如果客户输入的表单信息不完整,至另一个页面。例如,如果客户输入的表单信息不完整,就会再被引导到该表单的输入页面。就会再被引导到该表单的输入页面。 可以使用可以使用response的的sendRedirect(URL url)方
15、法实方法实现客户的重定向。现客户的重定向。 在下面的例子中,客户在在下面的例子中,客户在Example2.jsp页面填写表单页面填写表单提交给提交给tree1.jsp页面,如果填写的表单不完整就会重新定页面,如果填写的表单不完整就会重新定向到向到Example2.jsp页面。页面。sendRedirect.jsp: 填写姓名:填写姓名: tree1.jsp: 3 Out对象对象 out对象是一个输出流,用来向客户端输出数对象是一个输出流,用来向客户端输出数据。在前面的许多例子里曾多次使用据。在前面的许多例子里曾多次使用out对象进对象进行数据的输出。行数据的输出。out对象可调用如下的方法用于
16、对象可调用如下的方法用于各种数据的输出。各种数据的输出。 方法:方法:out.print(数据数据) 或或 out.println(数据数据) out.newLine():输出一个换行符号:输出一个换行符号out.flush():输出缓冲区的数据:输出缓冲区的数据out.close():关闭输出流:关闭输出流out.clearBuffer():清除缓冲区里的数据,并把:清除缓冲区里的数据,并把数据写到客户端数据写到客户端out.clear():清除缓冲区里的数据,但不把数:清除缓冲区里的数据,但不把数据写到客户端据写到客户端out.getBufferSize():获得缓冲区的大小,缓:获得缓冲
17、区的大小,缓冲区的大小可用冲区的大小可用设置设置out.getRemaining():获得缓冲区没有使用的:获得缓冲区没有使用的空间的大小空间的大小out.isAutoFlush():返回布尔值,若返回布尔值,若auto flush则返回则返回true,否则返回,否则返回false。是否。是否auto fush我们可用我们可用%page is AutoFlush=”true/false”%来设置来设置 实例实例下例使用out对象向客户输出包括表格等内容的信息。例子 out.jsp % int a=100;long b=300;boolean c=true; out.println(这是标题这是
18、标题1字体的大小字体的大小); out.println(这是标题这是标题2字体的大小字体的大小); out.print(); out.println(a); out.println(b); out.println(c); % 以下是一个表格以下是一个表格 %out.print(); out.println(); out.println(); out.println(+姓名姓名+); out.println(+性别性别+); out.println(+出生日期出生日期+); out.println(+); out.println(+刘甲一刘甲一+); out.println(+男男+); out
19、.println(+1978年年5月月+); out.println(“+); out.println(+林霞林霞+); out.println(+女女+); out.println(+1979年年8月月+); out.println(+这是表格这是表格+); out.println(+) ; % Cookies集合集合 浏览器与WEB服务器之间是使用HTTP协议进行通信的,当某个用户发出页面请求时,WEB服务器只是简单的进行响应,然后就关闭与该用户的连接。 因此当一个请求发送到WEB服务器时,无论其是否是第一次来访,服务器都会把它当作第一次来对待。为了弥补这个缺陷,Netscape开发出了c
20、ookie这个有效的工具来保存某个用户的识别信息,因此人们昵称为“小甜饼”。 cookie是一种WEB服务器通过浏览器在访问者的硬盘上存储信息的手段:Netscape Navigator使用一个名为cookie.txt本地文件保存从所有站点接收的Cookie信息;而IE浏览器把Cookie信息保存在类似于C:Documents and SettingsAdministratorCookies的目录下。 当用户再次访问某个站点时,服务端将要求浏览器查找并返回先前发送的Cookie信息,来识别这个用户。 cookie的好处: 1、能使站点跟踪特定访问者的访问次数、最后访问时间和访问者进入站点的路径
21、。2、能告诉在线广告商广告被点击的次数 ,从而可以更精确的投放广告。3、有效期限未到时,Cookie能使用户在不键入密码和用户名的情况下进入曾经浏览过的一些站点。 4、能帮助站点统计用户个人资料以实现各种各样的个性化服务。 Cookie的缺陷: 多人共用一台电脑的问题 ;Cookie被删除时的问题。 Cookie的应用: 1、网站浏览人数管理。 2、按照用户的喜好定制网页外观。 3、在电子商务站点中实现诸如“购物篮”等功能。创建创建Cookie JSP是调用Cookie相应的构造函数Cookie( name, value)用合适的名字和值来创建Cookie,然后 通过HttpServletRe
22、sponse的addCookie方法加入到Set-Cookie应答头,创建cookie的语法格式:Cookie cookie_name =new Cookie(“Parameter”,“Value”);response.addCookie(cookie_name); 例如:Cookie newCookie =new Cookie(username,“lisi); response.addCookie(newCookie); 注意:名字和值都不能包含空白字符以及下列字符: : ;? , / ( ) = Cookie的写入与读取 在JSP中,程序是通过cookie.setXXX设置各种属性,用co
23、okie.getXXX读出cookie的属性 例如例如 :cookie值的写入:在Cookie发送到客户端前,先要创建一个Cookie,然后用addCookie方法发送。Cookie值的读取:调用request.getCookies()从客户端读入Cookie。你好,!/如果找到后,向他问好 当给不存在的Cookies集合设置时,就会在客户机创建,如果该Cookies己存在,则会被代替。由于Cookies是作为HTTP传输的头信息的一部分发给客户机的,所以向客户机发送Cookies的代码一般放在发送给浏览器的HTML文件的标记之前。 需要注意的是,只有在服务器未被下载任何数据给浏览器前,浏览器
24、才能与Server进行Cookies集合的数据交换,一旦浏览器开始接收Server所下载的数据,Cookies的数据交换则停止,为了避免错误,要在程序和前面加上response.Buffer=True。 设置Cookie的存在时间及删除Cookie 在JSP中,使用setMaxAge(int expiry)方法来设置Cookie的存在时间,参数expiry应是一个整数。正值表示cookie将在这么多秒以后失效。 注意这个值是cookie将要存在的最大时间,而不是cookie现在的存在时间。 负值表示当浏览器关闭时,Cookie将会被删除。零值则是要删除该Cookie。如:如: Cookie的存
25、放位置 由于Cookie是我们浏览的网站传输到用户计算机硬盘中的文本文件或内存中的数据,因此它在硬盘中存放的位置与使用的操作系统和浏览器密切相关。在Windows NT/2000/XP的计算机中,Cookie文件的存放位置为C:Documents and Settings用户名Cookie。 Cookie的设置 在IE的“工具/Internet选项”的“常规”选项卡中,选择“设置/查看文件”,查看所有保存到你电脑里的Cookie。这些文件通常是以userdomain格式命名的,user是你的本地用户名,domain是所访问的网站的域名。 打开“工具/Internet选项”中的“隐私”选项卡(注
26、意该设置只在IE6.0中存在,其他版本IE可以单击“工具/Internet选项” “安全”标签中的“自定义级别”按钮,进行简单调整),可以调整Cookie的安全级别。问题:问题:服务器是如何控制服务器是如何控制用户访问的?用户访问的?例:例:简单的小说阅读网站简单的小说阅读网站4 Session对象对象 session即会话,用来记录客户从连接到服务器到即会话,用来记录客户从连接到服务器到离开服务器过程中的一切信息。离开服务器过程中的一切信息。 JSP引擎每次响应客户端请求时,首先检查客户端引擎每次响应客户端请求时,首先检查客户端请求中是否包含请求中是否包含sessionid: 如果如果不包含
27、不包含, JSP引擎产生一个引擎产生一个session对象,调对象,调用相应的方法存储客户在访问期间提交的各种信息,如用相应的方法存储客户在访问期间提交的各种信息,如姓名、号码等。并为该姓名、号码等。并为该session对象被分配一个对象被分配一个Id号,号,将该将该Id号发送到客户端,存放在客户的号发送到客户端,存放在客户的Cookie中。中。 如果已包如果已包含,含,则则说说明以前已经为此客户端创建过明以前已经为此客户端创建过session,服务器就依照,服务器就依照sessionid把把该该 session对象对象检检索出来使用索出来使用,直到该,直到该session对象失效。对象失效。
28、 当客户重新打开浏览器再连接到该服务器时,服务当客户重新打开浏览器再连接到该服务器时,服务器为该客户再创建一个新的器为该客户再创建一个新的session对象。对象。方法方法:(1) session.setAttribute(String key ,Object obj) session对象类似于散列表,对象类似于散列表,session对象可以对象可以调用该方法将参数调用该方法将参数Object指定的对象指定的对象obj添加到添加到session对象中,并为添加的对象指定了一个索引关对象中,并为添加的对象指定了一个索引关键字,如果添加的两个对象的关键字相同,则先前添键字,如果添加的两个对象的关键
29、字相同,则先前添加的对象被清除。加的对象被清除。(2) session.getAttibue(String key) 获取获取session对象含有的关键字是对象含有的关键字是key的对象。的对象。由于任何对象都可以添加到由于任何对象都可以添加到session对象中,因此用对象中,因此用该方法取回对象时,应强制转化为原来的类型。该方法取回对象时,应强制转化为原来的类型。(3) session.removeAttribue(String key) 从当前从当前session对象中删除关键字是对象中删除关键字是key的对象。的对象。(4)session.getId() 获取获取session对象的
30、编号。对象的编号。(5)session.getCreationTime() session的创建时间的创建时间.(6)session. getLastAccessedTime() 客户端最近一次请求时间客户端最近一次请求时间.(7)session. getMaxInactiveInterval() 两次请求间隔多长时间此两次请求间隔多长时间此SESSION被取消被取消(8)session. isNew() 是否是新创建的一个是否是新创建的一个SESSION 实例实例应用应用: 计数器计数器 在第前面讲述中有一个计数器的例子,但那个例在第前面讲述中有一个计数器的例子,但那个例子并不能限制客户通过
31、不断的刷新页面来增加计数器子并不能限制客户通过不断的刷新页面来增加计数器的计数,在下面的例子中,用的计数,在下面的例子中,用session对象禁止客户对象禁止客户通过刷新页面增加计数。当客户刷新页面时,我们可通过刷新页面增加计数。当客户刷新页面时,我们可以使用以使用session的的public boolean isNew() 方法判断方法判断是否是一个新的客户,因为客户刷新页面不会改变服是否是一个新的客户,因为客户刷新页面不会改变服务器分配给该客户的务器分配给该客户的session对象。对象。例子 jsq.jsp 您是第您是第个访问本站的人。个访问本站的人。session对象与对象与URL重
32、写重写 session对象能和客户建立起一一对应关系依赖于客对象能和客户建立起一一对应关系依赖于客户的浏览器是否支持户的浏览器是否支持Cookie。如果客户端不支持。如果客户端不支持Cookie,那么客户在不同网页之间的,那么客户在不同网页之间的session对象可能是互不相对象可能是互不相同的,因为服务器无法将同的,因为服务器无法将Id存放到客户端,就不能建立存放到客户端,就不能建立session对象和客户的一一对应关系。我们将浏览器的对象和客户的一一对应关系。我们将浏览器的Cookie设置为禁止后(选择浏览器菜单设置为禁止后(选择浏览器菜单工具工具Internet选项选项安全安全inter
33、net和本地和本地intranet自定义级别自定义级别cooker,将全部选项设置成禁止),运行上述例子会得,将全部选项设置成禁止),运行上述例子会得到不同的结果。也就是说,到不同的结果。也就是说,“同一客户同一客户”对应了多个对应了多个session对象,这样服务器就无法知道在这些页面上访问对象,这样服务器就无法知道在这些页面上访问的实际上是同一个客户。的实际上是同一个客户。 如果客户的浏览器不支持如果客户的浏览器不支持Cookie,我们可以通过,我们可以通过URL重重写来实现写来实现session对象的唯一性。所谓对象的唯一性。所谓URL重写,就是当客户重写,就是当客户从一个页面重新连接到
34、一个页面时,通过向这个新的从一个页面重新连接到一个页面时,通过向这个新的URL添加添加参数,把参数,把session对象的对象的Id传带过去,这样就可以保障客户在传带过去,这样就可以保障客户在该网站各个页面中的该网站各个页面中的session对象是完全相同的。可以使用对象是完全相同的。可以使用response对象调用对象调用encodeURL()或或encodeRedirectURL()()方法实现方法实现URL重写,比如,如果从重写,比如,如果从tom.jsp页面连接到页面连接到jerry页页面,首先实现面,首先实现URL重写:重写:然后将连接目标写成然后将连接目标写成 . 如果客户不支持如
35、果客户不支持Cookie,在下面的例子,在下面的例子2中将例子中中将例子中1中中的的session.jsp、tom.jsp和和jerry.jsp实行实行URL重写。重写。String str=response.encodeRedirectURL(jerry.jsp);session_encode.jsp: session对象:对象: 您的您的session对象的对象的ID是:是: 您您向向URL:http:/localhost:8080/obj/session_encode1.jsp写写入入的信息是:的信息是: FORM action= method=post name=form sessio
36、n_encode1.jsp :我是我是session_encode1.jsp页面页面 您您在在session_encode1.jsp页页面面中中的的session对对象象的的ID是是: 您您向向URL:http:/localhost:8080/obj/session_encode2.jsp写写入入的信息是:的信息是: 点击超链接,连接到点击超链接,连接到session_encode2.jsp的页面。的页面。A HREF= 欢迎到欢迎到Jerry屋来!屋来! session_encode2.jsp :我是我是jerry页面页面 您您的的在在session_encode2.jsp页页面面中中的的s
37、ession对对象象的的ID是是: 您您 向向 URL:http:/localhost:8080/obj/session_encode.jsp写入的信息是:写入的信息是: 点击超链接,连接到点击超链接,连接到session的页面。的页面。A HREF= 欢迎到欢迎到session屋来!屋来! 基本的购物实例:基本的购物实例:使用使用session对象存储对象存储顾客的姓名和购买的商品。顾客的姓名和购买的商品。 gouwu.jsp 输入你的姓名连接到第一百货:输入你的姓名连接到第一百货:first.jsp first.jsp: 这里是第一百货这里是第一百货输入你想购买的商品连接到结帐:输入你想购
38、买的商品连接到结帐:account.jsp account.jsp: 这里是结帐处这里是结帐处的姓名是:的姓名是: 您选择购买的商品是:您选择购买的商品是: session对象创建购物车的完整代码对象创建购物车的完整代码一、构建的商品类一、构建的商品类 Goods.java 写一个写一个Goods类,并定义商品的各个属性,返回商类,并定义商品的各个属性,返回商品属性的方法,以及商品对象进行比较的方法品属性的方法,以及商品对象进行比较的方法二、购物车二、购物车 shopcar.jsp 首先建立首先建立Goods(商品商品)对象对象goods,并建立建立,并建立建立ArrayList对象对象ay,
39、再通过,再通过ArrayList对象的方法对象的方法add()将将商品对象添加到商品对象添加到ArrayList对象对象ay中,由于中,由于ArrayList对对象是具有添加和删除成员的方法,从而实现多个商品存象是具有添加和删除成员的方法,从而实现多个商品存储管理于储管理于ArrayList对象,最后将对象,最后将ArrayList对象对象ay存储存储于于session对象当中,实现购物车功能。对象当中,实现购物车功能。三、删除商品三、删除商品 removeGoods.jsp 对购物车中的商品进行删除操作。对购物车中的商品进行删除操作。5 Application对象 Application对象
40、和对象和Session对象相比,含义更加广对象相比,含义更加广泛。在使用泛。在使用Session对象时,各个客户端共享一个对象时,各个客户端共享一个Session对象,而使用对象,而使用Application对象时,在同一个服对象时,在同一个服务器中的务器中的JSP文件共享一个文件共享一个Application对象。对象。 作用:一旦创建,除非服务器关闭,否则将一直保作用:一旦创建,除非服务器关闭,否则将一直保持下去。持下去。Application对象主要方法为:对象主要方法为: application.getServerInfo() 返回返回JSP(servlet)引擎名及版本号。引擎名及版
41、本号。 application.getRealPath(“application.jsp”) 返回返回/application.jsp虚拟路径的真实路径。虚拟路径的真实路径。application.getMajorVersion() 服务器支持的服务器支持的Servlet API的大版本号。的大版本号。application.getMinorVersion() 服务器支持的服务器支持的Servlet API的小版本号。的小版本号。application.getResource(/obj) 指定资源指定资源(文件及目录文件及目录)的的URL路径。路径。application.setAttribu
42、te(String name,Object object) 将参数将参数Object指定的对象指定的对象obj添加到添加到application对对象中,并为添加的对象指定一个属性。象中,并为添加的对象指定一个属性。application.getAttribute(String name): 返回由返回由name指定名字的指定名字的Application对象属性的值,对象属性的值,这是个这是个Object对象,如果没有,就返回对象,如果没有,就返回null。application.getAttributeNames(): 返回所有返回所有Application对象的属性的名字,结果集对象的属性
43、的名字,结果集是一个是一个Enumeration(枚举)类的实例。(枚举)类的实例。 application.getInitParameter(String name): 返回由返回由name指定的名字的指定的名字的application对象的某个对象的某个属性的初始值,如果没有参数,就返回属性的初始值,如果没有参数,就返回null。application.removeAttribue(String key) 从当前从当前application对象中删除关键字是对象中删除关键字是key的对象。的对象。 实例实例 注:注:由于由于application对象为所有客户公用,任何客户对象为所有客户公
44、用,任何客户对对象中存储数据的改变都会影响到其他客户,因此,在对对象中存储数据的改变都会影响到其他客户,因此,在某些情况下,对该对象的操作需要实现同步处理。某些情况下,对该对象的操作需要实现同步处理。 有些服务器不直接支持使用有些服务器不直接支持使用application对象,必须先对象,必须先用用ServletContext类声明,再使用类声明,再使用getServletContext()方方法对这个法对这个application对象进行初始化。对象进行初始化。用用application制作留言板制作留言板 在下例中,客户通过在下例中,客户通过submit.jsp向向messagePane.
45、jsp页面提交姓名、留言标题和留言内容,页面提交姓名、留言标题和留言内容,messagePane.jsp页面获取这些内容后,用同步方法将这些内容添加到一个页面获取这些内容后,用同步方法将这些内容添加到一个向量中,然后将这个向量再添加到向量中,然后将这个向量再添加到application对象中。当对象中。当用户点击查看留言版时,用户点击查看留言版时,showMessage.jsp负责显示所有负责显示所有客户的留言内容,即从客户的留言内容,即从application对象中取出向量,然后对象中取出向量,然后遍历向量中存储的信息。遍历向量中存储的信息。例子submit.jsp: 输入您的名字:输入您的
46、名字: 输入您的留言标题:输入您的留言标题: 输入您的留言:输入您的留言: messagePane.jsp: % String name=request.getParameter(peopleName); String title=request.getParameter(Title); String messages=request.getParameter(messages); if(name=null) name=guest+(int)(Math.random()*10000); if(title=null) title=无标题无标题; if(messages=null) message
47、s=无信息无信息; String s=Name:+name+#+Title:+title+#+Content: + +messages; sendMessage(s); out.print(您的信息已经提交!您的信息已经提交!); % 返回返回 showMessage.jsp:% Vector v=(Vector)application.getAttribute(Mess); for(int i=0;iv.size();i+) String message=(String)v.elementAt(i); StringTokenizer fenxi=new StringTokenizer(message,#); while(fenxi.hasMoreTokens() String str=fenxi.nextToken(); byte a=str.getBytes(ISO-8859-1); str=new String(a); out.print(+str); %