下载功能的实现
注意下载的时候尽量用OutputStream,因为它是处理字节序列的,可以处理任何类型的数据,而writer是处理字符序列的,只能处理字符。
1.设置响应头,告诉浏览器需要下载该响应的内容
response.setHeader("content-disposition", “attachment;filename="+filename);
2.创建一个输入流一般是文件类型的输入流即fileInputStream。
3.创建一个缓冲的区域,进行缓冲。
4.通过响应的getOutputStream获取输出流
5.将缓冲中的数据写入到输出流当中。
下载中文的文件时
在下载中文文件的时候,文件名往往会出现乱码的现象,这时候我们需要用java.net.RULEncoder.encode方法对文件名进行编码,这样客户端收到文件才不会显示乱码。
HttpServletResponse对象
该对象封装了向客户端发送数据、响应头、响应状态码的方法。
向客户端发送数据
getOutputStream()
getWriter()
向客户端发送响应头
void addDateHeader(string name, long value)
void addHeader(string name,string value)
void addIntHeader(string name,int value)
boolean containsHeader(string name),检验是否这个name在响应头中。
void setDateHeader(string name,long date)
void setHeader(String name,string value)
void setIntHeader(string name, int value)
向客户端发送响应状态码
void setStatus(int code_number)
getOutputStream
需要注意的是,getoutputStream输出流写入的是字节序列,所以在写入英文字符或者中文的时候,需要将其转为字节序列进行写入,而客户端在接收到该字节流的时候,要用相应的编码方式对字节流进行编码,否则会出现错误。但客户端如何知道我们的编码方式?这就需要在响应头中加入如下内容,告诉客户端用什么样的方式对响应数据进行编码。
response.setHeader(“content-type","text/html;charset=utf-8");
getWriter
需要注意的是,该方法获取的输出流可以直接写入字符或数字数据,但是对于中文还是需要将其转为字节数组。但是该方法在输出中文的时候,需要先指定输出到客户端的编码方式。如果希望服务器写入什么客户端就输出什么就需要将数据转为字符串的形式(对于数字)。response.setCharacterEncoding("UTF-8");