02.Response
Response介绍
HttpServletResponse对象,通过它的方法可以设置HTTP响应消息的内容
在Servlet API中,定义了一个HttpServletResponse接口,它继承自ServletResponse接口,专门用来封装HTTP响应消息。由于,因此,在HttpServletResponse接口中定义了向客户端发送响应状态码、响应消息头、响应消息体的方法。
通俗来说,Response对象通过设置响应码,响应头,响应体等这些东西,可以向客户端返回数据,如:文件,图片,文件等;
一个HTTP响应包括哪些东西
Response设置响应行
setStatus(int status); 200 302 304
sendError(int sc); 404 500
sendError方法有tomcat默认的错误提示页面,setStatus只是设置状态码,没有提示页面;
Response设置响应头
响应头是一组键值对,可以通过response对象的setHeader(String s,String s1)方法设置响应头。
resp.setHeader("Content-Type","text/html;charset=UTF-8");
response.setContentType("text/html;charset=UTF-8");
response.setHeader("Refresh", "5;url=/login/index.html");//5秒后跳转index页面
Response的重定向:
- 通过设置响应头完成
response.setStatus(302);
response.setHeader("Location","/javaweb/login");
- 通过sendRedirect方法
response.sendRedirect("/Location/login");
Response设置响应体
Response响应文字及乱码
getWriter()
response通过getWriter方法可以获得字符流,向response的缓冲区写数据。然后tomcat将response缓冲区中的字符返回给浏览器
resp.getWriter().println("第" + number + "访问该网站的人");
如果输出的字符是中文的话,前台页面展示会出现乱码,原因是response缓存区的编码是ios-8859-1,通过response的setCharacterEncoding()方法可以将response缓存区的编码设置为想要的编码格式
resp.setCharacterEncoding("utf-8");
结果发现仍然为乱码,那是因为很多浏览器默认的编码格式是GBK,除了可以手动的修改浏览器的编码格式之外,还可以指定浏览器解析页面所用的格式
response.setContentType("text/html;charset=UTF-8");
resp.setHeader("Content-Type","text/html;charset=UTF-8");
这两种方法都可以,setContentType()方法也包含setCharacterEncoding()方法的功能,所以只需设置response.setContentType(“text/html;charset=UTF-8”)即可
Response响应文件数据
response除了可以响应文字以外,还可以响应图片,音频,视频等二进制文件。因为这些不能用字符流进行处理,所以我们需要用字节流。
//获取字节输出流ServletOutputStream outputStream = response.getOutputStream();
该方法可以获得一个输往response缓冲区的字节输出流,可以往里输入文字和文件数据
Response字节流输出文字
字节流输出中文文字可以不必考虑字符编码,不会出现乱码
ServletOutputStream outputStream = response.getOutputStream();
byte[] bytes = "中国".getBytes();
outputStream.write(bytes);
outputStream.close();
Response字节流输出文件数据
输出文件数据需要一个输入流,如何获取文件的输入流在上一节已经讲了,用ServletContext或类加载器获取,然后将输入流中的数据拷贝到输出流,以图片输出为例:
1.web/img目录下有一张a.jpg图片
2.在servlet中编写代码
//获取输入流 在web目录下的采用ServletContext对象获取InputStream is = this.getServletContext().getResourceAsStream("img/a.jgp");//获取输出流ServletOutputStream os = resp.getOutputStream();//设置缓存的传输数组byte[] bytes = new byte[1024];//偏移量int len;//进行拷贝while ((len= is.read(bytes))!=-1){os.write(bytes,0,len);}is.close();os.close();
02.Response相关推荐
- [习题]如何触发 GridView 身体里面的「子控件」的事件 (ASP.NET案例精编 / 清华大学出版社 Ch.10/11两章的补充)...
[习题]如何触发 GridView 身体里面的「子控件」的事件?#1 (ASP.NET案例精编 / 清华大学出版社 Ch.10/11两章的补充) 這個範例是要補充書本「上集」(ASP.NET專題實務) ...
- 01.swagger
01.swagger 01.初步swagger 01.初步swagger API详细说明 注释汇总 作用范围 API 使用位置 对象属性 @ApiModelProperty 用在出入参数对象的字段上 ...
- PolarDB-X 1.0和RDS性能对比之吞吐量对比(三)
测试环境: PolarDB-X 标准版:16C64G(1台) RDS MySQL5.7: 16C64G(4台) ECS 压测机: 8C16G(1台) sysbench 0.5 通过前期的测试,Pola ...
- PolarDB-X 1.0和RDS性能对比之吞吐量对比(二)
测试环境: PolarDB-X 标准版:16C64G(1台) RDS MySQL5.7: 16C64G(4台) ECS 压测机: 8C16G(1台) sysbench 0.5 通过阿里云官方文档,找到 ...
- Jmeter响应断言以及JSON断言
jmeter中有个元件叫做断言(Assertion),用于检查测试中得到的响应数据是否符合预期,用以保证性能测试过程中的数据交互与预期一致. 那我们使用它的目的是为了什么? 因为返回的结果是成功的,但 ...
- sysbench-0.5基本使用
简介 sysbench是一个基于LuaJIT的多线程基准测试工具.它最常用于数据库基准测试,但也提供了CPU,文件io,内存等的基准测试 安装 卸载mariadb-libs yum remove ma ...
- 黑马程序员Javaweb学习笔记02【request和response】
该博客主要记录在学习黑马程序员Javaweb过程的一些笔记,方便复习以及加强记忆
- 【Linux就该这么学 20期培训笔记 02】新手必须掌握的 Linux 命令
本章知识点 强大好用的SHELL 执行查看帮助命令 常用系统工作命令 系统状态检测命令 工作目录切换命令 文本文件编辑命令 文件目录管理命令 打包压缩与搜索命令 Linux命令大全(手册) 强大好用的 ...
- Response.Redirect() 跳转中的ThreadAbortException
最近写一个login用的handler,发现了一个以往没太注意的问题: public void ProcessRequest(HttpContext context) ...
最新文章
- java byte 转 c_C 和 Java 之间的byte数据的转换问题
- 逆向知识第十讲,循环在汇编中的表现形式,以及代码还原
- java 防止sql xxs注入,Java-JSP网站 防SQL注入,防XSS等攻击有什么好的处理办法?...
- poj 2378 树型dp
- 由一个bug引发的SQLite缓存一致性探索
- Python fullstack系列【2】Python数据类型
- configure: error: You requested G729 audio codec but not found...die
- 模板字符串竟然还有这种用法
- Linux内核参考链接与书籍
- android 对称加密完毕,通过 Android keystore 和 fingerprint 结合实现数据加密和解密
- 帝国cms 首页php,帝国CMS新增加专题页面
- java毕业设计餐饮类网站Mybatis+系统+数据库+调试部署
- CentOS7安装lepus
- 陈臣java_小菜学设计模式——享元模式
- Java学习预科知识
- markdown 高级复杂表格技巧
- zabbix6.0安装成功路上的小插曲
- 我们年轻时,为什么要辛苦赚钱,这是我听过的最好回答!
- 步态识别 数据集 (一)
- BZOJ2648: SJY摆棋子2716: [Violet 3]天使玩偶