1、13 JSP隐含对象23 JSP隐含对象 3.1 对象的属性与有效范围对象的属性与有效范围3.2 JSP的隐含对象的隐含对象 3.3小结小结3.4习题习题 33 JSP隐含对象 JSP容器提供了以下几个隐含对象,它们是:request、response、out、session、application、config、page、pageContext和exception。由于JSP是构建在Servlet上的,从本质上来讲,JSP的每个隐含对象都与Java Servlet API包中的类相对应,在服务器运行时自动生成。本章对它们进行详细的介绍。43.1 对象的属性与有效范围对象的属性与有效范围 对象
2、的属性对象的属性JSP技术提供给开发人员一项传递数据的机制,就是利用技术提供给开发人员一项传递数据的机制,就是利用setAttribute()和和getAttribute()方法。方法。setAttribute()方法方法方法的声明格式:方法的声明格式:abstract void setAttribute(String name,Object object)说明:说明:如果有权访问该属性,则该方法用给出的对象来替代这个请求属如果有权访问该属性,则该方法用给出的对象来替代这个请求属性的现有值。性的现有值。getAttribute()方法方法方法的声明格式:方法的声明格式:abstract Str
3、ing getAttribute(String name)说明:说明:返回指定名称的属性值,如果属性不存在则返回返回指定名称的属性值,如果属性不存在则返回null。与。与setAttribute方法配合使用可实现两个方法配合使用可实现两个JSP文件之间的参数传递。文件之间的参数传递。53.1 对象的属性与有效范围对象的属性与有效范围(续续)对象的有效范围对象的有效范围页内有效页内有效 具有页内有效范围的对象被绑定到具有页内有效范围的对象被绑定到javax.servlet.jsp.PageContext对象中。在这个范围内的对象中。在这个范围内的对象,只能在创建对象的页面中访问。可以调用对象,只
4、能在创建对象的页面中访问。可以调用pageContext这个隐含对象的这个隐含对象的getAttribute()方法来访问方法来访问具有这种范围类型的对象(具有这种范围类型的对象(pageContext对象还提供了访对象还提供了访问其他范围对象的问其他范围对象的getAttribute方法),方法),pageContext对对象本身也属于象本身也属于page范围。范围。page范围内的对象,在客户端范围内的对象,在客户端每次请求每次请求JSP页面时创建,在页面向客户端发送回响应或页面时创建,在页面向客户端发送回响应或请求被转发(请求被转发(forward)到其他的资源后被删除。)到其他的资源后
5、被删除。在同一个页面内,参数的设值和取值均能实现。在同一个页面内,参数的设值和取值均能实现。63.1 对象的属性与有效范围对象的属性与有效范围(续续)示例:在同一JSP页面pageSetGet.jsp中利用pageContext对象利用setAttribute()和getAttribute()两个方法实现对参数的设值和取值。代码如下:页内有效范围 73.1 对象的属性与有效范围对象的属性与有效范围(续续)页内有效-使用页面上下文对象pageContext.setAttribute()和pageContext.getAttribute()83.1 对象的属性与有效范围对象的属性与有效范围(续续)
6、如果现在将设值和取值分别放在两个不同如果现在将设值和取值分别放在两个不同的页面,结果会是如何呢?的页面,结果会是如何呢?93.1 对象的属性与有效范围对象的属性与有效范围(续续)参数的设值放在pageSet.jsp中,代码如下:页内有效范围页内有效-使用页面上下文对象pageContext.setAttribute()103.1 对象的属性与有效范围对象的属性与有效范围(续续)参数的取值放在pageGet.jsp中,代码如下:页内有效范围页内有效-使用页面上下文对象pageContext.getAttribute()113.1 对象的属性与有效范围对象的属性与有效范围(续续)请求有效 请求有效
7、的对象在同一请求不同JSP页面内都可以访问。如果请求转向到同一运行时(Runtime)的其他资源,这些对象依然有效。请求有效的对象在请求处理结束时就会失效。所有的请求有效的对象都存储在JSP页面的request对象中。request对象在服务器启动时自动创建,是javax.servlet.HttpServletRequest接口的一个实例。request对象的作用是与客户端交互,收集客户端的Form、Cookies、超链接或收集服务器端的环境变量。修改前面例子中的pageSet.jsp和pageGet.jsp,将pageContext对象修改为request对象。123.1 对象的属性与有效范
8、围对象的属性与有效范围(续续)会话有效 会话是指客户端和服务器之间持续连接的一段时间。在这段时间内,当需要多次和服务器交互信息时,可以将有关信息存入session对象中,这些信息是会话有效的。在与服务器断线后,就会失效。可以说,session的作用范围就是一段用户持续和服务器连接的时间。会话有效的所有对象都存储在JSP页面的session对象中。修改上例,修改requestSet.jsp为seesionSet.jsp,requestGet.jsp修改为sessionGet1.jsp,并在该代码中添加,包含sessionGet2.jsp页面,重新获取参数并显示。133.1 对象的属性与有效范围对
9、象的属性与有效范围(续续)应用有效 应用的作用范围是从Web应用服务器一开始执行服务一直到结束服务为止。应用有效范围最大、影响最长。应用有效的对象都存储在JSP页面的application对象中,其实就是服务端Servlet上下文信息对象(ServletContext)。在实际使用时注意不要使用过多,以免造成服务器负载过大。修改在第2.4.4节案例2中的登录页面content.jsp,在代码最后添加脚本如下:143.1 对象的属性与有效范围对象的属性与有效范围(续续)另创建一个TestApplication.jsp页面,与content.jsp表面上没有关系,代码如下:用户名:密 码
10、:153.2 JSP的隐含对象 3.2.1 案例1-使用out隐含对象 第2章介绍过表达式可以完成输出,但是表达式在求值之后的结果转换成了String对象,该对象被发送到out对象中,也就是说,客户端浏览器中显示的信息,就是服务器端通过out对象实现的。out对象的常用方法如表3.2所示。163.2 JSP的隐含对象(续)在JSP中,out对象主要用来管理响应缓冲和向客户端输出内容。案例1 利用out.print方式和表达式方式两种方式进行输出。173.2 JSP的隐含对象(续)out1.jsp采用out.print方式输出,代码如下:out对象%out.println(Hello!);out
11、.println(BufferSize of the Out Object is:+out.getBufferSize()+);out.println(Remain of BufferSize is:+out.getRemaining()+);%for(int i=0;i5;i+)out.println(Test);%183.2 JSP的隐含对象(续)out2.jsp采用表达式方式输出,代码如下:out对象 Hello!BufferSize of the Out Object is:Remain of BufferSize is:%for(int i=0;i5;i+)out.println(T
12、est);%autoFlush:193.2 JSP的隐含对象(续)3.2.2 案例2-使用request隐含对象 request对象是从客户端向服务器发出请求,包括用户提交的信息以及客户端的一些信息。客户端可通过HTML表单或在网页地址后面提供参数的方法提交数据,然后通过request对象的相关方法来获取这些数据。request的各种方法主要用来处理客户端浏览器提交的请求中的各项参数和选项。常见的方法如表3.3所示。203.2 JSP的隐含对象(续)案例2 利用request常见方式,显示客户端发送的HTTP请求包的信息、获取到的客户端和服务器端的信息。213.2 JSP的隐含对象(续)在We
13、b动态网站技术中,重要的一个环节就是火气从介乎的发送的请求信息,如果叫的表单登录信息、客户查询信息等,并根据提交信息做进一步操作。在JSP程序中,完成从客户端火气数据的方法可以是getParameter()、getParameterName()和getParameterValues(),其中比较常用的为getPatameter()方法223.2 JSP的隐含对象(续)3.2.3 案例3-使用response隐含对象 response对象是javax.servlet.ServletResponse接口中的一个针对HTTP协议和实现的子类的实例。Response对象是表示服务器对请求的响应的Htt
14、pServletResponse对象,用于动态响应客户端请示,控制发送给用户的信息,并将动态生成响应。response对象和request对象功能恰好相反,request对象封装的是客户端提交的信息,而对象封装的是返回客户端的信息。response对象和request对象的作用域相同。response对象也由容器生成,作为jspService()方法的参数被传入JSP。response方法可以分为三类:设定表头方法、设定响应状态码和重定向方法。233.2 JSP的隐含对象(续)在动态网站的操作中,经常需要从一个页面转向到另一个页面,如登录的成功与否,可能需要转向不同的页面。要达到页面重定向的效
15、果,可以采用第2章的动作指令jsp:forward,也可以采用response对象的sendRedirect方法。该方法的具体格式为:public abstract void sendRedirect(String url)案例3 将前面请求有效的例子进行修改,其requestSet.jsp中转向页面的jsp:forward语句修改为:,requestGet.jsp保持不变243.2 JSP的隐含对象(续)从执行效果可以看出,动作指令jsp:forward与sendRedirect(String url)方法的不同在于以下几点:地址栏显示不同 forward是服务器请求资源,服务器直接访问目标
16、地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器。浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址,即仍为http:/localhost:8080/FirstJSP/requestSet.jsp,但显示的内容却是requestGet.jsp的结果。redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址。所以地址栏显示的是新的URL。即为http:/localhost:8080/FirstJSP/requestGet.jsp。redirect等于客户端向服务器端发出两次request,同时也接受两次response。253.
17、2 JSP的隐含对象(续)数据共享不同 forward转发页面和转发到的页面可以共享request里面的数据,所以提取出来的歌曲名能正确显示,而redirect不能共享数据,提取出来的数据为null。重定向范围不同 redirect不仅可以重定向到当前应用程序的其他资源,还可以重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源。forward只能在同一个Web应用程序内的资源之间转发请求。263.2 JSP的隐含对象(续)3.2.4 案例案例4-使用使用application隐含对象隐含对象一个一个Web服务器通常有多个服务器通常有多个Web服务目录服务目录
18、(网站网站),当,当Web服务器启动时,它自动为每个服务器启动时,它自动为每个Web服务目录都创建一个服务目录都创建一个application对象,这些对象,这些application对象各自独立,而且和对象各自独立,而且和Web服务目录一一对应。访问同一个网站的客户都共享一个服务目录一一对应。访问同一个网站的客户都共享一个application对象,因此,对象,因此,application对象可以实现多客户间对象可以实现多客户间的数据共享。的数据共享。一个一个Web应用程序启动后,将会自动创建一个应用程序启动后,将会自动创建一个application对象,而且在整个应用程序的运行过程中只有一
19、个对象,而且在整个应用程序的运行过程中只有一个application对象,也即所有访问该网站的客户都共享一个对象,也即所有访问该网站的客户都共享一个application对象。对象。不管哪个客户来访问网站不管哪个客户来访问网站A,也不管客户访问网站,也不管客户访问网站A下哪个页面下哪个页面文件,都可以对网站文件,都可以对网站A的的application对象进行操作,因为,所对象进行操作,因为,所有访问网站有访问网站A的客户都共用一个的客户都共用一个application对象。访问不同网对象。访问不同网站的客户,对应的站的客户,对应的application对象不同。对象不同。案例案例4 利用利用
20、application对象设计一个所有用户对某网页的访问对象设计一个所有用户对某网页的访问次数,并显示当前服务器的版本号。次数,并显示当前服务器的版本号。273.2 JSP的隐含对象(续)3.2.5 案例5-使用session隐含对象 cookie对象 cookie对象是javax.servlet.http.Cookie的实例,是由Web服务器端产生后被保存到浏览器中的信息。cookie对象可以用来保存一些信息在浏览器中,当浏览器请求服务器的页面时会自动发送到服务器端。目前主流的浏览器IE、Netscape Navigator都支持cookie。大多数浏览器允许用户禁止cookie的使用,因此
21、,如果应用中必须使用cookie对象,一定要提示用户。283.2 JSP的隐含对象(续)示例:简单的写入和读出cookie。写入cookie的writeCookie.jsp代码如下:正在将写入Cookie。293.2 JSP的隐含对象(续)读出cookie的readCookie.jsp代码如下:读出Cookie的值:%Cookie cookies=request.getCookies();for(int i=0;i303.2 JSP的隐含对象(续)session对象 案例5 该案例包含三个文件,一个登录界面login.jsp,一个判断页面select.jsp,如果输入用户名为“susan”密码
22、为“1234”时跳转到ok.jsp页面,将会显示session的ID及用户名,如果用户名或密码错误直接给出提示。313.2 JSP的隐含对象(续)3.2.6 案例6-使用config隐含对象 config对象实现于javax.servlet.ServletConfig接口,web容器在初始化时使用一个ServletConfig(即config)对象向JSP页面传递信息,此配置信息包括初始化参数(在当前Web应用的应用部署描述文件web.xml中定义)以及表示Servlet或JSP页面所属Web应用的ServletContext对象。323.2 JSP的隐含对象(续)如果在web.xml文件中,
23、针对某个servlet文件或JSP文件设置了初始化参数,则可以通过config对象来获取这些初始化参数。案例6 利用config对象获取web.xml的初始化参数。333.2 JSP的隐含对象(续)3.2.7 案例7-使用exception隐含对象exception对象的基类是javax.servlet.jsp.JspException类。当JSP页面在执行过程中发生异常或错误时,会自动产生一个exception对象。在JSP页面中,使用page指令,设置isErrorPage属性值为true后,就可以使用该exception对象,来查找页面出错信息。Exception对象的使用包括两部分:确
24、定可能出现异常的页面和专门处理异常的页面。(1)可能出现异常的页面在有可能产生异常或错误的JSP页面中,使用page指令设置errorPage属性,属性值为能够进行异常处理的某个JSP页面。专门处理异常的页面在专门负责处理异常的JSP页面中,使用page指令设置isErrorPage属性为true,并使用exception对象来获取出错信息。343.2 JSP的隐含对象(续)案例7 创建一个出现异常的页面exception.jsp和一个专门处理异常的页面error.jsp。353.2 JSP的隐含对象(续)3.2.8 案例8-使用page隐含对象 page是java.lang.Object类的
25、对象。page对象在当前JSP页面中可以用this关键字替代。在JSP页面的Java程序脚本中和JSP表达式中都可以使用page对象。案例8 使用page指令定义属性info,然后使用getServletInfo()方法取得属性info的值363.2 JSP的隐含对象(续)3.2.9 案例9-使用pageContext隐含对象 pageContext对象是javax.servlet.jsp.PageContext类的实例对象,它是一个比较特殊的对象,它相当于页面中所有其他对象功能的最大集成者,即使用它可以访问到本页面中所有其他的对象,例如前面已经描述的request、response、out和
26、page对象等。由于在JSP中request和response等对象本来就可以通过直接调用方法使用,所以pageContext对象在实际JSP开发中很少使用到。pageContext对象在存取其他隐含对象属性的setAttribute方法中需要指定范围的参数,其语法格式为:void setAttribute(String name,Object value,int scope)373.2 JSP的隐含对象(续)案例9 利用pageContext对象设置四种范围的属性值并进行获取。利用pageContext对象的常用方法进行删除、查找属性等简单操作。383.3小结 JSP隐含对象包括隐含对象包括
27、9种,本章主要是对这种,本章主要是对这9种种对象进行了详细的介绍。对象进行了详细的介绍。9中隐含对象中涉及了四种有效范围,重点中隐含对象中涉及了四种有效范围,重点学习四种有效范围的特点。学习四种有效范围的特点。从使用和开发的角度介绍了从使用和开发的角度介绍了9种隐含对象各种隐含对象各自的由来、特点以及常用方法的介绍,每个隐含自的由来、特点以及常用方法的介绍,每个隐含对象在本章中都有案例进行了解释。对象在本章中都有案例进行了解释。学习这一章,应把注意力放在掌握各种隐含学习这一章,应把注意力放在掌握各种隐含对象的使用上,为以后的编程打下一个剑士的基对象的使用上,为以后的编程打下一个剑士的基础。由于
28、对象比较多,方法又很丰富,在文中用础。由于对象比较多,方法又很丰富,在文中用了比较简单的例子进行说明。了比较简单的例子进行说明。393.4习题 简答题简答题 1请说出请说出JSP中常用的隐含对象。中常用的隐含对象。2简述简述request对象和对象和response对象的作用。对象的作用。3session对象与对象与application对象有何区别?对象有何区别?4网页中的表单如何定义,通常表单中包含哪些元素?网页中的表单如何定义,通常表单中包含哪些元素?5JSP隐含对象有哪四个作用范围?什么情况下隐含对象有哪四个作用范围?什么情况下session会关闭?会关闭?6response.sendRedirect(URL url)方法有何作用?方法有何作用?7是不是所有是不是所有Web服务目录共用一个服务目录共用一个application?8怎样使用怎样使用request、session和和application对象进行参对象进行参数存取?数存取?9设计注册表单,利用设计注册表单,利用request对象实现获取用户注册信对象实现获取用户注册信息。息。10利用利用session对象实现购物车。对象实现购物车。
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。