// 设置页面不缓存
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
//上传文件
<form action="upjsp.jsp" enctype="MULTIPART/FORM-DATA" method=post ACCEPT-CHARSET="utf-8">
在表单元素中 enctype 属性指定了传递给服务器的表单数据集编码的内容类型,它的默认值是“application/x-www-form-urlencoded”,用于通常的数据提交格式,enctype 属性有三个值: application/x-www-form-urlencoded,multipart/form-data, text/plain, 它们都属于MIME类型
上传二进制数据时需要multipart/form-data, 并必须把表单属性method设为post, ACCEPT-CHARSET属性是表单处理器能够处理的编码字符集,若没有指定该属性,表单默认是UNKNOWN
上传文件会在HTTP协议体中长传到服务器
打印request对象得到的流:
-----------------------------7d730ea40984
Content-Disposition: form-data; name="company"
zte
-----------------------------7d730ea40984
Content-Disposition: form-data; name="filename"; filename="D:/upload.text"
Content-Type: text/plain
jade test upload file. --注:上传文件的内容
-----------------------------7d730ea40984--
文件可以从这个流中分析出来
//下载文件:
需要通知浏览器传过来的是要下载的东东
response.reset();
response.setContentType("aplication/x-download");
response.setHeader("Content-Disposition", "attachment; filename=imp.ff");
然后吧要下载的文件学到respose流里
ServletOutputStream sos=response.getOutputStream();
while (i != -1) {
sos.print((char) i);
i = in.read();
}
访问的时候就会提示下载了
//服务端的输出缓冲区
缺省情况下:服务端要输出到客户端的内容,不直接写到客户端,而是先写到一个输出缓冲区中.只有在下面三中情况下,才会把该缓冲区的内容输出到客户端上:
1.该JSP网页已完成信息的输出
2.输出缓冲区已满
3.JSP中调用了out.flush()或response.flushbuffer()
输出缓冲区的大小可以用:或response.setBufferSize()设置,如下:
1、设置输出缓冲区的大小为1KB。或response.setBufferSize(1);
2、设置输出缓冲区的大小为0,即不缓冲。或response.setBufferSize(0);
用response.getBufferSize()或out.getBufferSize()可取的输出缓冲区的大小,单位为字节.
用response.isCommitted()可检查看服务端是否已将数据输出到客户端. 如果返回值是TRUE则已将数据输出到客户端,是FALSE则还没有。
注意客户点是要接受到整个respose流,才会开始解析或提示下载
所以服务器端调用respose.flushBuffer()或response.getOutputStream().flush()都只是不会立即在页面上显示或提示下载的,但这样能解决服务器的内存