HttpServletResponse的使用

上传人:宝路 文档编号:48160524 上传时间:2018-07-11 格式:PPT 页数:49 大小:896.24KB
返回 下载 相关 举报
HttpServletResponse的使用_第1页
第1页 / 共49页
HttpServletResponse的使用_第2页
第2页 / 共49页
HttpServletResponse的使用_第3页
第3页 / 共49页
HttpServletResponse的使用_第4页
第4页 / 共49页
HttpServletResponse的使用_第5页
第5页 / 共49页
点击查看更多>>
资源描述

《HttpServletResponse的使用》由会员分享,可在线阅读,更多相关《HttpServletResponse的使用(49页珍藏版)》请在金锄头文库上搜索。

1、张孝祥IT课堂深入体验Java Web开发内幕IT资讯交流网 WWW.IT315.ORG第5讲 HttpServletResponse的应用l准备实验环境 lHttpServletResponse简介 l产生响应状态 l构建响应消息头 l响应消息头的实用案例 l创建响应正文 l请求重定向与请求转发 IT资讯交流网 WWW.IT315.ORG准备实验环境 1.为支持Servlet 2.4和JSP 2.0 ,使用Tomcat 5.5.12作为运行环境。 2.在Tomcat 5.5.12的webapps目录中创建一个名为it315的子目录。 3.在it315目录中创建一个名为test.html的网页

2、文件,在该文件中写上“中文测试页面”这几个字符。4.在webappsit315目录中创建一个名为WEB-INF的子目录。 5.在保存Servlet源文件的目录中编写compile.bat编译工具 set PATH=C:jdk1.5.0_01bin;%path% set CLASSPATH=C:tomcat-5.5.12commonlibservlet- api.jar;%CLASSPATH% javac -d C:tomcat-5.5.12webappsit315WEB-INFclasses %1 pauseIT资讯交流网 WWW.IT315.ORGHttpServletResponse简介

3、lWEB服务器回送给WEB客户端的HTTP响应消息分为三个部分: 状态行 响应消息头 消息正文(也叫实体内容) lServlet API中定义的ServletResponse接口类用于创建响应消息。 lHttpServletResponse是专用于HTTP协议的ServletResponse子接口,它用于封装HTTP响应消息。 lHttpServletResponse定义了一系列用于描述各种HTTP状态码的常量。 l在service()方法内部调用HttpServletResponse对象的各种方法来创建响应消息。 IT资讯交流网 WWW.IT315.ORG产生响应状态行 lHTTP响应消息的

4、响应状态行包括HTTP版本、状态代码和一条相 关的提示信息:HTTP/1.1 200 OKlHttpServletResponse中定义了若干与状态码数值对应的常量 ,每个常量的名称以前缀SC(Status Code的简写)开头,然后 是状态码在HTTP 1.1规范中所表示的状态信息的英文单词的组合 ,每个单词之间用下划线连接,且所有字母都大写。状态码404 对应的常量为HttpServletResponse.SC_NOT_FOUND lsetStatus方法用于设置HTTP响应消息的状态码,并生成响应 状态行。lsendError方法用于发送表示错误信息的状态码(一般是404, 找不到客户机

5、所请求的资源)到客户端,并清除缓冲区中的内容 。IT资讯交流网 WWW.IT315.ORG构建响应消息头 laddHeader与setHeader方法 laddIntHeader与setIntHeader方法 laddDateHeader与setDateHeader方法 lsetContentLength方法lsetContentType方法 (*)lsetCharacterEncoding方法 (*)lsetLocale方法 zh_CN GB2312lcontainsHeader方法 IT资讯交流网 WWW.IT315.ORG响应消息头的实用案例 lServlet的中文输出问题 l让浏览器定

6、时刷新网页l禁止浏览器缓存当前文档内容 l使用标签模拟响应消息头 IT资讯交流网 WWW.IT315.ORGServlet的中文输出问题原理 l浏览器接收到的中文字符并不是中文符号本身,而是它的某种字 符集编码的数据。 l浏览器必须使用正确的字符集编码进行查看,才能将它所接收到 的数据显示为正确的中文字符。 l当Servlet程序仅仅需要输出纯文本格式的响应正文时,通常应调 用ServletResponse对象的getWriter方法返回一个PrintWriter对象, 然后使用这个PrintWriter对象将文本内容写入到客户端。 lJava程序中的字符文本在内存中是以unicode编码的形

7、式存在的 ,PrintWriter对象在输出字符文本时,需要先将它们转换成其他某种 字符集编码的字节数组后输出。lServletResponse对象的getWriter方法返回的PrintWriter对象默 认使用ISO8859-1字符集编码进行Unicode字符串到字节数组的转换 ,由于ISO8859-1字符集中根本就没有中文字符,Unicode编码的中 文字符将被转换成无效的字符编码后输出给客户端。 IT资讯交流网 WWW.IT315.ORGServlet的中文输出问题解决办法lServletResponse接口中定义了setCharacterEncoding、 setContentTyp

8、e和setLocale等方法来指定ServletResponse.getWriter 方法返回的PrintWriter对象所使用的字符集编码。l调用ServletResponse接口中定义的setContentType方法,在HTTP 响应消息的Content-Type头字段中指定响应正文的字符集编码。 动手体验:浏览器查看网页文档时怎样选择字符集编码 动手体验:Servlet的中文输出问题及解决之道 IT资讯交流网 WWW.IT315.ORGServlet的中文输出问题其他发现 脚下留心:注意传递给setContentType方法的参数值的大小写 多学两招 :修改某个Servlet将导致整个

9、WEB应用程序被重新加载 IT资讯交流网 WWW.IT315.ORG让浏览器定时刷新网页 lHTTP协议中定义了一个Refresh头字段,用于告诉浏 览器过多少秒后自动刷新页面。l在Refresh头字段的时间设置值后面还可以用分号( ;)分隔后,再指定一个URL地址,这将让浏览器在指 定的时间值后自动去访问该URL地址指向的资源。 动手体验:了解Refresh头字段的作用效果 IT资讯交流网 WWW.IT315.ORG禁止浏览器缓存当前文档内容lresponse.setDateHeader(“Expires“,0);lresponse.setHeader(“Cache-Control“,“no

10、-cache“); lresponse.setHeader(“Pragma“,“no-cache“); 动手体验:了解浏览器缓存和禁止缓存的效果 IT资讯交流网 WWW.IT315.ORG使用标签模拟响应消息头l问题:利用HTTP消息的响应头字段,可以让浏览器完成各种有用的功能,但是,这需 要通过编写WEB服务器端的程序来实现。如果不会服务器端编程的普通HTML页面制 作者也想借助HTTP消息的响应头字段来实现一些特殊功能,他们该怎么办呢? l解决方案:HTML语言中专门定义了标签的http-equiv属性来在HTML文档中模拟HTTP 响应消息头,当浏览器读取到HTML文档中具有http-e

11、quiv属性的标签时,它 会用与处理WEB服务器发送的响应消息头一样的方式来进行处理。 l举例: IT资讯交流网 WWW.IT315.ORG使用标签模拟响应消息头实践 动手体验:使用标签解决浏览器查看HTML文件时的中文乱码问题 多学两招 :网页文档应尽量采用UTF-8编码 IT资讯交流网 WWW.IT315.ORG创建响应正文 lgetOutputStream与getWriter方法 l与getWriter方法相关的一些小疑问 l输出缓冲区l实现动态文件内容的下载 l图像访问计数器 IT资讯交流网 WWW.IT315.ORGgetOutputStream与getWriter方法 lgetOu

12、tputStream方法用于返回Servlet引擎创建的字节输出流对象, Servlet程序可以按字节形式输出响应正文。lgetWriter方法用于返回Servlet引擎创建的字符输出流对象,Servlet程序 可以按字符形式输出响应正文。lgetOutputStream和getWriter这两个方法互相排斥,调用了其中的任何一 个方法后,就不能再调用另一方法。 lgetOutputStream方法返回的字节输出流对象的类型为 ServletOutputStream,它可以直接输出字节数组中的二进制数据。lgetWriter方法将Servlet引擎的数据缓冲区包装成PrintWriter类型的

13、字符输 出流对象后返回,PrintWriter对象可以直接输出字符文本内容。lServlet程序向ServletOutputStream或PrintWriter对象中写入的数据将被 Servlet引擎获取,Servlet引擎将这些数据当作响应消息的正文,然后再与响 应状态行和各响应头组合后输出到客户端。 lSerlvet的service方法结束后,Servlet引擎将检查getWriter或 getOutputStream方法返回的输出流对象是否已经调用过close方法,如果没 有,Servlet引擎将调用close方法关闭该输出流对象。 IT资讯交流网 WWW.IT315.ORG选择getO

14、utputStream 和getWriter方法的要点 lPrintWriter对象输出字符文本内容时,它内部还是将字符串转换 成了某种字符集编码的字节数组后再进行输出,使用PrintWriter对象 的好处就是不用编程人员自己来完成字符串到字节数组的转换。 l使用ServletOutputStream对象也能输出内容全为文本字符的网页 文档,但是,如果网页文档内容是在Servlet程序内部使用文本字符 串动态拼凑和创建出来的,则需要先将字符文本转换成字节数组后输 出。l如果一个网页文档内容全部为字符文本,但是这些内容可以直接 从一个字节输入流中读取出来,然后再原封不动地输出到客户端,那 么就

15、应该使用ServletOutputStream对象直接进行输出,而不要使用 PrintWriter对象进行输出。 IT资讯交流网 WWW.IT315.ORG与getWriter方法相关的一些小疑问 l在Serlvet程序中可以多次调用HttpServetResponse 对象的getWriter方法吗? l每次调用getWriter方法返回的PrintWriter对象的引 用变量指向的是同一个PrintWriter对象吗? lPrintWriter.println方法与PrintWriter.print方法有什 么区别呢? 动手体验:了解与getWriter方法相关的一些问题 IT资讯交流网

16、WWW.IT315.ORG输出缓冲区 lServlet程序输出的HTTP消息的响应正文首先被写入到Servlet引擎 提供的一个输出缓冲区中,直到输出缓冲区被填满或者Servlet程序已 经写入了所有的响应内容,缓冲区中的内容才会被Servlet引擎发送到 客户端。l使用输出缓冲区后,Servlet引擎就可以将响应状态行、各响应头 和响应正文严格按照HTTP消息的位置顺序进行调整后再输出到客户端 。 l如果在提交响应到客户端时,输出缓冲区中已经装入了所有的响应 内容,Servlet引擎将计算响应正文部分的大小并自动设置Content- Length头字段。 l如果在提交响应到客户端时,输出缓冲区中装入的内容只是全部响 应内容的一部分, Servlet引擎将使用HTTP 1.1的chunked编码方式( 通过设置Transfer-Encoding头字段来指定)传输响应内容。 IT资讯交流网 WWW.IT315.ORG输出缓冲区有关方法lsetBufferSize

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号