response参数也是servlet的service方法中的一个,该参数用来传达响应,关于response的执行原理在上一篇已经讲过了,所以这篇文章就不再赘述

api讲解

api的讲解结合http响应报文来说,首先回顾一下http响应报文:

1.响应行
2.响应头
3.响应空行
4.响应体
响应行

响应行包括:协议版本,状态码,状态描述

  这里我们需要掌握的就是设置状态码,状态码代表着服务器对客户端的响应状态,本次响应请求到底现在是什么情况。

setStutus(int sc):设置状态码
响应头
setHeader(String name,String value):设置响应头
响应体

  响应体就是服务器给浏览器的响应正文,可以是任何类型的数据:文字,图片,文件等,这些数据都是以流的形式进行传输

一般在使用过程中,如果响应的是文字,我们可以直接使用字符输出流

PrintWriter getWriter()

如果是图片,文件等二进制文件,则以字节输出流的形式:

ServletOutputStream getOutputStream()

ServletOutputStream其实就是一个OutputStream,在使用过程中完全当作OutputStream来使用

关于response编码问题

  在前面的http协议中讲到,响应头Content-type是建议浏览器使用哪种方式去解析服务器的响应,在实际情况中浏览器也确实是这么做的,要让客户端正确的解析,不出现乱码,需要设置响应的解析格式:

response.setContentType("text/html;charset=utf-8");

案例:下载图片

案例要求:

点击连接,然后下载图片

思路:
  这块主要是使用response响应字节流,首先需要从硬盘上拿到图片,在我的代码里我放到了项目的相对路径下,然后使用了ServletContext来获取图片路径,这里写一个绝对路径也是可以的,然后通过response拿到输出字节流,剩下的就是输入流与输出流之间的拷贝了。可以看到我的代码中设置了一个响应头content-disposition,这个头信息就是告诉浏览器解析方式为下载的方式,而不是直接打开,如果不设置,会看到浏览器直接打开了该文件,一堆乱码,这点很关键

下载图片的html:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>下载图片</title>
</head>
<body>
<a href="/JavaEE/DownloadServlet?filename=sun.jpg">下载图片</a>
</body>
</html>


servlet:

@WebServlet("/DownloadServlet")
public class DownloadServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request,response);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1.设置编码问题request.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=utf-8");String filename = request.getParameter("filename");//2.拿到相对目录下的图片文件ServletContext servletContext = getServletContext();String realPath = servletContext.getRealPath("/img/"+filename);//3.设置响应头,告诉浏览器以文件类型解析response.setHeader("content-disposition","attachment;filename="+filename);//4.拿到输入输出流FileInputStream inputStream = new FileInputStream(realPath);ServletOutputStream outputStream = response.getOutputStream();byte[] bytes = new byte[1024];int len = -1;while ((len = inputStream.read(bytes)) != -1) {outputStream.write(bytes,0,len);}}
}

response响应讲解相关推荐

  1. JavaWeb核心技术——Response响应

    目录 1,Response对象 1.1 Response设置响应数据功能介绍 1.2 Respones请求重定向 1.2.1 Response重定向(redirect):一种资源跳转方式. 1.2.2 ...

  2. response响应,常用方法,分发器重定向,错误提示

    response响应 响应的构成部分 1.状态行 protocol: http协议版本 status code: 状态码 1xx: 信息响应类,表示接收到请求并且继续处理 2xx: 处理成功响应类,表 ...

  3. 【Flask】response响应

    1.重定向 from flask import Flask,redirect,jsonify,make_response,render_template#static_url_path:相当于路由 a ...

  4. Response响应字符数据(解决乱码问题),字符数据(文件输出)

    Response响应字符数据(解决乱码问题),字符数据(文件输出) Request:使用request对象来获取请求数据 Response:使用response对象来设置响应数据 Reponse的继承 ...

  5. Response响应字符流和字节流数据

    文章目录 一.Response响应字符数据(这个流不需要关闭) 1.1 通过对象获取字符输出流 1.2 通过字符输出流输出数据 1.3 问题:输出中文乱码 1.3.1 setHeader 1.3.2 ...

  6. WEB阶段3:Response响应组成常见状态码ServletContexturl编码文件下载案例

    Response响应组成&常见状态码&ServletContext&url编码&文件下载案例 回顾 请求有哪三个的组成部分 请求行:提交方式 URI HTTP/1.1 ...

  7. 文件下载 response响应ContentType与a标签download属性

    参考资料 MediaType介绍 了解HTML/HTML5中的download属性 header中Content-Disposition的作用 目录 一. ContentType 二. a标签down ...

  8. Response响应的中文乱码问题

    乱码呈现 乱码解释 乱码解决 初步解决 改进版 精华版 在这里介绍了Request请求参数中文乱码问题,以及Response响应,下面我们介绍Response响应的中文乱码问题 乱码呈现 先来一个资源 ...

  9. response响应

    在service()中可以使用request来获取请求数据,还可以使用response向客户端响应,response有响应流.request和response是一次性的,即每次请求都要创建新的. re ...

最新文章

  1. golang应用部署
  2. 没有到主机的路由_网络基础知识:UDP协议之路由跟踪
  3. 你的 IDEA 酷不酷?
  4. 三、数据分析前,打下数据处理基础(下)
  5. mysql忘记密码找回密码_MySQL忘记密码找回 重置MySQL root用户密码
  6. 开启Windows文件共享必须开启的两个服务
  7. 90%的人都做错的用户画像,到底应该怎么做?
  8. android UI进阶之布局的优化
  9. 解决NLPIR汉语分词系统init failed问题
  10. Python数据分析-TMDb 5000 Movie Database电影数据分析
  11. 高斯课堂数电讲义笔记_《高数上》讲义笔记【高斯课堂】 (1).pdf
  12. 如何在word中找到标准偏差σ、α、β、δ等数学公式符号和物理公式符号
  13. 2021-08-23:启动idea项目时,控制台显示java程序包不存在,解决办法:Error:java xxxx 程序包不存在
  14. 关于Raster的理解
  15. receptive field
  16. 第十五周 内部排序一(2)验证交换排序
  17. 计算机网络体系结构i层,1.2 计算机体系结构
  18. 咸鱼Micropython— 标准库
  19. 【电气设计】理论知识学习(持续更新中...)
  20. hmmer建立hmmscan

热门文章

  1. 裸板 nand flash K9F2G08U0C --- 读取ID
  2. C++ Reference: Standard C++ Library reference: C Library: cstdio: printf
  3. 第五届世界互联网大会 乌镇新“网事” 世界新期待
  4. Java Web 网络商城案例演示一、(环境搭建)
  5. 标签分发协议(LDP)
  6. 运行出现:Trying to start MapKit location updates without prompting for location authorization.
  7. passwd修改用户密码
  8. [数据库] MariaDB安装及使用
  9. teambition、Tower、worktile 、trello 等任务管理工具哪个好?
  10. php 制作在线音乐网站,音乐网站程序,手把手教会你做音乐“网站”