HttpServletResponse 类
一、常用方法:
设置相应行
1、状态码:setStatus(int sc);
设置相应头
1、追加头信息:addHeader(String name,String value);
2、重置,设置头信息:setHeader(String name,String value);
3、对应特殊类型的头信息用 :addIntHeader和setIntHeader(数字),addDateHeader和setDateHeader(日期)
设置响应体:
1、字节流:通过 response.getOutputStream() 获取字节输入流。
输入文字:
1 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 2 // 方法一 3 // 1、获取字节输出流对象 4 ServletOutputStream out = response.getOutputStream(); 5 // 2、解决乱码 6 response.setHeader("Content-Type", "text/html;charset=UTF-8"); 7 // 3、输出,并设置解析编码表 8 out.write("不错呦".getBytes("UTF-8")); 9 10 // 方法二 11 response.setContentType("text/html;charset=UTF-8"); 12 out.write("不错呦2".getBytes("UTF-8")); 13 }
输出文件:
1 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 2 // 获取文件的绝对路径 3 String realPath = getServletContext().getRealPath("/download/测试.png"); 4 // 明确数据源 5 FileInputStream fis = new FileInputStream(realPath); 6 // 明确目的地 7 ServletOutputStream out = response.getOutputStream(); 8 // 开始复制 9 byte[] bytes = new byte[1024]; 10 int len = 0; 11 while ((len = fis.read(bytes) )!= -1) { 12 out.write(bytes, 0, len); 13 } 14 // 释放资源 15 fis.close(); 16 }
2、字符流:通过 response.getWriter().print("aaa"); 往前台输出信息
输入文本:
1 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 2 // 方法一 3 // 1、设置字符缓冲区的编码表 4 response.setCharacterEncoding("utf-8"); 5 // 2、设置响应有的编码表 6 response.setHeader("Content-Type", "text/html;charset=UTF-8"); 7 // 3、输出 8 response.getWriter().println("不错呦"); 9 10 // 方法二 11 response.setContentType("text/html;charset=UTF-8"); 12 response.getWriter().println("不错呦"); 13 }
文件下载:
前台html页面:
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Insert title here</title> 6 </head> 7 <body> 8 <!-- 设置请求的Servlet并设置参数,指明文件名 --> 9 <a href="/WEB04/Test01?filename=测试.png">测试.png</a> 10 <a href="/WEB04/Test01?filename=a.zip">a.zip</a> 11 <a href="/WEB04/Test01?filename=a.txt">a.txt</a> 12 <a href="/WEB04/Test01?filename=a.wmv">a.wmv</a> 13 </body> 14 </html>
servlet代码:
1 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 2 // 获取文件名 3 String filename = request.getParameter("filename"); 4 // 获取文件的绝对路径 5 String path = getServletContext().getRealPath("/download/" + filename); 6 // 明确数据源 7 FileInputStream fis = new FileInputStream(path); 8 // 明确目的地 9 ServletOutputStream out = response.getOutputStream(); 10 11 // 获取请求头信息,用户判断什么浏览器,并设置相应解决中文乱码的问题 12 String header = request.getHeader("User-Agent"); 13 String filenameEncoder = ""; 14 if (header.contains("MSIE")) { 15 // IE浏览器 16 filenameEncoder = URLEncoder.encode(filename, "utf-8"); 17 filenameEncoder = filenameEncoder.replace("+", " "); 18 } else if (header.contains("Firefox")) { 19 // 火狐浏览器 20 BASE64Encoder base64Encoder = new BASE64Encoder(); 21 filenameEncoder = "=?utf-8?B?" + base64Encoder.encode(filename.getBytes("utf-8")) + "?="; 22 } else { 23 // 其它浏览器 24 filenameEncoder = URLEncoder.encode(filename, "utf-8"); 25 } 26 // 设置文件以附件形式打开,并设置下载的文件名 27 response.setHeader("Content-Disposition", "attachment;filename=" + filenameEncoder); 28 29 // 开始复制 30 byte[] bytes = new byte[1024]; 31 int len = 0; 32 while ((len = fis.read(bytes)) != -1) { 33 out.write(bytes, 0, len); 34 } 35 fis.close(); 36 }