1.Response响应方法
设置响应行
setStatus()设置响应行状态码
设置响应头
setHeader()键值对形式
重定向
response.sendRedirect();需要状态码是302
设置响应体
getWriter()将字符串返回到浏览器
解决中文乱码问题
解决response缓冲区乱码和解决浏览器乱码
response.setContentType("text/html;charset=UTF-8");
响应头设置字节
ServletOutputStream类,将文件写入浏览器
2.文件下载案例
步骤分析:
1.通过request获取文件的名字
2.解决get请求乱码问题
3.获取到agent头,明确是什么浏览器
4.解决浏览器兼容
5.明确数据源
6.明确目的地
7.开始复制
8.释放资源
//获取用户要下载的文件名 String filename=request.getParameter("filename"); //解决get请求乱码问题 filename=new String(filename.getBytes("ISO8859-1"),"UTF-8"); //获取user-agent头,明确是什么浏览器 String agent=request.getHeader("User-Agent"); //解决浏览器兼容问题 String filenameEncoder=""; if (agent.contains("MSIE")) { // IE浏览器 filenameEncoder= URLEncoder.encode(filename, "utf-8"); filenameEncoder= filenameEncoder.replace("+", " "); } else if (agent.contains("Firefox")) { // 火狐浏览器 BASE64Encoder base64Encoder = new BASE64Encoder(); filenameEncoder= "=?utf-8?B?" + base64Encoder.encode(filename.getBytes("utf-8")) + "?="; } else { // 其它浏览器 filenameEncoder= URLEncoder.encode(filename, "utf-8"); } //告知浏览器文件的类型 response.setContentType(getServletContext().getMimeType(filename)); //告知浏览器以附件方式打开,不是解析 response.setHeader("Content-Disposition", "attachment;filename="+filenameEncoder);//设置文件名 //获取文件绝对路径 String path=getServletContext().getRealPath("download/"+filename); //获取文件源,明确数据源 FileInputStream fis=new FileInputStream(path); //明确目的地 ServletOutputStream out=response.getOutputStream(); //开始复制 int len=0; byte[] bytes=new byte[1024]; while((len=fis.read(bytes))!=-1) { out.write(bytes, 0, len); } //释放资源 fis.close(); }
知识点:
告知浏览器文件类型
response.setContentType(getServletContext.getMimeType())
getMimeType()返回指定文件名的MIME类型
设置Content-Disposition头,告知文件类型
response.setHeader("Content-Disposition", "attachment;filename="+filenameEncoder);//设置文件名