《JavaWeb应用开发技术实用教程》-王红第3章JSP隐含对象.ppt_第1页
《JavaWeb应用开发技术实用教程》-王红第3章JSP隐含对象.ppt_第2页
《JavaWeb应用开发技术实用教程》-王红第3章JSP隐含对象.ppt_第3页
《JavaWeb应用开发技术实用教程》-王红第3章JSP隐含对象.ppt_第4页
《JavaWeb应用开发技术实用教程》-王红第3章JSP隐含对象.ppt_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2019/6/17,1,Java Web开发技术,第3章 JSP隐含对象,2019/6/17,Java Web开发技术,2,第3章 JSP隐含对象,为简化Web页面的开发过程,JSP提供了一些由容器实现和管理的隐含对象,这些对象在JSP页面中可以直接使用,不需要JSP页面编写者实例化。在JSP页面中,可以通过存取这些隐含对象实现与JSP页面和Servlet环境的相互访问。 本章主要内容包括:JSP隐含对象概述和各类隐含对象的具体说明。,2019/6/17,Java Web开发技术,3,3.1 JSP隐含对象概述,JSP页面的隐含对象就是在JSP页面中不用声明就可以使用的对象。隐含对象是JSP引擎自动创建的Java类实例,它们能与Servlet环境交互。隐含对象可以实现很多功能,如从客户端获得数据、向客户端发回数据、控制传输数据的有效域和异常处理等。如:,2019/6/17,Java Web开发技术,4,隐含对象功能,不必使用表达式,直接存取out对象来打印一些东西到客户端: 不必直接传送参数,可以借助请求对象来取得客户端输入的参数值: 完成页面的重定向: 在错误页面中显示出错信息: 等等,2019/6/17,Java Web开发技术,5,JSP中的9种隐含对象,与输入/输出有关,与属性作用域有关,与Servlet 相关,与错误处理有关,2019/6/17,Java Web开发技术,6,3.2与输入/输出有关的隐含对象,3.2.1 request对象 3.2.2 response对象 3.2.3 out对象,2019/6/17,Java Web开发技术,7,3.2.1 request对象,在JSP页面中,隐含对象request代表的是来自客户端的请求,通过它可以查看请求参数、请求类型(GET,POST,HEAD等)以及请求的HTTP头(Cookie,Referer等)客户端信息 ,它是实现 javax.servlet.HttpServletRequest 接口的类的一个实例。 request 对象的方法有很多 ,从功能角度可以将这些方法分为4类:,2019/6/17,Java Web开发技术,8,1取得请求参数的方法,2019/6/17,Java Web开发技术,9,2.取得请求HTTP 头的方法,2019/6/17,Java Web开发技术,10,3储存和取得属性方法,2019/6/17,Java Web开发技术,11,4其他的方法,2019/6/17,Java Web开发技术,12,4其他的方法(续),2019/6/17,Java Web开发技术,13,request比较重要的方法,getParameter() getParameterNames() getParameterValues() getHeader(),记住噢,2019/6/17,Java Web开发技术,14,. 获得客户端提交的信息,例exa3_1.jsp : 一个html文档exa3_1.jsp提交一个表单给tree.jsp页面,tree.jsp通过request.getParameter()接收表单中的客户输入,并将有关信息送回客户端。,2019/6/17,Java Web开发技术,15,获得客户端提交的信息(续), 文本框提交的用户名为: 客户端提交的按钮的名字为: ,exa3_1.jsp tree.jsp,1.运行,2.调用,3.结果,2019/6/17,Java Web开发技术,16,. 处理中文信息,在例exa3_1.jsp中输入中文时将不能正确显示, 如图所示: 这就引发如何处理客户端提交的中文问题。 JSP页面的汉字问题主要指两方面:JSP页面中的汉字问题和表单提交的汉字问题。,2019/6/17,Java Web开发技术,17,(1)JSP页面的汉字问题,对于JSP页面的汉字问题,需要在JSP中使用page指令告诉客户端汉字的编码方式:。在没有特别指示下,浏览器无法正确显示汉字,每个要显示汉字的JSP页面都应该包含该语句。,2019/6/17,Java Web开发技术,18,(2)表单提交的汉字问题,客户端和服务器交互过程中,在客户端和服务器用的是GB2312对汉字编码,而HTTP传输用ISO_8859_1编码,因此,不仅服务器端必须用指令指示客户端汉字的显示编码,同时在服务器端接收到客户端数据时需要将编码转换为GB2312后进行处理,方法是: 或 ,其中tt为表单提交的含有中文的变量,2019/6/17,Java Web开发技术,19,改进后的tree.jsp,我们只须在tree.jsp中加入中文处理的相关语句,中文就能正确显示了 ,代码如下:, 文本框提交的用户名为: ,2019/6/17,Java Web开发技术,20,. 避免空指针异常,例如一表单向JSP页面提交一个正数,然后计算这个正数的平方根,JSP中有这么一个语句:String textContent=request.getParameter(“num”),其中num代表表单提交的正数,要注意由于JSP引擎在运行这个JSP页面时,客户端还没有提交数据,textContent也还没有创建,而JSP页面中的number=Double.parseDouble(textContent)语句需要使用textContent,此时textContent对象为null,Java解释器会提示出现空指针异常NullPointerException。为了避免使用空对象,在JSP页面中使用了如下代码: if ( textContent=null ) textContent=“100“; ,2019/6/17,Java Web开发技术,21,. 其它常用方法,getServletPath() getContentLength() getMethod() getHeader( ) getProtocol() ,2019/6/17,Java Web开发技术,22,. 获取HTML表单中的各种数据,由于客户端经常使用表单提交数据,本节通过例子来说明表单中各种提交手段的用法。 表单的一般格式为: 表单中的标记(数据提交的手段) ,2019/6/17,Java Web开发技术,23,表单中各种提交手段 (1),下面例text.jsp表单的输入方式是文本框和口令,,运行结果如图3-8所示。,text.jsp关键代码: 表单 用户登录 用户名: 图3-8 密码: ,2019/6/17,Java Web开发技术,24,表单中各种提交手段 (2),下面例子用单选按钮实现网上测试 radio.jsp关键代码: answer.jsp关键代码:,p诗人李清照是中国历史上哪个朝代的人? 宋朝 唐朝 明朝 清朝 史记的作者是谁? 曹雪芹 罗贯中 李白 司马迁 , 您的了分,图3-9 radio.jsp的输出结果,2019/6/17,Java Web开发技术,25,表单中各种提交手段 (3),下面例子说明滚动列表使用方式 :,select.jsp关键代码: 选择计算和的方式 计算1到n的和 计算1到n的平方和 计算1到n的立方和 请选择n的值 n=10 n=20 n=30 n=40 n=50 n=100 ,sum.jsp关键代码: 您的求和结果是,2019/6/17,Java Web开发技术,26,. 表格,表格由和标记定义。一般格式为: 单元格中的数据 单元格中的数据 ,2019/6/17,Java Web开发技术,27,表格应用举例,下面例tableform.jsp是表单使用,运行结果如图所示。tableform.jsp关键代码:, 杜甫是哪个朝代的人?: 宋朝 唐朝 请在右边表格中输入数据: ,2019/6/17,Java Web开发技术,28,3.2.2 response对象,当客户访问一个服务器的页面时,会提交一个HTTP请求,服务器接到请求时会返回HTTP响应。响应是实现 javax.servlet.HttpServletResponse接口的类的一个实例。response对象代表的是对客户端的响应,可以通过response对象来组织发送到客户端的数据。response对象的方法也有很多, 下面的几个表列出了response对象的主要方法 :,2019/6/17,Java Web开发技术,29,设定表头的方法,2019/6/17,Java Web开发技术,30,设定响应状态码的方法,2019/6/17,Java Web开发技术,31,用来URL 重写的方法,2019/6/17,Java Web开发技术,32,其它方法,2019/6/17,Java Web开发技术,33,重要!,response对象中使用较多的方法是: setContentType() sendRedirect() setHeader(),记住噢,2019/6/17,Java Web开发技术,34,. 动态设置MIME类型,在page指令中的contentType属性用来指定response对象响应客户端请求的MIME(Multipurpose Internet Mail Extension protocol,多用途网际邮件扩充协议)类型。 ContentType属性值和MIME类型的主要对应关系如下表所示:,2019/6/17,Java Web开发技术,35,contentType属性和MIME类型的对应关系,page指令只能为contentType指定一个值,如果想动态地改变这个属性的值来以各种不同的方式做出响应,就要使用response对象的setContentType()方法改变contentType的值。一旦这个属性值被改变,服务器就将按照新的MIME类型做出响应 。参考example3-11.jsp 。,2019/6/17,Java Web开发技术,36,. response对象的http头,response对象可以使用addHeader()和setHeader()方法动态添加和修改相应头的值,并将这些头发送给客户端。下面例example3_12.jsp中,response对象添加一个头refresh,使客户端在显示该页面时,每5秒钟刷新一次。运行结果如图 : example3_12.jsp关键代码:, 现在的时间是: ,2019/6/17,Java Web开发技术,37,. response重定向,下面例中,客户填写表单,并提交给tree4.jsp页面。如果表单填写不完整,tree4.jsp会重新定向到填写页面,否则显示欢迎字样,运行结果如图 : tree4.jsp关键代码:,2019/6/17,Java Web开发技术,38,. response的状态行,当服务器响应客户端请求时,它发送的首行被称为状态行。状态行包括3位数字的状态码和对状态码的简单描述。其中,1xx主要是试验性质的;2xx表示请求成功;3xx表示在请求在满足之前应进一步采取的行动;4xx表示服务器无法满足要求;5xx服务器出现错误。具体可参考书中表3-11状态码表 。,2019/6/17,Java Web开发技术,39,3.2.3 out对象,out对象代表了向客户端发送数据的对象,通过out对象发送的内容将是浏览器需要显示的内容,是文本一级的。可以通过out对象直接向客户端写一个由程序动态生成HTML文件。它是javax.servlet.jsp.JspWriter类的一个实例。 JSP允许通过page指令的buffer属性调整out对象缓存的大小,甚至允许关闭缓存。,2019/6/17,Java Web开发技术,40,out对象重要方法,2019/6/17,Java Web开发技术,41,Out对象举例,Out.jsp关键代码: BufferSize : Available : Used : ,因为在每个页面中都用到out对象,因此在这儿仅举一个例子再展示一下out对象的主要方法。Out.jsp显示目前缓冲区的大小 。运行结果如图所示,2019/6/17,Java Web开发技术,42,3.3与属性作用域有关的对象,3.3.1 session对象 3.3.2 application对象 3.3.3 pageContext对象,2019/6/17,Java Web开发技术,43,3.3.1 session对象,HTTP是无状态(stateless)协议。客户端向服务器发送一次请求(request),服务器给与响应(response)后连接就关闭了。因此,当下一次连接时,服务器已经没有以前的连接信息了。服务器对每一个客户端请求都没有历史记忆的特点带来了一系列的问题。如在线商店购物时 ,当我们把商品加入购物车时,服务器如何才能知道车里原先有些什么?当用户从选择商品的页面转到输入信用卡号和送达地址的页面,服务器如何才能记住用户买了些什么?这个问题一般有三种解决方法:,2019/6/17,Java Web开发技术,44,解决方法:,Cookie :利用Cookie对象来存储有关购物会话的信息,后继的各个连接可以查看当前Cookie,提取有关该会话的完整信息。 重写URL :把一些标识会话的数据附加到每个URL的后面,服务器能够把该会话标识和它所保存的会话数据关联起来。 隐藏表单域 :通过表单的隐藏域维持会话 HttpSession API :Servlet提供的一种与众不同的方案 。,2019/6/17,Java Web开发技术,45,HttpSession API,HttpSession API是一个基于Cookie或者URL重写机制的高级会话状态跟踪接口。如果浏览器支持Cookie,则使用Cookie;如果浏览器不支持Cookie或者Cookie功能被关闭,则自动使用URL重写方法。Servlet开发者无需关心细节问题,也无需直接处理Cookie或附加到URL后面的信息 。,2019/6/17,Java Web开发技术,46,什么是会话(session),session对象是javax.servlet.http.HttpSession类的一个实例 ,session对象使同一用户在访问Web站点时多个页面间共享信息。一个客户访问服务器时,可能会在这个服务器的几个页面之间反复连接,反复刷新一个页面或不断向一个页面提交信息等。服务器完全可以通过session对象知道这是同一个客户。 从一个客户打开浏览器连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话。,2019/6/17,Java Web开发技术,47,session对象的主要方法,2019/6/17,Java Web开发技术,48,. session对象的ID标识,客户首次访问服务器上的JSP页面时,JSP引擎产生session对象,并分配给它一个String类型的ID,并将其发送到客户端存入Cookie中,这样session对象和客户端之间建立了一一对应关系,客户在该服务器不同网页间转换或从其他服务器回到该服务器时,不分配给客户新的session,直到客户关闭浏览器,分配给客户的session对象被取消。,2019/6/17,Java Web开发技术,49,Session与ID的一一对应关系,下面例中,客户在三个页面id1.jsp、id2.jsp和id3.jsp之间进行链接,只要不关闭浏览器,三个页面的session对象完全相同,这可以从三个页面中得到的session ID看到。代码如下,运行结果单击如图,id1.jsp关键代码: 您在id1页面的session对象的ID是: 单击超连接,可到id2页面 欢迎到id2页面来。,id2.jsp关键代码: 您在id2页面中的id号为: 单击超连接,可到id3页面 欢迎到id3页面来。,id3.jsp关键代码: 您在id3页面中的session对象的ID是: 点击超链接,连接到id1页面。 欢迎到id1页面来。,2019/6/17,Java Web开发技术,50,. session对象和URL重写,上面例子是在客户端支持Cookie基础上的。如果客户端不支持Cookie,服务器无法将session ID写到客户端。服务器无法识别同一个客户端。解决该问题的有效方法是URL重写技术。,改进后id1_1.jsp关键代码: 在id1页面中的id号为: 单击超连接,可到id2页面 “ 欢迎到id2_1页面来。 ,id2_1.jsp 和id3_1.jsp在相同位置做相应更改即可 。,2019/6/17,Java Web开发技术,51,. 在会话对象中保存数据,保存和获得session对象中的数据是JSP页面常做的工作,需要使用getAttribute()和setAttribute()方法。例子simplesession.jsp在session对象中保存数据numVisits,这样服务器可以告诉客户他访问该页面一共多少次,只要客户不关闭浏览器。刷新6次后运行结果如图3-20所示。,图3-20,例:example3_17.jsp , Login.jsp , Member.jsp,2019/6/17,Java Web开发技术,52,. session对象的生存时间,例example3_18.jsp是一个猜数字游戏,2019/6/17,Java Web开发技术,53,. session对象的新与旧,前面已经讲到,会话有生存期 ,一般来说,下列情况会使会话结束:由于网络故障套接字删除、关闭浏览器、服务器关闭重起、会话超时和主动撤销会话。 在第二章已经实现了计数器功能,显示客户是访问本网站的第多少位客户。但那时客户不断刷新页面时,计数器的数目在增加,这是不正确的。下面的例example3_19.jsp解决了这个问题,对第二章的例子进行改进 。,2019/6/17,Java Web开发技术,54,3.3.2 application对象,pplication对象负责提供应用程序在服务器中运行时的一些全局信息。服务器启动时就创建一个application对象,客户在该服务器的各个页面之间链接时,application对象都是同一个,直到服务器关闭。 表3-14 列出了application对象的主要方法,2019/6/17,Java Web开发技术,55,. application对象的常用方法,例:application.jsp ,setAttribute.jsp ,getAttribute.jsp ,example3_20.jsp,2019/6/17,Java Web开发技术,56,. 用application对象制作留言板,在下例中,客户在submit.jsp中输入姓名、留言标题和留言内容。这些信息提交给messagePane.jsp。该页面将客户信息存入向量,并将向量存放在application对象中。当查看留言板时,showMessage.jsp负责从application对象中取出向量,并遍历向量显示其中的所有留言。 代码详见:submit.jsp ,messagePane.jsp ,showMessage.jsp,2019/6/17,Java Web开发技术,57,3.3.3 pageContext对象,pageContext对象主要用来管理页面的属性,描述JSP文档的运行环境。它是页面中对象功能的最大集成者,提供对所有其他隐含对象及其属性的访问。 pageContext对象的方法详见表3-15 和表3-16 例scopeexample1.jsp 和scopeexample2.jsp,2019/6/17,Java Web开发技术,58,3.4 与Servlet 有关的隐含对象,与Servlet 有关的隐含对象有两个: page和config。 page对象表示Servlet本身; config对象则是存放Servlet的初始参数值。,2019/6/17,Java Web开发技术,59,3.4.1 page 对象,它是this的同义词,表示JSP页面本身,是Servlet类的一个实例,就是转换后的Servlet类,可以调用Servlet中的任何方法。它实现了javax.servlet.jsp.HttpJspPage接口。当前page对象用处不大。下面举一个简单例子PageInfo.jsp,运行结果如图3-29所示。,图3-29 PageInfo.jsp运行结果,2019/6/17,Java Web开发技术,60,3.4.2 config 对象,config对象是 javax.servlet.servletConfig 接口的实例,存储Servlet配置对象。其重要方法如下表所示。,2019/6/17,Java Web开发技术,61,3.5 与Error 有关的隐含对象,这类的隐含对象只有一个成员:exception 对象。 exception对象代表了JSP文件运行时所产生的异常对象,目的是在JSP内处理错误。此对象不能在一般JSP文件中直接使用,而只能在使用了的JSP文件中使用。 例:dividedexample.jsp,2019/6/17,Java Web开发技术,62,3.6 小 结,本章介绍了JSP页面中使用的主要隐含对象。它们是:request、response、out、session、application、pageContext、config、page、exception。正是由于这些隐含对象,你可以进入JSP页面的代码段,用不着深入了解太多的Servlet API细节。 从本质上讲,JSP的这些隐含对象其实都是由特定的Java类所产生的,在服务器运行时根据情况自动生成,所以如果你有较好的Java基础,可以参考相应的类说明。,2019/6/17,Java Web开发技术,63,习 题,1编写JSP页面,完成下图功能:,2019/6/17,Java Web开发技术,64,习题,2编写JSP页面,完成下图功能,提交请求后显示相应的选中项标签:,2019/6/17,Java Web开发技术,65,习题,3在aa.jsp中有行代码: 在bb.jsp中有行代码 : 为了使得在bb.jsp中的如上代码可以显示”jb-aptech”,可以使用()发送。 A)在aa.jsp中使用把请求提交到bb.jsp B)在aa.jsp中使用把页面重定向到bb.jsp C)在aa.jsp中使用把页面重定向到bb.jsp D)在aa.jsp中使用包含页面bb.jsp E)在aa.jsp中使用把页面重定向到bb.jsp,2019/6/17,Java Web开发技术,66,习题,4如果在JSP脚本中有如下代码: int I=10; /1 String str=”jb-aptech”; /2 Vector v=new Vector(); /3 v.add(“jb”); /4 v.add(“aptech”); /5 sessi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论