Response&Http

文章目录

HTTP响应详解

使用抓包查看响应报文协议内容

由于浏览器的原因,浏览器会把请求行和响应行信息放在一起

  1. 响应行

状态码

状态码 状态码描述 说明
200 OK 请求已成功,请求所希望的响应头或数据体将随此响应返回。出现此状态码是表示正常状态。
302 Move temporarily 重定向,请求的资源临时从不同的 地址响应请求。
304 Not Modified 浏览器缓存中读取数据,不从服务器重新获取数据。例如,用户第一次从浏览器访问服务器端图片资源,以后在访问该图片资源的时候就不会再从服务器上加载而直接到浏览器缓存中加载,这样效率更高。
404 Not Found 请求资源不存在。通常是用户路径编写错误,也可能是服务器资源已删除。
403 Forbidden 服务器已经理解请求,但是拒绝执行它
405 Method Not Allowed 请求行中指定的请求方法不能被用于请求相应的资源
500 Internal Server Error 服务器内部错误。通常程序抛异常
  1. 响应头

响应头也是用的键值对key:value,服务器基于响应头 通知浏览器的行为。
常见的响应头

响应头Key 响应头value
location 指定响应的路径,需要与状态码302配合使用,完成重定向
content-Type 响应正文的类型(MIME类型,属于服务器里面的一种类型,例如文件在window系统有自己的类型,.txt .doc .jpg。文件在服务器中也有自己的类型),同时还可以解决乱码问题。例如:text/html;charset=UTF-8
content-disposition 通过浏览器以附件形式解析正文,例如:attachment;filename=xx.zip
refresh 页面刷新,例如:3;url=www.itcast.cn //三秒刷新页面到www.itcast.cn

常见的MIME类型:就是文件在tomcat服务器中的文件类型:

windows tomcat(MIME类型)

超文本标记语言文本 .html text/html ***

xml文档 .xml text/xml

XHTML文档 .xhtml application/xhtml+xml

普通文本 .txt text/plain ***

PDF文档 .pdf application/pdf

Microsoft Word文件 .word application/msword

PNG图像 .png image/png **

GIF图形 .gif image/gif

JPEG图形 .jpeg,.jpg image/jpeg **

...

  1. 响应体

响应体,就是服务器发送给浏览器的数据。

Response对象

Response继承体系

tomcat定义实现类ResponseFacade门面类对象。底层创建门面类对象

ServletResponse response = new ResponseFacade();

然后将响应对象传递给service doGet doPost方法参数。在方法体中就可以使用响应对象

Response设置响应数据功能介绍

http响应数据总共分为三部分内容,分别是响应行,响应头,响应体

  1. 响应行

设置响应状态码:

void setStatus(int sc);

  1. 响应头

设置响应头键值对:

void setHeader(String name,String value);

响应头:name的值

location 指定响应的路径

content-type:告诉浏览器文件格式,告诉浏览器不要解析html文件(text/plain),解决中文乱码问题 ************

refresh 定时刷新

content-disposition 以附件形式展示图片等资源

  1. 响应体

对于响应体,是通过字符、字节输出流的方式往浏览器写,

获取字节输出流

ServletOutputStream getOutputStream();

获取字符输出流

PrintWriter getWriter();

Response请求重定向

概述

重定向 :一种资源跳转方式(服务器外部的)
(1)浏览器发送请求给服务器,服务器中对应的资源A接收到请求

(2)资源A现在无法处理该请求,就会给浏览器响应一个302的状态码+location的一个访问资源B的路径

(3)浏览器接收到响应状态码为302就会重新发送请求到location对应的访问地址去访问资源B

(4)资源B接收到请求后进行处理并最终给浏览器响应结果,这整个过程就叫重定向

实现方式

resp.setStatus(302);设置响应状态码是302

resp.setHeader("location","资源B的访问路径");

或者:

resp.sendRedirect("资源B的访问路径");

重定向特点

  • 浏览器地址栏路径发生变化
  • 可以重定向到任何位置的资源(服务器内部,外部均可)
  • 俩次请求,不能在多个资源使用request共享数据

请求重定向和请求转发比较


如果需要在资源之间传递共享request数据,使用请求转发,否则就用重定向

路径问题

规则

  • 浏览器使用:需要加虚拟目录(项目访问路径)
  • 服务端使用:不需要加虚拟目录

对于转发来说,因为是在服务端进行的,所以不需要加虚拟目录

对于重定向来说,路径最终是由浏览器来发送请求,就需要添加虚拟目录。

Response响应字符数据

步骤

  1. 通过Response对象获取字符输入流:PrintWriter writer = resp.getWriter(); 由于获取打印字符流是根据response对象获取的,所以向浏览器打印输出
  2. 通过字符输出流写数据: writer.write("aaa");

实现

  1. 返回一个简单的字符串aaa

PrintWriter writer = response.getWriter();

writer.write("aaa");

  1. 返回一串html字符串,并且能被浏览器解析

PrintWriter writer = response.getWriter();

//content-type,告诉浏览器返回的数据类型是HTML类型数据,这样浏览器才会解析HTML标签

response.setHeader("content-type","text/html");

writer.write("

aaa

");

  1. 返回一个中文的字符串,需要注意设置响应数据的编码为utf-8

//设置响应的数据格式及数据的编码

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

writer.write("你好");

:要先设置响应头,然后再用response获取输入流

Response响应字节数据

步骤

  1. 通过Response对象获取字节输出流:ServletOutputStream outputStream = resp.getOutputStream();
  2. 通过字节输出流写数据: outputStream.write(字节数据);

实现

返回一个图片给浏览器

html 复制代码
/**
 * 响应字节数据:设置字节数据的响应体
 */
@WebServlet("/resp4")
public class ResponseDemo4 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1. 读取文件
        FileInputStream fis = new FileInputStream("D:\\abc\\柳岩.jpg");
        //2. 获取response字节输出流
        ServletOutputStream os = response.getOutputStream();
        //3. 完成流的copy
        byte[] buff = new byte[1024];
        int len = 0;
        while ((len = fis.read(buff))!= -1){
            os.write(buff,0,len);
        }
        fis.close();
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }
}

也可以用工具:

html 复制代码
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.6</version>
</dependency>
相关推荐
田三番17 小时前
使用 vscode 简单配置 ESP32 连接 Wi-Fi 每日定时发送 HTTP 和 HTTPS 请求
单片机·物联网·http·https·嵌入式·esp32·sntp
dulu~dulu17 小时前
查缺补漏----用户上网过程(HTTP,DNS与ARP)
网络·网络协议·http
丶213618 小时前
【网络】HTTP(超文本传输协议)详解
网络·网络协议·http
binqian1 天前
【k8s】ClusterIP能http访问,但是不能ping 的原因
http·容器·kubernetes
MetaverseMan1 天前
http防抖和ws防抖
网络·网络协议·http
暂时先用这个名字1 天前
常见 HTTP 状态码分类和解释及服务端向前端返回响应时的最完整格式
前端·后端·网络协议·http·状态码·国产化·响应
圈圈的熊2 天前
HTTP 和 HTTPS 的区别
前端·网络协议·http·https
这题怎么做?!?2 天前
【Linux】网络编程:实现一个简易的基于HTTP协议格式、TCP传输的服务器,处理HTTP请求并返回HTTP响应;GET方法再理解
linux·服务器·c语言·网络·c++·tcp/ip·http
小兔子酱#3 天前
【Linux 26】应用层协议 - HTTP
linux·运维·服务器·网络·网络协议·http
Amagi.3 天前
HTTP返回码和其含义
网络·网络协议·http