IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 【Servlet】Servlet学习之基础篇(HTTP) -> 正文阅读

[网络协议]【Servlet】Servlet学习之基础篇(HTTP)

前言:本系列文章很多地方会以小白的角度来思考很多看似“简单”的问题。适用于对Servlet 有简单了解的人。本文是自己学习的过程,学习的体验,也是在本人的能力范围内,给大家尽量带来由浅入深的文章

本文章讲了什么

  1. 在你了解了基础Servlet运行原理之上,了解HTTP和Servlet的爱恨情仇
  2. HTTP的基础格式,以及和Servlet、服务器相关的HTTP知识

为了不打扰您的时间,本文不以介绍HTTP是什么为主要目的,若是您要从0-1学习HTTP,本文不适合您。

  1. 需要一点点的HTML知识
  2. 需要一点点HTTP知识

HTTP有什么作用

即使没有学过Servlet,您也知道HTTP是干啥的,数据传输的呗,OK,知道这点足够了。
稍微修饰一下语句:HTTP是web上客户和服务器进行通信的一个协议。
注:平时说HTTP,可能指的是这个协议本身,也可能指的是携带数据的HTTP报文(您认为成一个带有数据的信封也可以)

在这里插入图片描述

发送响应

响应就是:从客户端发送的HTTP请求,在后台有Servlet接口,容器在接收到用户的HTTP请求之后,把这个请求封装成HttpServletRequest,然后容器在自己管理的Servlet里面找到对应的Servlet处理。

传输网页信息HTML“字符串”

不知道你在浏览界面的时候,有没有思考,你的网页是谁管理的,是国家吗?还是某个机构?亦或者是网站管理员,我相信你应该知道是管理员,那么这个HTML是怎么到你的电脑的呢?
【HTML】:HTML是啥,其实也是一段字符,一个HTML网页,其实你可以看成一个字符串,也是一段信息,这个信息是可以被传递的,后台把HTML响应作为返回数据给用户浏览器。
【HTTP】:用户要啥,HTTP询问啥,能找到我都给你,怎么处理数据是浏览器的事情喽,怎么显示也是。

网址URL

要想介绍HTTP,URL不介绍,真的很难进行下去欸。
当我们访问一个服务器下的网页,浏览器会发送请求,这个请求包括了啥呢,主要说明一些属性,比如说User-Agent,请求方法,数据大小,域名URL
在这里插入图片描述一个请求,请求的最重要的参数我觉得是URL了,下面看看URL包括了啥

流程解析:
当输入一个网址,会调用 get请求发送到服务器,服务器反应后找到页面代码,包装到响应体中,然后返回给用户。
在这里插入图片描述没有URL,你不知道去哪请求,你不知道对方使用的协议–无法交流,你不知道对面端口(只知道几号楼,不了解第几层),你不知道请求的页面(你找对位置了,却不知道你要杀)。

POST和Get

谈及HTTP,谈及获取数据,POST和Get是逃不掉的。
这两个都是请求方法,也就是请求的类型。
对于POST和Get,都能传输数据,但是是有一些区别的。
主要的区别

  1. POST有请求体,存放参数更安全;Get没有体
  2. POST数据长度没有限制,Get参数长度有限制

POST

一般用户传输一些数据较长的数据,或者是携带一些重要的,需要隐藏的参数数据。

例如如下:第二个框,里面写了两个参数,这个位置是POST请求的体,是用来传输数据的,POST和Get的区别之一就是参数是放在体中的,这个比Get要安全很多,Get的参数是在URL中以键值对的形式出现的,并且Get是没体的传输的参数是以Get显式跟在URL之后的。
在这里插入图片描述简要说明上面的图片:
分为两个部分,第二个红框及之前都是请求的报文,之后是HTTP响应报文

  1. 【请求行】以POST方式,发送到目标地址
    在这里插入图片描述
  2. 【请求字段】携带了很多信息,包括内容格式,长度…在这里插入图片描述这里着重强调一下content-type:常用的两种一种是表单form,一种是json。
    form是以键值对的形式传递参数的,例如你看看下面的图片。
    如果要获取这个vvalue就需要 request.getParamter(key);来获取,对于POST和Get请求都是一样的

要注意的是,如果是POST请求,是可能有请求体的。如果要获取请求体内容
request.getReader();操作字符数据
request.getInputStream();获取字节输入流,可以操作所有类型数据
4. 【请求体】可以放传输的数据,参数等
在这里插入图片描述在这里插入图片描述

Get

举个真实的例子,就是搜索,可以看见,使用的是Get,其实一般传递不是很重要的参数来获取数据,用Get是很多的,比如说获取网页,获取资源。
在这里插入图片描述从这里,很容易可能到Get请求的URL中携带了很多参数。
在这里插入图片描述

POST和Get的幂等性探究及使用场景推荐

幂等性:这里指的是作用于对于资源产生的结果而非资源本身,即例如get如果返回的是不同的内容,但是不影响资源,那么就是幂等的。举个例子,使用get获取时间,获取到的时间不同,但是不影响其对后台资源。
Get方法

Get /tickets # 获取ticket列表
这里的get方法用于获取资源,不管调用多少次接口,结果都不会改变,所以是幂等的。
例如Get /time # 获取当前时间
这里每次调用会返回不同的内容,但是对资源本身不产生影响,所以是幂等的

Post方法
Post /tickets # 新建一个ticket
这是一个非幂等的方法,因为调用多次,都会产生新的资源,它对资源本身能产生影响,因此不满足幂等性。

【使用场景探究】
GET通过URL提交数据,数据在URL中。这方法是幂等的,所以他适合查询类的
POST放在响应体中。这方法是非幂等的,所以代表的是新增操作
当如果数据过长,会考虑讲GET使用POST来代替。

POST和Get请求发送到后台有啥区别

其实区别不大,都会被封装成一个HttpServletRequest,然后交给Servlet,下面是Servlet的生命周期,也是其运行的原理
Servlet在服务器运行的时候会

Servlet处理完是怎么返回数据的

上文说到了容器,不知道你对网络编程有没有了解,例如通过TCP可以建立两个主机之间的联系,HTTP是基于TCP。在用户传递HTTP请求之前,会建立一个连接,使得两者之间可以通过这个通道来传输信息。
当用户处理好响应和数据之后,就可以通过response.getWriter来获取输入流了。
代码示例:

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        response.setContentType("text/html");

        // Hello
        PrintWriter out = response.getWriter();
        out.println("<html><body>");
        out.println("<h1>" + message + "</h1>");
        out.println("</body></html>");
    }

总结:

  1. PrintWriter:把文本数据打印到一个字符流。
    PrintWriter writer = response.getWriter();
    writer.println(“sfadfa”);
  2. OutputSream:输出字节输入,可以是任何内容,但是注意要setContentType
    ServletOutputSream out = response.getOutputStream()
    out.write(bytesArray)

响应返回其实就是在容器建立的socket通道之上,通过写入输入流来生成响应并返回。

总结:

  1. HTTP运行在TCP/Ip之上
  2. HTTP使用一种请求/响应模型,客户发送一个HTTP请求,然后web服务器返回一个HTTP响应,再由浏览器 (根据响应的类型)确定如何处理
  3. 如果返回一个HTML界面,会把HTML内容放入响应中
  4. GET请求把表单参数追加到URL后
  5. POST请求将表单数据包括在请求的体重
  6. URL代表统一资源定位(Uniform Resource Locator),Web每个资源都有自己的唯一地址,都采用这种URL格式。
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-09-13 11:52:32  更:2022-09-13 11:56:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 21:30:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码