版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、动态网页设计第4章 JSP内置对象7/20/20221第1页,共80页。第4章 JSP内置对象为简化Web页面的开发过程,JSP提供了一些由服务器实现和管理的内置对象,这些内置对象在JSP页面中不用声明就可以使用。内置对象是服务器JSP引擎自动创建的Java类实例通过存取这些内置对象实现与JSP页面和Servlet环境的相互访问。内置对象可以实现很多功能,如从客户端获得数据、向客户端发回数据、控制传输数据的有效域和异常处理等。4.1 JSP内置对象概述7/20/20222第2页,共80页。内置对象功能举例说明使用直接存取out对象来打印一些东西到客户端: 借助请求对象来取得客户端输入的参数值:
2、 完成页面的重定向: 在错误页面中显示出错信息: 重新使用;改寄;改变投递方向7/20/20223第3页,共80页。JSP中的9种内置对象与输入/输出有关 与属性作用域有关 与Servlet 相关 与错误处理有关 7/20/20224第4页,共80页。4.2 与输入/输出有关的内置对象 4.2.1 request对象 4.2.2 response对象 4.2.3 out对象7/20/20225第5页,共80页。4.2.1 request对象1请求行 规定了请求的方法(如get、post、head、delete、put等),请求的资源和使用的HTTP协议版本号。2请求头 请求头主要说明请求客户的
3、主机IP、cookie 、信息体和附加信息。一个HTTP请求可以包括多个请求头。3信息体 指请求的正文。如表单数据被封装为信息体7/20/20226第6页,共80页。4.2.1 request对象(续)在JSP页面中,使用内置对象request可以查看HTTP请求报文中的这些信息。它是实现 javax.servlet.HttpServletRequest 接口的类的一个实例。 request 对象的方法有很多 ,从功能角度可以将这些方法分为4类: 取得请求参数的方法取得请求HTTP 头的方法储存和取得属性方法其他的方法7/20/20227第7页,共80页。1取得请求参数的方法 7/20/202
4、28第8页,共80页。2.取得请求HTTP 头的方法 7/20/20229第9页,共80页。3储存和取得属性方法 7/20/202210第10页,共80页。4其他的方法 7/20/202211第11页,共80页。4其他的方法(续) 7/20/202212第12页,共80页。request比较重要的方法 getParameter() getParameterNames() getParameterValues() getHeader() 记住噢7/20/202213第13页,共80页。. 获得客户端提交的信息String getParameter(String name) 该方法用于获取客户端浏
5、览器传递(如:表单、param动作指令)给服务器端由name指定的参数值。当传递给此方法的参数名name没有实际参数与之对应时,则返回null。7/20/202214第14页,共80页。获得客户端提交的信息(续) 文本框提交的用户名为: 客户端提交的按钮的名字为: exa3_1.jsp1.运行2.调用3.执行结果举例:tree.jsp 7/20/202215第15页,共80页。. 处理中文信息在例exa3_1.jsp中输入中文时将不能正确显示, 如图所示:这就引发如何处理客户端提交的中文问题。7/20/202216第16页,共80页。JSP页面的汉字问题主要指两方面:JSP页面中的汉字问题表单
6、提交的汉字问题7/20/202217第17页,共80页。(1)JSP页面的汉字问题对于JSP页面的汉字问题,需要在JSP中使用page指令告诉客户端汉字的编码方式:在没有特别指示下,浏览器无法正确显示汉字,每个要显示汉字的JSP页面都应该包含该语句。 7/20/202218第18页,共80页。(2)表单提交的汉字问题原因:客户端和服务器交互过程中,在客户端和服务器用的是GB2312对汉字编码,而HTTP传输用ISO_8859_1编码解决思想:不仅服务器端必须用指令指示客户端汉字的显示编码,同时在服务器端接收到客户端数据时需要将编码转换为GB2312后进行处理7/20/202219第19页,共8
7、0页。(2)表单提交的汉字问题(续)具体做法: 或 或 7/20/202220第20页,共80页。. 类型转换问题String getParameter(String name) 注意:request.getParameter方法获取客户端浏览器传递给服务器端由name指定的参数值类型是字串型。有时输入的信息是数字,并需要用于数字计算时,要进行类型格式转换7/20/202221第21页,共80页。请输入一个数字,计算其平方根: 7/20/202222第22页,共80页。=0) r=Math.sqrt(number) ; out.print(+String.valueOf(number)+的平方
8、根:); out.print(+String.valueOf(r); else out.print(+请输入一个正数); catch(NumberFormatException e) out.print(+请输入数字字符); %Float.parseFloatInteger.parseInt7/20/202223第23页,共80页。. 避免空指针异常例如: String textContent=request.getParameter(“tnumber”) 如果在JSP引擎运行这个JSP页面时,客户端还没有提交数据,textContent也还没有创建,此时textContent对象为nulln
9、umber=Double.parseDouble(textContent)语句需要使用textContent,Java解释器会提示出现空指针异常NullPointerException为了避免使用空对象,在JSP页面中使用了如下代码: if ( textContent=null ) textContent=100; 7/20/202224第24页,共80页。. 其它常用方法getServletPath() getContentLength() getMethod() getHeader( )getProtocol() 7/20/202225第25页,共80页。 Request对象获得服务器端参
10、数 request.getMethod(): request.getProtocol(): request.getServletPath(): request.getServerName(): request.getServerPort(): request.getRemoteUser(): request.getRemoteAddr(): request.getRemoteHost(): 正在使用的浏览器: 7/20/202226第26页,共80页。. 获取HTML表单中的各种数据表单 用户登录 用户名:密码:获取方法:String textname=request.getParameter
11、(“User);String textpwd=request.getParameter(“pwd);(1)提取文本框和密码框中数据7/20/202227第27页,共80页。p诗人李清照是中国历史上哪个朝代的人?宋朝唐朝明朝清朝史记的作者是谁?曹雪芹罗贯中李白司马迁您的了分(2)提取单选按钮选择的信息7/20/202228第28页,共80页。select.jsp关键代码:选择计算和的方式 计算1到n的和 计算1到n的平方和 计算1到n的立方和请选择n的值 n=10 n=20 n=30 n=40 n=50 n=100(3)提取列表框中选择的信息sum.jsp关键代码:% int sum=0; St
12、ring s1=request.getParameter(“select1); String s2=request.getParameter(“select2); int n=Integer.parseInt(s2); if(s1.equals(1) for(int i=1;i=n;i+) sum+=i; else if(s1.equals(2) for(int i=1;i=n;i+) sum+=i*i; else for(int i=1;i您的求和结果是7/20/202229第29页,共80页。(4)提取复选按钮组中选择的信息7/20/202230第30页,共80页。(4)提取复选按钮组中选
13、择的信息(续)checkbox 选择你喜欢的运动: 足球 蓝球 乒乓球 游泳 跑步 网球 7/20/202231第31页,共80页。% request.setCharacterEncoding (gb2312);String itemName =request.getParameterValues(mylike); if (itemName=null) out.println(一个都不喜欢); else out.println(itemName.length=+itemName.length+); for(int k=0;k7/20/202232第32页,共80页。4.2.2 response
14、对象当客户访问一个服务器的页面时,会提交一个HTTP请求,服务器接到请求时会返回HTTP响应。HTTP 的报文结构(响应报文) 版 本状态码短 语首部字段名首部行:值首部字段名值:实体主体(有些响应报文不用)状态行空格回车换行:CRLFCRLFCRLFCRLF7/20/202233第33页,共80页。 response对象代表的是对客户端的响应,其功能是将服务器处理后的结果传回到客户端,响应客户请求。response响应是实现javax.servlet.HttpServletResponse接口的类的一个实例。7/20/202234第34页,共80页。response对象的方法:设定响应状态码
15、的方法设定表头的方法用来URL 重写的方法其它方法7/20/202235第35页,共80页。设定表头的方法 7/20/202236第36页,共80页。设定响应状态码的方法 7/20/202237第37页,共80页。用来URL重写的方法 7/20/202238第38页,共80页。其 它 方 法 7/20/202239第39页,共80页。response重要方法response对象中使用较多的方法是:setContentType()setHeader()sendRedirect()setStatus() 7/20/202240第40页,共80页。. 动态设置MIME类型在page指令中的conte
16、ntType属性用来指定response对象响应客户端请求的MIME(Multipurpose Internet Mail Extension protocol,多用途网际邮件扩充协议)类型。 page指令只能为contentType指定一个值,如果想动态地改变这个属性的值来以各种不同的方式做出响应,就要使用response对象的setContentType()方法改变contentType的值。一旦这个属性值被改变,服务器就将按照新的MIME类型做出响应 。7/20/202241第41页,共80页。contentType属性和MIME类型的对应关系 7/20/202242第42页,共80页。
17、 学习response对象的setContentType方法的使用 要将当前页面保存为.TXT文件吗? 程序运行后,单击“是”按钮弹出“保存”对话框7/20/202243第43页,共80页。. response对象的http头response对象可以使用addHeader()和setHeader()方法动态添加和修改相应头的值,并将这些头发送给客户端。下面例response对象添加一个头refresh,使客户端在显示该页面时,每5秒钟刷新一次。现在的时间是:7/20/202244第44页,共80页。. response重定向下面例中,客户填写表单,并提交给tree4.jsp页面。如果表单填写不
18、完整,tree4.jsp会重新定向到填写页面,否则显示欢迎字样填写姓名7/20/202245第45页,共80页。. response重定向(续)7/20/202246第46页,共80页。. response的状态行当服务器响应客户端请求时,它发送的首行被称为状态行。状态行包括3位数字的状态码和对状态码的简单描述。1xx主要是试验性质的;2xx表示请求成功;3xx表示在请求在满足之前应进一步采取的行动;4xx表示服务器无法满足要求;5xx服务器出现错误。7/20/202247第47页,共80页。状态代码表7/20/202248第48页,共80页。状态代码表7/20/202249第49页,共80页
19、。 点击下面的超链接: 第一个页面不欢迎你 第二个页面欢迎你 第三个页面不欢迎你 bird1.jsp bird2.jsp bird3.jsp7/20/202250第50页,共80页。4.2.3 out对象out对象是一个输出流,表示向客户端发送数据,通过out对象发送的内容将是浏览器需要显示的内容,是文本一级的。通过out对象直接向客户端写一个由程序动态生成HTML文件。out对象是javax.servlet.jsp.JspWriter类的一个实例。7/20/202251第51页,共80页。out对象重要方法 JSP允许通过page指令的buffer属性调整out对象缓存的大小,甚至允许关闭缓
20、存。7/20/202252第52页,共80页。 % out.println(); out.println(); out.println(); out.println(+姓名+); out.println(+性别+); out.println(+年龄+); out.println(); out.println(); out.println(+张三丰+); out.println(+男+); out.println(+50+); out.println(); out.println(+刘东东+); out.println(+男+); out.println(+35+); out.println()
21、; out.println(); out.println(); % 例:用out对象输出表格,运行结果如图所示 7/20/202253第53页,共80页。关键代码:BufferSize : Available : Used : 例:显示目前缓冲区的大小 。运行结果如图所示 7/20/202254第54页,共80页。4.3与属性作用域有关的对象3.3.1 session对象3.3.2 application对象3.3.3 pageContext对象7/20/202255第55页,共80页。4.3.1 session对象从一个客户打开浏览器连接到服务器开始,到客户关闭浏览器离开这个服务器结束(期间
22、客户访问的是同一个WEB目录中的页面),被称为一个会话。一个客户访问服务器时,可能会在这个服务器的几个页面之间反复连接,反复刷新一个页面或不断向一个页面提交信息等。如在线商店购物时 ,当我们把不同页面的商品分别加入购物车时,服务器如何才能知道车里原先有些什么?当用户从选择商品的页面转到输入信用卡号和送达地址的页面,服务器如何才能记住用户买了些什么?HTTP是无状态(stateless)协议。7/20/202256第56页,共80页。解决方法:Session/Cookie :利用Session/Cookie对象来存储有关会话的信息,后继的各个连接可以查看当前Session/Cookie,提取有关
23、该会话的完整信息。 重写URL :如果客户端不支持Cookie,服务器无法将session ID写到客户端。服务器无法识别同一个客户端。解决该问题的有效方法是URL重写技术。 即:把一些标识会话的数据附加到每个URL的后面,服务器能够把该会话标识和它所保存的会话数据关联起来。 隐藏表单域 :通过表单的隐藏域维持会话HttpSession API : 是一个基于Cookie或者URL重写机制的高级会话状态跟踪接口。如果浏览器支持Cookie,则使用Cookie;如果浏览器不支持Cookie或者Cookie功能被关闭,则自动使用URL重写方法。7/20/202257第57页,共80页。在服务器端,
24、系统JSP引擎为该客户创建了一个session对象,在客户端,系统为该客户创建了Cookie对象。session对象是javax.servlet.http.HttpSession类的一个实例 ,session对象使同一用户在访问Web站点时多个页面间共享信息。服务器完全可以通过session对象知道这是同一个客户。同一个客户访问服务器中不同Web目录时,JSP引擎为该客户创建不同的session对象7/20/202258第58页,共80页。当JSP引擎为客户创建一个session对象后,这个session对象被分配了一个String类型的ID号,JSP引擎同时将此ID号发送到客户端,存放在Co
25、okie中。同一客户会话的session对象和Cookie对象建立了一一对应关系。即,每一客户会话信息保存在session/Cookie对中。当用户再次访问连接该服务器的其他页面时,就不再分配给用户新的session对象直到关闭浏览器后,服务器端该用户的session对象才取消,并且和用户的对应关系也取消 session对象与Cookie对象7/20/202259第59页,共80页。session对象与Cookie对象(续)存储位置不同Session对象保存在服务器内存中Cookie对象保存在客户端计算机硬盘中生存期不同Session对象客户关闭浏览器或会话失效时消失Cookie对象一直保存在
26、客户端计算机硬盘中,或用setMaxAge()设置7/20/202260第60页,共80页。session对象与Cookie对象(续)安全性Session对象安全性高Cookie对象安全性差实现方式Session对象记录会话的持续过程,直至会话终止Cookie对象在后继的请求中由客户端发送给服务器,以确定用户的身份7/20/202261第61页,共80页。session对象的主要方法 7/20/202262第62页,共80页。. session对象的ID标识 您在访问id.jsp页面 您的session对象的ID是: FORM action= method=post name=form 7/2
27、0/202263第63页,共80页。 你在访问liu页面 您的session对象的ID是: 单击超连接,连接到wang页面 A HREF= 欢迎到wang页面来!7/20/202264第64页,共80页。 你在访问file页面 您的session对象的ID是: 单击超连接,返回到ID页面 欢迎到ID页面来! 7/20/202265第65页,共80页。. 在会话对象中保存数据保存和获得session对象中的数据是JSP页面常做的工作,需要使用getAttribute()和setAttribute()方法。书上例子4-7在session对象中保存数据num,这样服务器可以告诉客户他访问该页面一共多
28、少次,只要客户不关闭浏览器。刷新13次后运行结果如图所示。 这是第 次访问该页面7/20/202266第66页,共80页。例:main.jsp输入您的姓名: 欢迎访问站点,请到购书页面选择书籍 进入购书页面 7/20/202267第67页,共80页。7/20/202268第68页,共80页。7/20/202269第69页,共80页。4.3.2 application对象application对象负责提供应用程序在服务器中运行时的一些全局信息。服务器启动时就创建一个application对象,不同客户在该服务器的各个页面之间链接时,共享使用同一个application对象,直到服务器关闭该对象才
29、消失。 7/20/202270第70页,共80页。例. 用application对象制作留言板客户在submit.jsp中输入姓名、留言标题和留言内容。这些信息提交给messagePane.jsp。该页面将客户信息存入向量,并将向量存放在application对象中。当查看留言板时,showMessage.jsp负责从application对象中取出向量,并遍历向量显示其中的所有留言。7/20/202271第71页,共80页。 输入您的名字: 输入您的留言标题: 输入您的留言: 例子:submit.jsp7/20/202272第72页,共80页。 例子: messagePane.jspserv
30、let中,application是当前pageContext所得到的servletContext的对象引用。 servletContext接口是Servlet中最大的一个接口,呈现了web应用的Servlet视图。ServletContext实例是通过 getServletContext()方法获得的 7/20/202273第73页,共80页。 % 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) messages=无信息; String s=Name:+name+#+Title:+title+#+Content:+messages; sendMessage(s); out.print(您的信息已经提交!); % 返回 例子:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度服装设计委托创作合同
- 感恩课程课件教学课件
- 2024年度互联网金融与投资合同
- 2024年城市供水供电管网改造工程合同
- 2024年度电子商务平台服务外包合同
- 2024年度智能家居产品购销合同
- 2024年屋产交易合同:个人卖家与买家之间的协议
- 2024年度光伏发电项目建设与运营合同
- 大学民法课件教学课件
- 公司中秋节员工的慰问信(18篇)
- 高考数学小题狂练:每题都附有详细解析
- 浮动码头施工方案
- Poka-Yoke防错技术(完整版)
- 保安交接班记录表(2)
- 神明—EZflame火焰检测系统
- 个人简历求职简历课件.ppt
- 2018年江苏高考满分作文:在母语的屋檐下
- 新青岛版五四制2021-2022四年级科学上册实验指导
- 小学四年级音乐课程标准
- 双向细目表和单元测试卷及组卷说明
- 离子色谱法测定空气中二氧化硫
评论
0/150
提交评论