HTTP - Response

  • 基本概念
    • 数据格式
  • Response对象
    • 功能
      • 设置响应消息
      • 1. 完成重定向
        • 重定向和转发的区别(forward 和 redirect):
        • 路径的写法
          • 1. 路径的分类
            • 1. 相对路径, 通过相对路径不可以确定唯一资源
            • 2. 绝对路径, 通过绝对路径可以确定唯一资源
            • 如何判断绝对路径是否要加虚拟目录
            • 动态获取虚拟目录
      • 2. 服务器输出字符数据到浏览器
      • 验证码实例

基本概念

响应消息: 服务器端发送给客户端的数据

数据格式

1. 响应行1. 组成: 协议/版本   响应状态码   状态码描述HTTP/1.1       200             OK2. 响应状态码: 服务器告诉客户端浏览器本次请求和响应的一个状态1. 状态码都是3位数字2. 分类1. 1xx: 服务器接收客户端学习, 但没有接收完成, 等待一段时间后, 发送1xx状态码2. 2xx: 成功 代表: 2003. 3xx: 重定向代表: 3024. 4xx代表: 404(请求路径没有对应的资源)405(请求方式没有对应的方法(doPost(), doGet()))5. 5xx代表: 500, 服务器内部异常
2. 响应头1. 格式头名称: 值2. 常见响应头1. Content-Type: 服务器告诉客户端本次相应提数据格式以及编码格式2. Content-disposition: 服务器告诉客户端以什么格式打开相应体数据值: in-line: 默认值, 在当前页面内打开attachment: 以附件形式打开响应体, 文件下载时使用
3. 响应空行一个空行, 分隔响应头和响应体
4. 响应体传输的数据
5. 响应字符串格式
HTTP/2 200 OK
server: JSP3/2.0.14
date: Tue, 23 Jun 2020 12:52:13 GMT
content-type: application/javascript
content-encoding: gzip
etag: "4e097-5a8b7ef21bb00"
last-modified: Tue, 23 Jun 2020 03:27:08 GMT
expires: Fri, 21 Jun 2030 04:44:30 GMT
age: 29263
accept-ranges: bytes
cache-control: max-age=315360000
vary: Accept-Encoding,User-Agent
ohc-cache-hit: jhcm76 [4]
ohc-response-time: 1 0 0 0 0 0
X-Firefox-Spdy: h2

Response对象

功能

设置响应消息

1. 设置响应行1. 格式: HTTP/1.1  200 OK2. 设置状态码: setStatus(int sc)
2. 设置响应头setHeader(String name, String value)
3. 设置响应体使用步骤1. 获取输出流字符输出流: PrintWriter getWriter()字节输出流: ServletOutputStream getOutputStream()2. 使用输出流, 将数据输出到客户端浏览器

案例

1. 完成重定向

重定向: 资源跳转的方式
1. 告诉浏览器重定向, 状态码302
2. 告诉浏览器B资源的路径, 响应头location: B资源的路径
public class ResponseDemo01 extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("demo01......");//访问/responseDemo01, 会自动调转到/responseDemo02//1. 设置状态码为302resp.setStatus(302);//2. 设置响应头locationresp.setHeader("location", "/response/responseDemo02");//简单的重定向方法resp.sendRedirect("/response/responseDemo02");//设置属性//request.setAttribute("name", "hello");//转发//request.getRequestDispatcher("/response/responseDemo02").forward(request, response);}
}

重定向和转发的区别(forward 和 redirect):

 重定向的特点: 1. 地址栏发生变化2. 重定向可以访问其他站点(服务器)的资源3. 重定向是两次请求, 不能使用request对象共享数据
转发的特点: 1. 转发地址栏路径不变2. 转发只能访问当前服务器下的资源3. 转发是一次请求, 可以使用request对象共享数据

路径的写法

1. 路径的分类
1. 相对路径, 通过相对路径不可以确定唯一资源
 如./index.html不以 / 开头, 以 . 开头规则: 找到访问当前资源和目标资源之间的相对位置关系./ : 当前资源所在的目录, 可以省略../ : 当前资源后退一级的目录
2. 绝对路径, 通过绝对路径可以确定唯一资源
 如http://localhost/response/responseDemo02/response/responseDemo02以 / 开头路径为绝对路径
如何判断绝对路径是否要加虚拟目录
 * 规则: 判断定义的路径是给谁用的(判断请求将来从哪发出)* 给客户端浏览器使用: 需要加虚拟目录(项目的访问路径)点击超链接资源重定向* 给服务器使用: 不需要加虚拟目录资源跳转
动态获取虚拟目录

String request.getContextPath();

2. 服务器输出字符数据到浏览器

  1. 步骤

    • 获取字符输出流
    • 输出数据
  2. 注意乱码问题
    • PrintWriter writer = resp.getWriter()获取的流的默认编码是ISO-8859-1
    • 设置该流的编码
    • 告诉浏览器响应体使用的编码

实例:

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//1. 获取流对象之前, 设置流的默认编码 ISO-8859-1 -> GBK
//        resp.setCharacterEncoding("GBK");//2. 告诉浏览器, 服务器发送的消息体数据的编码, 建议浏览器使用该编码解码//下面这行代码同时会设置输出流的编码形式为utf-8, 所以不需要再写第一行代码
//        resp.setHeader("content-type", "text/html;charsert=utf-8");//简单的形式, 设置编码resp.setContentType("text/html;charset=utf-8");//        1. 获取字符输出流PrintWriter writer = resp.getWriter();//2. 输出数据writer.write("<h1>hello response<h1>");writer.write("<h1>你好<h1>");//输出流不需要刷新, 会自动刷新}
  1. 服务器输出字节数据到浏览器

    • 步骤

      • 获取字符输出流
      • 输出数据
        实例:
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//设置编码resp.setContentType("text/html;charset=utf-8");//1. 获取字节输出流ServletOutputStream outputStream = resp.getOutputStream();//2. 输出数据outputStream.write("你好".getBytes("utf-8"));}

验证码实例

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {int width = 100;int height = 50;//1. 创建对象, 在内存中存图片(验证码图片对象)BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);//2. 美化图片//2.1 填充背景色Graphics graphics = image.getGraphics();//画笔对象graphics.setColor(Color.PINK);//设置颜色graphics.fillRect(0, 0, width, height);//填充矩形//2.2 画边框graphics.setColor(Color.BLUE);graphics.drawRect(0, 0, width-1, height-1);//画矩形边框//写验证码String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";str += str.toLowerCase();str += "0123456789";//生成随机角标Random random = new Random();for (int i = 1; i <=5 ; i++) {//获取字符int index = random.nextInt(str.length());char ch = str.charAt(index);graphics.setColor(Color.BLUE);graphics.drawString(ch+"", width/5*i, height/2);}//2.4 画干扰线graphics.setColor(Color.GREEN);for (int i = 0; i < 10; i++) {//随机生成坐标点int x1 = random.nextInt(width);int x2 = random.nextInt(width);int y1 = random.nextInt(height);int y2 = random.nextInt(height);//画线graphics.drawLine(x1,x2,y1,y2);}//3. 将图片输出展示ImageIO.write(image, "jpg", resp.getOutputStream());resp.setContentType("text/html;utf-8");PrintWriter writer = resp.getWriter();writer.write("nihao图片");}

HTTP - Response相关推荐

  1. restTemplate http请求报错:no suitable HttpMessageConverter found for response type and content type

    报错信息: org.springframework.web.client.UnknownContentTypeException: Could not extract response: no sui ...

  2. Struts2 Cannot create a session after the response has been committed 一个不起眼的错误

    严重: Servlet.service() for servlet default threw exception java.lang.IllegalStateException:  Cannot c ...

  3. Python:Resquest/Response

    Request Request 部分源码: # 部分代码 class Request(object_ref):def __init__(self, url, callback=None, method ...

  4. Django Response对象3.4

    HttpResponse对象 在django.http模块中定义了HttpResponse对象的API HttpRequest对象由Django自动创建,HttpResponse对象由程序员创建 不调 ...

  5. 3.request response

    rr的介绍 request是代表请求,response是响应 执行流程: 1.浏览器发送请求 2.服务器接受请求,创建两个对象,将请求信息封装给request,将两个对象发送给对应的servlet 3 ...

  6. request 对象和 response 对象

    Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象 HttpServletResponse HttpServletR ...

  7. 服务器可以响应字符类型的数据吗,HTTP - Response

    HTTP - Response 基本概念 数据格式 Response对象 功能 设置响应消息 1. 完成重定向 重定向和转发的区别(forward 和 redirect): 路径的写法 1. 路径的分 ...

  8. java response.write_response设置编码方式 print和write方法的对比

    很多场合会发现我们输出的中文是乱码,这主要可能有两方面的原因: 一个是浏览器的解析方式,另一个是我们服务器端返回数据的方式.只要我们保证浏览器的解析方式和我们回显的数据的编码格式是一致的,基本上乱码问 ...

  9. servlet response 中文乱码

    先,response返回有两种,一种是字节流outputstream,一种是字符流printwrite. 申明:这里为了方便起见,所有输出都统一用UTF-8编码. 先说字节流,要输出"中国& ...

  10. HTTP Response中的Chunked编码

    进行Chunked编码传输的HTTP Response会在消息头部设置: Transfer-Encoding: chunked 表示Content Body将用Chunked编码传输内容. Chunk ...

最新文章

  1. C#+AE 调整TOCControl控件中图层的显示顺序
  2. 收藏 : 50个Excel逆天功能,一秒变“表哥”
  3. 霍普分叉matlab程序,基于MATLAB_GUI的Kalman滤波程序
  4. 一加到1亿。C语言_可能是今年最难选的2部手机:小米10详细对比一加8T
  5. linux+html5+开发工具,记不住 Linux 命令?这三个工具可以帮你
  6. printf打印二进制_优雅地打印 HEX 数据
  7. linux 添加删除用户
  8. html编写qq整人代码,vbs代码大全?vbs整人代码?qq代码大全?常用VBS代码 值得一看
  9. ps中ppt的尺寸设置
  10. 给文件及文件夹设置密码
  11. 腾讯 2016届实习生招聘笔试
  12. mysql 裸设备_什么叫做裸设备
  13. 计算机运行很卡很慢,PS打开很卡怎么办?电脑太老PS运行慢如何优化?
  14. 基于部标1078视频协议和苏标Adas协议构建主动平台
  15. linux etc cron.deny,at.allow与at.deny及cron.allow与cron.deny优先级的比较
  16. VSCODE(三)用户界面
  17. 《微观经济学》 第三章
  18. PMP报考一定要报培训班吗?
  19. 计算2的100000次方
  20. 电脑安装java显示错误代码1603_win7安装软件弹出“错误 -1603安装时出现致使错误”的修复教程...

热门文章

  1. go语言服务器实战,Go实战--golang实现MP4视频文件服务器(nareix/joy4)
  2. 前端面试题--CSS3新特性有哪些?
  3. 前端面试题---(css篇①)15道题
  4. Spring Boot + ELK搭建日志监控框架
  5. rbegin()和rend()
  6. Kotlin实战和学习点滴
  7. matlab落海搜救模型,面向海上应急搜救的无人船路径规划
  8. 神、上帝以及老天爷(错位排序)
  9. 一款丧心病狂的API测试工具:Apifox!
  10. [转帖]文件扩展名一览表