response 的应用

创建响应正文:
•getOutputStream与getWriter方法
•与getWriter方法相关的一些小疑问
•输出缓冲区
•实现动态文件内容的下载
•图像访问计数器
 
getOutputStream与getWriter方法:
getOutputStream 方法用于返回 Servlet 引擎创建的字节输出流对象, Servlet 程序可以按字节形式输出响应正文。
getWriter 方法用于返回 Servlet 引擎创建的字符输出流对象, Servlet 程序可 以按字符形式输出响应正文。
getOutputStream getWriter 这两个方法互相排斥,调用了其中的任何一个 方法后,就不能再调用另一方法。  
getOutputStream 方法返回的字节输出流对象的类型为 ServletOutputStream ,它可以直接输出字节数组中的二进制数据。
getWriter 方法将 Servlet 引擎的数据缓冲区包装成 PrintWriter 类型的字符输出 流对象后返回, PrintWriter 对象可以直接输出字符文本内容。
Servlet 程序向 ServletOutputStream PrintWriter 对象中写入的数据将被 Servlet 引擎获取, Servlet 引擎将这些数据当作响应消息的正文,然后再与 响应状态行和各响应头组合后输出到客户端。
Serlvet service 方法结束后, Servlet 引擎将检查 getWriter getOutputStream 方法返回的输出流对象是否已经调用过 close 方法,如果没 有, Servlet 引擎将调用 close 方法关闭该输出流对象。    
选择getOutputStream和getWriter方法的要点:
PrintWriter 对象输出字符文本内容时,它内部还是将字符串转 换成了某种字符集编码的字节数组后再进行输出,使用 PrintWriter 对象的好处就是不用编程人员自己来完成字符串到 字节数组的转换。
使用 ServletOutputStream 对象也能输出内容全为文本字符的网 页文档,但是,如果网页文档内容是在 Servlet 程序内部使用文 本字符串动态拼凑和创建出来的,则需要先将字符文本转换成 字节数组后输出。
如果一个网页文档内容全部为字符文本,但是这些内容可以直 接从一个字节输入流中读取出来,然后再原封不动地输出到客 户端,那么就应该使用 ServletOutputStream 对象直接进行输 出,而不要使用 PrintWriter 对象进行输出。     
 
输出缓冲区:
Servlet 程序输出的 HTTP 消息的响应正文首先被写入到 Servlet 引擎提供的一 个输出缓冲区中,直到输出缓冲区被填满或者 Servlet 程序已经写入了所有 的响应内容,缓冲区中的内容才会被 Servlet 引擎发送到客户端。
使用输出缓冲区后, Servlet 引擎就可以将响应状态行、各响应头和响应正 文严格按照 HTTP 消息的位置顺序进行调整后再输出到客户端。
如果在提交响应到客户端时,输出缓冲区中已经装入了所有的响应内容, Servlet 引擎将计算响应正文部分的大小并自动设置 Content-Length 头字段。
如果在提交响应到客户端时,输出缓冲区中装入的内容只是全部响应内容的 一部分,  Servlet 引擎将使用 HTTP 1.1 chunked 编码方式(通过设置 Transfer-Encoding 头字段来指定)传输响应内容。
输出缓冲区-有关方法:
setBufferSize 方法
getBufferSize 方法
flushBuffer 方法
reset 方法
isCommitted 方法
什么是动态文件内容的下载:
只要让超链接的 URL 地址指向一个 exe zip 等类型的文件,用 户单击这个超链接就可以将该资源文件下载到客户端。
如果要下载的文件并不真正存在于 WEB 服务器的文件系统中, 而是需要用一个 Servlet 程序临时在服务器内存中动态产生后再 传送到客户端,那该如何实现呢?
如何实现动态文件内容的下载:
需要通过 HttpServletResponse.setContentType 方法设置 Content-Type 头字段的值 为浏览器无法使用某种方式或激活某个程序来处理的 MIME 类型,例如, application/octet-stream application/x-msdownload 等。
需要通过 HttpServletResponse.setHeader 方法设置 Content-Disposition 头的值为 attachment;   filename   = 文件名
应该调用 HttpServletResponse.getOutputStream 方法返回的 ServletOutputStream 对象来向客户端写入附件文件内容,而不应使用 HttpServletResponse.getWriter 法返回的 PrintWriter 对象。
图像访问计数器-介绍:
网页每次被访问时,页面的访问次数都要发生改变,所以这个功能必须通过 服务器端的程序来实现。
一些 WEB 站点只能输出静态页面内容,没有开放运行服务器端程序的功能, 无法直接在这些只支持静态内容的 WEB 站点上编写服务器端程序来实现页面 访问次数的统计和显示功能。  
一些具有执行服务器端程序功能的 WEB 站点推出了免费的页面访问计数器, 只要在位于任何站点的一个静态 HTML 页面中增加一条该站点提供的 HTML 句,该语句就能显示出该静态页面的访问次数。
一个站点要想能统计另外一个站点上的某个 HTML 页面的访问次数,必须让任 何一个浏览器在每次访问那个 HTML 页面都通知这个一下站点,这可以通过在 静态 HTML 页面中增加两种特殊的标签来实现: 标签和设置 src 属性的

你可能感兴趣的:(response 的应用)