Response 对象的作用是存储发送给客户端的响应消息。
一、Response 是什么?
1. 工作流程
Java Servlet - 工作流程
2. Response 对象
当客户端向服务器端发送请求时,服务器为本次请求创建 Response 对象,并传递给 Servlet。
需要将响应信息存储至 Response 对象之中,并发送给客户端。
二、常用方法
1. 设置响应行
方法 |
说明 |
setStatus(int num) |
设置响应状态码 |
2. 设置响应头
方法 |
说明 |
setHeader(String name, String value) |
设置响应头 |
3. 设置响应体
(1) 设置步骤
(2) 编码方式
方法 1:
设置流的默认编码
1
| response.setCharacterEncoding("编码方式")
|
通知浏览器使用何种编码方式
1
| response.setHeader("content-type", "text/html;charset=编码方式")
|
方法 2:
使用 response 对象的 setContentType()
方法设置。
1
| response.setContentType("text/html;charset=编码方式")
|
三、重定向
Java 请求转发与重定向
四、示例 - 文件下载
1. 目录结构
2. index.html
1 2 3 4 5 6 7 8 9 10 11 12
| <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>123</h1> <a href="/img/2021072901.png">点击查看</a> <a href="/downloadServlet?filename=2021072901.png">点击下载</a> </body> </html>
|
3. DownloadServlet
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| @WebServlet("/downloadServlet") public class DownloadServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("Hello"); String filename = request.getParameter("filename"); ServletContext servletContext = this.getServletContext(); String realPath = servletContext.getRealPath("/img/" + filename); String mimeType = servletContext.getMimeType(filename); response.setHeader("content-type", mimeType); response.setHeader("content-disposition", "attachment;filename=" + filename); FileInputStream fileInputStream = new FileInputStream(realPath); ServletOutputStream servletOutputStream = response.getOutputStream(); byte[] bytes = new byte[1024 * 8]; int len = 0; while ((len = fileInputStream.read(bytes)) != -1) { servletOutputStream.write(bytes, 0, len); } fileInputStream.close(); }
@Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); } }
|
4. 中文文件问题
当下载文件的文件名为中文时,文件名将无法正常显示,解决方法如下:
- 获取客户端使用的浏览器信息
- 根据浏览器信息,将 filename 编码后再写入响应头中
参考