response响应讲解
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响应讲解相关推荐
- JavaWeb核心技术——Response响应
目录 1,Response对象 1.1 Response设置响应数据功能介绍 1.2 Respones请求重定向 1.2.1 Response重定向(redirect):一种资源跳转方式. 1.2.2 ...
- response响应,常用方法,分发器重定向,错误提示
response响应 响应的构成部分 1.状态行 protocol: http协议版本 status code: 状态码 1xx: 信息响应类,表示接收到请求并且继续处理 2xx: 处理成功响应类,表 ...
- 【Flask】response响应
1.重定向 from flask import Flask,redirect,jsonify,make_response,render_template#static_url_path:相当于路由 a ...
- Response响应字符数据(解决乱码问题),字符数据(文件输出)
Response响应字符数据(解决乱码问题),字符数据(文件输出) Request:使用request对象来获取请求数据 Response:使用response对象来设置响应数据 Reponse的继承 ...
- Response响应字符流和字节流数据
文章目录 一.Response响应字符数据(这个流不需要关闭) 1.1 通过对象获取字符输出流 1.2 通过字符输出流输出数据 1.3 问题:输出中文乱码 1.3.1 setHeader 1.3.2 ...
- WEB阶段3:Response响应组成常见状态码ServletContexturl编码文件下载案例
Response响应组成&常见状态码&ServletContext&url编码&文件下载案例 回顾 请求有哪三个的组成部分 请求行:提交方式 URI HTTP/1.1 ...
- 文件下载 response响应ContentType与a标签download属性
参考资料 MediaType介绍 了解HTML/HTML5中的download属性 header中Content-Disposition的作用 目录 一. ContentType 二. a标签down ...
- Response响应的中文乱码问题
乱码呈现 乱码解释 乱码解决 初步解决 改进版 精华版 在这里介绍了Request请求参数中文乱码问题,以及Response响应,下面我们介绍Response响应的中文乱码问题 乱码呈现 先来一个资源 ...
- response响应
在service()中可以使用request来获取请求数据,还可以使用response向客户端响应,response有响应流.request和response是一次性的,即每次请求都要创建新的. re ...
最新文章
- golang应用部署
- 没有到主机的路由_网络基础知识:UDP协议之路由跟踪
- 你的 IDEA 酷不酷?
- 三、数据分析前,打下数据处理基础(下)
- mysql忘记密码找回密码_MySQL忘记密码找回 重置MySQL root用户密码
- 开启Windows文件共享必须开启的两个服务
- 90%的人都做错的用户画像,到底应该怎么做?
- android UI进阶之布局的优化
- 解决NLPIR汉语分词系统init failed问题
- Python数据分析-TMDb 5000 Movie Database电影数据分析
- 高斯课堂数电讲义笔记_《高数上》讲义笔记【高斯课堂】 (1).pdf
- 如何在word中找到标准偏差σ、α、β、δ等数学公式符号和物理公式符号
- 2021-08-23:启动idea项目时,控制台显示java程序包不存在,解决办法:Error:java xxxx 程序包不存在
- 关于Raster的理解
- receptive field
- 第十五周 内部排序一(2)验证交换排序
- 计算机网络体系结构i层,1.2 计算机体系结构
- 咸鱼Micropython— 标准库
- 【电气设计】理论知识学习(持续更新中...)
- hmmer建立hmmscan
热门文章
- 裸板 nand flash K9F2G08U0C --- 读取ID
- C++ Reference: Standard C++ Library reference: C Library: cstdio: printf
- 第五届世界互联网大会 乌镇新“网事” 世界新期待
- Java Web 网络商城案例演示一、(环境搭建)
- 标签分发协议(LDP)
- 运行出现:Trying to start MapKit location updates without prompting for location authorization.
- passwd修改用户密码
- [数据库] MariaDB安装及使用
- teambition、Tower、worktile 、trello 等任务管理工具哪个好?
- php 制作在线音乐网站,音乐网站程序,手把手教会你做音乐“网站”