Response:

  • 响应:服务器把请求的处理结果告知客户端。在B/S架构中,响应就是把结果带回浏览器。
  • 响应对象:在项目中用于发送响应的对象
常用状态码:
状态码 说明
200 执行成功
302 它和307一样,都是用于重定向的状态码。只是307目前已不再使用
304 请求资源未改变,使用缓存。
400 请求错误。最常见的就是请求参数有问题
404 请求资源未找到
405 请求方式不被支持
500 服务器运行内部错误

状态码首位含义:

状态码 说明
1xx 消息
2xx 成功
3xx 重定向
4xx 客户端错误
5xx 服务器错误
字节流响应消息&乱码:
返回值 方法名 说明
ServletOutputStream getOutputStream() 获取响应字节输出流对象
void setContentType(“text/html;charset=UTF-8”) 设置响应内容类型,解决中文乱码

演示:

@WebServlet("/ResponseDemo01")
public class ResponseDemo01 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// setContentType:相当于告诉浏览器你要使用这个编码才能解析我的内容resp.setContentType("text/html;charset=UTF-8");// getOutputStream() 获取响应字节输出流对象ServletOutputStream ops = resp.getOutputStream();// 定义消息String s = "测试会不会乱码";/**为什么有的时候没有处理乱码,但是浏览器不会乱码getBytes:在字符串转成字节的时候,如果没有传递参数(编码格式),它会根据系统的编码转换,这里的系统是电脑的,比如Windows的默认就是GBK那就会转换成GBK格式的,如果浏览器也是GBK就不会乱码,但是如果浏览器是其它的就会乱码*/ops.write(s.getBytes("UTF-8"));}
}
字符流响应消息:
返回值 方法名 说明
PrintWriter getWriter() 获取响应字符输出流对象
void setContentType(“text/html;charset=UTF-8”) 设置响应内容类型,解决中文乱码

演示:

@WebServlet("/ResponseDemo02")
public class ResponseDemo02 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.setContentType("text/html;charset=UTF-8");// getWriter()    获取响应字符输出流对象PrintWriter printWriter = resp.getWriter();String s = "我也呵呵了";printWriter.write(s);}
}
响应图片:

步骤:

  1. 创建字节输入流对象,关联读取的图片路径
  2. 通过响应对象获取字节输出流对象
  3. 循环读取和写出图片
@WebServlet("/ResponseDemo03")
public class ResponseDemo03 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 1. 创建字节输入流对象,关联读取的图片路径BufferedInputStream bis = new BufferedInputStream(new FileInputStream("/Users/itzhuzhu/Desktop/WechatIMG27.JPG"));// 2. 通过响应对象获取字节输出流对象ServletOutputStream os = resp.getOutputStream();// 3. 循环读取和写出图片byte[] bytes = new byte[1024];int len;while ((len = bis.read(bytes)) != -1) {os.write(bytes, 0, len);}}
}
设置缓存:

对于不经常变化的数据,可以合理设置缓存时间,避免浏览器频繁请求服务器,可以提高效率

返回值 方法名 说明
void setDateHeader(String name,long time) 设置消息头添加缓存

演示:

如果开启了缓存是可以在电脑中找到这个缓存文件的,可以看到上次访问时间和过期时间,到了过期时间才会访问服务器

@WebServlet("/ResponseDemo04")
public class ResponseDemo04 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String s = "我是测试缓存内容";// 设置换缓存1小时,只有第一次请求会请求服务端,后面的请求是走的缓存resp.setDateHeader("Expires", System.currentTimeMillis() + 1 * 60 * 60 * 1000);// 设置编码格式resp.setContentType("text/html;charset=UTF-8");// 写出数据resp.getWriter().write(s);System.out.println("再次访问会走我吗");}
}
定时刷新:

过了指定时间,页面自动跳转

返回值 方法名 说明
void setHeader(String name,String value) 设置消息头定时刷新

演示:

@WebServlet("/ResponseDemo05")
public class ResponseDemo05 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String s = "计算机被黑客窃取,正在读取数据,读取完毕自动跳转";resp.setContentType("text/html; charset=UTF-8");// 写数据resp.getWriter().write(s);// 定时刷新resp.setHeader("Refresh", "3;URL=/regist.html");}
}
请求重定向:

请求重定向:客户端的一次请求到达后,发现要借助其他Servlet实现功能

特点:

  • 浏览器地址会改变
  • 两次请求
  • 请求域对象中不能共享数据
  • 可以重定向到其他服务器

实现原理:

  • 设置响应状态码302
  • 设置响应的资源路径(响应消息头指定响应到哪里)

重定向和请求转发用哪一个?

  • 需要共享数据就转发,不需要就重定向

重定向方法:

返回值 方法名 说明
void sendRedirect(String name) 设置重定向

演示:

@WebServlet("/ResponseDemo06")
public class ResponseDemo06 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("ResponseDemo06执行了");// 设置共享数据req.setAttribute("username","itzhuzhu");// 设置重定向resp.sendRedirect(req.getContextPath()+"/servletDemo15");}
@WebServlet("/ResponseDemo07")
public class ResponseDemo07 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("ResponseDemo07执行了");// 获取共享数据,这里会丢失共享数据System.out.println(req.getAttribute("username"));}
文件下载:
@WebServlet("/ResponseDemo08")
public class ResponseDemo08 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 1. 获取文件路径String realPath = getServletContext().getRealPath("/img/首页.png");// 2. 把文件读到字节输入流中BufferedInputStream bis = new BufferedInputStream(new FileInputStream(realPath));// 3. 告知浏览器,以下载的方式打开(告知浏览器下载文件的MIME类型)/**Content-type:消息头名称,支持的类型application/octet-stream:消息头参数,应用的类型为字节流Content-Disposition:消息头名称,处理的形式attachment;filename=首页.jpg:消息头参数,以附件的形式,指定下载文件名称*/resp.setHeader("Content-type", "application/octet-stream");resp.setHeader("Content-Disposition", "attachment;filename=首页.jpg");// 4. 使用响应对象的字节输出流输出到浏览器上ServletOutputStream os = resp.getOutputStream();byte[] bytes = new byte[1024];int len;while ((len = bis.read(bytes)) != -1) {os.write(bytes, 0, len);}bis.close();}
}

Response方法详解:

Response响应方法详解相关推荐

  1. tgp饥荒 服务器无响应,饥荒TGP版常见运行问题有哪些_TGP版礼包领取及邀请添加好友方法详解_快吧单机游戏...

    <饥荒>TGP版常见运行问题有哪些呢,玩家们是不是很想知道呢?下面小编为玩家们带来了<饥荒>TGP版礼包领取及邀请添加好友方法详解,还不知道的玩家快来看看吧. 1.皮肤礼包如何 ...

  2. 王者外服服务器为响应,王者荣耀外服叫什么 外服版进入方法详解[多图]

    王者荣耀不仅在中国非常火爆,同时在国外也有一大批忠实玩家,不少国内的小伙伴都想在外服和外国人一起玩玩,却不知道外服该怎么进,今天安族小编就带大家来看看外服版进入方法详解. 王者荣耀国外版名字 王者荣耀 ...

  3. python接收邮件内容启动程序_Python实现发送与接收邮件的方法详解

    本文实例讲述了Python实现发送与接收邮件的方法.分享给大家供大家参考,具体如下: 一.发送邮件 这里实现给网易邮箱发送邮件功能: import smtplib import tkinter cla ...

  4. python语言的格式框架_django框架模板语言使用方法详解

    本文实例讲述了django框架模板语言使用方法.分享给大家供大家参考,具体如下: 模板功能 作用:生成html界面内容,模版致力于界面如何显示,而不是程序逻辑.模板不仅仅是一个html文件,还包括了页 ...

  5. RabbitMQ 相关概念和方法详解

    名词解释 ConnectionFactory: 与 RabbitMQ 服务器连接的管理器. Connection: 与 RabbitMQ 服务器的连接. Channel: 与 Exchange 的连接 ...

  6. vue 子级拿值_vue 父组件通过$refs获取子组件的值和方法详解

    前言 在vue项目中组件之间的通讯是很常见的问题,同时也是很重要的问题,我们大致可以将其分为三种情况: 父传子:在父组件中绑定值,在子组件中用props接收 子传父:在父组件中监听一个事件,在子组件中 ...

  7. java spring mvc 上传_Java Spring MVC 上传下载文件配置及controller方法详解

    下载: 1.在spring-mvc中配置(用于100M以下的文件下载) 下载文件代码 @RequestMapping("/file/{name.rp}") public Respo ...

  8. python输入数据爬取_python根据用户需求输入想爬取的内容及页数爬取图片方法详解...

    本次小编向大家介绍的是根据用户的需求输入想爬取的内容及页数. 主要步骤: 1.提示用户输入爬取的内容及页码. 2.根据用户输入,获取网址列表. 3.模拟浏览器向服务器发送请求,获取响应. 4.利用xp ...

  9. Servlet方法详解

    Servlet: Servlet是SUN公司提供的一套规范,名称就叫Servlet规范,它也是JavaEE规范之一.使用JavaEE的API.目前在Oracle官网中的最新版本是JavaEE8, Se ...

最新文章

  1. python中调用函数时必须有实参_Python之函数(一)定义函数以及传参
  2. Codeforces 337D Book of Evil:树的直径【结论】
  3. mysql 视图 查询速度慢_mysql 视图查询速度慢
  4. (计算机组成原理)第二章数据的表示和运算-第三节2:IEEE754标准
  5. 【转载】Apache如何设置访问一个目录需要密码
  6. Steger算法(Line_Gauss)-光条中心线提取(基于Hessian矩阵)
  7. Atitit httpclient 概述 rest接口 目录 1. Httpclient 利用http协议的client类库与技术方法 1 2. 功能用途 why 2 2.1. 上传下载文件 2
  8. 心灵终结不显示服务器,红色警戒2心灵终结3.0常见问题及解决方法
  9. Redis-事务(集成SpringBoot工程)
  10. 配电网可靠性评估(一)—最小路法和非序贯蒙特卡洛模拟法的matlab实现
  11. 2011年5月10日中兴通讯实习生招聘笔试小记
  12. 万洲金业:黄金ETF如何影响黄金价格?
  13. jQuery生成动态表格
  14. 信号偏移成为边界地区呼吸的痛
  15. ROS学习笔记3_发布者Publisher
  16. [转帖]SD卡FLASHUSB
  17. MOS管驱动电路,看这里就啥都懂了!
  18. sfml-tutorials 官方教程的嘟嘟翻译 windows篇
  19. WJMZBMR打osu! / Easy
  20. Ubuntu16使用自己的数据集训练YOLOV3-tiny教程、技巧及相关资料

热门文章

  1. sqlserver oracle对比,sqlserver和oracle常用函数对比
  2. java文件编译为class文件需要键入什么命令_cmd命令行 编译Java 文件
  3. 经典sql语句50题_SQL面试经典50题:带你从建表开始
  4. Ajax链接输出数据库
  5. 链接数据库增删改通用
  6. 乘基取整法是什么_数字逻辑电路-学习指南
  7. Python数模笔记-PuLP库(1)线性规划入门
  8. mysql的四层架构_分布式数据库服务器的四层架构
  9. 判别两棵树是否相等 设计算法_一文看懂生成对抗网络 - GANs?(附:10种典型算法+13种应用)...
  10. 选择嵌套_如何优雅地在JavaScript中访问嵌套对象