您的位置:首页 > 理论基础 > 计算机网络

(30)HttpServletRequest对象和应答HttpServletResponse对象以及动态文件的下载

2011-10-21 14:21 531 查看
11,10,21

课堂的主要内容:

1、服务器端servlet程序中service() 产生应答信息HttpServletResponse对象

客户端浏览器向web服务器发送请求HttpServletRequest对象

老师今天主要讲的是请求HttpServletRequest对象和应答HttpServletResponse对象。

获取请求信息:

(1) 请求行:是GET还是POST方式。Eg:GET/demo/test?usename=xxx HTTP/1.1

(2) 请求消息头:getHeader(“头字段的名称”);方法

(3) getParameter(“参数名”)参数

(4) 消息实体的内容 getInputStream(); -------这两个方法是互斥的,只能选择其一------getReader() ;

流对象.read(); 读取;

应答对象response对象:

(1) 状态行HTTP/1.1 200 ok

Response.setStatus(HttpServletResponse.SC_OK);//可以设置状态行的状态码

(2) 响应消息的消息头:response.setContentType(“text/html”);//设置响应消息头,设置应答内容的类型

Refresh:刷新

response.setHeader(“Refresh”,”2;URL=page.html”);//页面的刷新和跳转的操作

.//下面三个消息头是使浏览器不能进行页面缓存的操作:

response.setDateHeader("Expires",0);

response.setHeader("Cache-Control","no-cache");
response.setHeader("pragma","no-cache");

(3) 消息实体内容:通过输出流对象进行设置。

response.getOutputStream(); 字节输出流对象

response.getWriter();字符输出流对象

2、中文乱码:

分析:

浏览器:

Java程序:中文字符-----unicode

字符输出流对象out.println();赞着某种字符集编码的方式转换成字节数组。

浏览器:字节数组———转换成字符。

3、输出缓冲区:

(1)Servlet程序输出的HTTP消息的响应正文首先被写入到Servlet引擎提供的一个输出缓冲区中,直到输出缓冲区被填满或者Servlet程序已经写入了所有的响应内容,缓冲区中的内容才会被Servlet引擎发送到客户端。

(2)使用输出缓冲区后,Servlet引擎就可以将响应状态行、各响应头和响应正文严格按照HTTP消息的位置顺序进行调整后再输出到客户端。

(3)如果在提交响应到客户端时,输出缓冲区中已经装入了所有的响应内容,Servlet引擎将计算响应正文部分的大小并自动设置Content-Length头字段。

(4)如果在提交响应到客户端时,输出缓冲区中装入的内容只是全部响应内容的一部分, Servlet引擎将使用HTTP 1.1的chunked编码方式(通过设置Transfer-Encoding头字段来指定)传输响应内容。

4、什么是动态文件内容的下载:

(1)只要让超链接的URL地址指向一个exe或zip等类型的文件,用户单击这个超链接就可以将该资源文件下载到客户端。

(2)如果要下载的文件并不真正存在于WEB服务器的文件系统中,而是需要用一个Servlet程序临时在服务器内存中动态产生后再传送到客户端,那该如何实现呢?

5、 如何实现动态文件内容的下载

(1)需要通过HttpServletResponse.setContentType方法设置Content-Type头字段的值为浏览器无法使用某种方式或激活某个程序来处理的MIME类型,例如,“application/octet-stream”或“application/x-msdownload”等。

(2)需要通过HttpServletResponse.setHeader方法设置Content-Disposition头的值为“attachment; filename =文件名”。

(3)应该调用HttpServletResponse.getOutputStream方法返回的ServletOutputStream对象来向客户端写入附件文件内容,而不应使用HttpServletResponse.getWriter方法返回的PrintWriter对象。

6、实现文件下载的代码:

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("application/x-msdownload");
response.addHeader("Content-Disposition","attachment;filename=aa.txt");
ServletOutputStream sos=response.getOutputStream();
sos.write("hello".getBytes());//动态生成需要下载的内容
sos.close();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐