Response响应对象

Posted alphajuns

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Response响应对象相关的知识,希望对你有一定的参考价值。

1、HttpServletResponse

HttpServletResponse是一个定义在Servlet API中的接口,继承自ServletReponse接口,用于封装HTTP响应消息。HTTP相应分为响应行、响应头和响应体三部分。在HttpServletResponse中定义了向客户端发送相应状态码、响应头、响应体的方法。

2、发送状态码相关方法

常见的相应状态码:

200 OK,302 重定向,304 取本地缓存,404 找不到资源,500 服务器内部错误(内部java代码逻辑错误)

  1. setStatus(int status)方法:用于设置相应消息的状态码
  2. sendError(int sc):发送表示错误信息的状态码

3、发送响应头的相关方法

void addHeader(String name, String value):用于增加响应头

void setHeader(String name, String value):用于设置响应头

void addIntHeader(String name, int value):增加整数响应头

void setIntHeader(String name, int value):设置整数响应头

void setContentLength(int len):用于设置响应消息的实体大小,单位为字节

void setContentType(String type):用于设置输出文件的MIME类型

void setLocale(Locale loc):用于设置响应消息的本地化信息

void setCharacterEncoding(String charset):用于设置输出内容使用的字符集编码

4、发送响应体的相关方法

  1. getOutputStream():用于获取类型为ServletOutputStream类型的字节流输出对象
  2. getWriter():用于获取的字符输出流对象为PrintWriter类型

5、文件下载实例

文件下载要解决问题:文件名中文乱码问题,浏览器自动解析,读取服务器上文件,写到本地

 1 package com.alphajuns.content;
 2 
 3 import java.io.FileInputStream;
 4 import java.io.IOException;
 5 import java.io.InputStream;
 6 import java.net.URLEncoder;
 7 
 8 import javax.servlet.ServletException;
 9 import javax.servlet.ServletOutputStream;
10 import javax.servlet.http.HttpServlet;
11 import javax.servlet.http.HttpServletRequest;
12 import javax.servlet.http.HttpServletResponse;
13 
14 import sun.misc.BASE64Encoder;
15 
16 public class DownloadServlet2 extends HttpServlet {
17 
18     public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
19         /*
20          * 文件名是中文的下载乱码问题解决
21          */
22         // 获取要下载的文件的名称
23         String filename = request.getParameter("filename");
24         // 解决中文乱码问题
25         filename = new String(filename.getBytes("iso8859-1"), "UTF-8");
26         // 获得请求头中的User-Agent
27         String agent = request.getHeader("User-Agent");
28         // 根据不同的浏览器进行不同的解码
29         String filenameEncoder = "";
30         if (agent.contains("MSIE")) {
31             // IE浏览器
32             filenameEncoder = URLEncoder.encode(filename, "utf-8");
33             filenameEncoder = filenameEncoder.replace("+", " ");
34         } else if (agent.contains("Firefox")) {
35             // 火狐浏览器
36             BASE64Encoder base64Encoder = new BASE64Encoder();
37             filenameEncoder = "=?utf-8?B?"
38                     + base64Encoder.encode(filename.getBytes("utf-8")) + "?=";
39         } else {
40             // 其它浏览器
41             filenameEncoder = URLEncoder.encode(filename, "utf-8");                
42         }
43         // 告诉客户端不是直接解析,而是以附件形式下载
44         response.setHeader("Content-Disposition", "attachment;filename=" + filenameEncoder);
45         // 获取文件的绝对路径
46         String realPath = this.getServletContext().getRealPath("download/" + filename);
47         // 获取的该文件的字节输入流
48         InputStream in = new FileInputStream(realPath);
49         // 获得文件的字节输出流
50         ServletOutputStream out = response.getOutputStream();
51         int len = 0;
52         // 定义读写数据的字节数组缓冲区
53         byte[] buffer = new byte[1024];
54         // 读取数据到字节数组中
55         while ((len = in.read(buffer)) != -1) {
56             out.write(buffer, 0, len);
57         }
58         // 关闭资源
59         out.close();
60         in.close();
61     }
62 
63     public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
64         doGet(request, response);
65     }
66 }

 

以上是关于Response响应对象的主要内容,如果未能解决你的问题,请参考以下文章

“response”对象设置响应头属性方法是啥?

如何从片段中的 JSON 响应中的对象获取数据

response (响应对象)

重温Servlet学习笔记--response对象

flask基础之Response响应对象

Flask 学习-7. make_response() 自定义响应内容