什么是HTTP、什么是Tomcat、什么是Servlet

为了不让网络编程在自己看来是一个黑盒子
在学习tomcat和servlet,jsp之前,需要了解这些

一、tomcat是一个封装和实现了http传输协议的容器,那么http是什么?

http全称是超文本传输协议
即是指从万维网服务器端(http server端)传送超文本到本地浏览器的协议
它是基于安全连接tcp/ip协议产生的
所谓超文本传输,传输的即是html/css/js可视化前端代码

  1. http的特点

socket是在底层封装了tcp/ip协议的java类
http也是基于tcp/ip协议的传输协议
如果尝试在socket中打开一个端口并等待,获取socket后输出这个socket对象通过字符流获取的请求,然后再在浏览器中输入127.0.0.1:portNum 会发现在控制台中输出了当前浏览器的配置信息,客户端ip地址等
简单的说,socket和http都是封装了ip/tcp协议,在使用时不需要去在意那些从物理层到网络层等的实现(TTL包头等),只需要进行业务数据的处理即可
那么http协议的三个特点,可以结合socket类的运行机制进行理解

A.无连接
结合socket进行理解,socket分为serversocket和socket,前者是服务器端的tcp接口,socket进行数据收发是监听机制,即服务器端的serversocket创建好了以后,会开放一个端口进行监听
它的传输是通过流进行传输的,客户端socket封装了一个输入流一个输出流,服务器端serversocket封装了一个输入流和一个输出流,两个流建立连接后,AtoB,BtoA进行消息发送,但是如果!如果在一次请求和回应之后关闭当前的流,会导致获取了一个socket请求就将当前监听端口关闭了
可以理解为http没有对数据进行循环监听和定时刷新验证的机制

http大概是同理的,它每一次在载入页面,或者说获取超文本数据时,没有一个登陆状态或者说没有一个定时刷新的机制向服务端请求刷新当前的数据,超文本数据获取了就获取,如果需要对页面的内容进行变更,需要再次根据url/ajax等再次进行请求
这里写图片描述

B.http是媒体独立的
只要客户端知道如何进行数据处理,理论上可以接受任何形式的数据,这个很好理解,在socket中,传输的媒介 是通过流实现的,流分很多种,但究其本质都是字节流的包装,传输数据时本身肯定还是以字节为单位的

C.http是无状态的
这一点其实有一点重复,是根据第一点引申出来的,你每一次通信都要重新建立连接,传输过来的超文本对于客户来说是可修改的透明的,每一次获取数据都要重新发送请求,那自然是无状态,

从这里大概可以猜测到比如网络游戏这一类需要保持连接的架构了,tcp/ip可以做成长连接,也可以做成短连接,但是长连接应该也是重复刷新的短连接吧,只要遵循tcp的长连接协议就可以保持登录状态,比如诸如java等语言对于长连接就封装了一个类来简单实现

还有一个有趣的事是作为客户端向服务器端发送时,每次发送的端口都不同,并且都是50000+

  • http报文格式

  • 这是http请求报文格式
    

    这里写图片描述
    这是服务器响应消息格式
    这里写图片描述
    下面是我通过浏览器向socket发送url链接请求获取的Http请求头
    这里写图片描述

    二. 什么是tomcat

    一般的B/S架构web工程结构为下图:
    这里写图片描述
    CGI(Common Gateway Interface) 是WWW技术中最重要的技术之一,有着不可替代的重要地位。CGI是外部应用程序(CGI程序)与WEB服务器之间的接口标准,是在CGI程序和Web服务器之间传递信息的过程。(摘自百度百科)

    可不可以说Tomcat就是实现了CGI接口的web应用开发的容器?

    再直白一点,既然socket可以返回响应,那就也可以向客户端返回一个服务器相应的数据包,并且将业务需要的超文本内容放到其中,然后传输完成一次关一次流实现无连接双工通信。那么我也能做到B/S交互(事实上已经试验成功了)

    但是这样做很麻烦,更何况在http1.1协议下,还需要考虑到安全问题对不同的请求进行不同的回复和内容细分,比如Get请求发送过来,总不可能瞎回一个POST请求的数据包吧,还有一个web项目的基础逻辑也需要遵守
    等等

    这些内容就放到tomcat里面自行给我们封装好了,并且还将请求和回应按照业务划分成了GET/POST等方法,但是其本质(无连接的双工TCP/IP通信)是不变的!

    这是tomcat的文件结构
    这里写图片描述

    tomcat除了实现了http协议以外,
    还针对javaweb项目做了很多业务优化,简单的说就是可以更好的管理java项目
    比如
    通过war包对工程jar包进行二次封装,区分公用lib文件和私有lib文件,多项目开发管理,JAVAWEB日志处理
    等等

    三、什么是Servlet

    Servlet是一个独立的开发标准,不是强耦合在Tomcat中的jar包

    JAVAEE是一个针对JAVA开发的B/S架构项目的框架,简单的说是一个jar包
    servlet是其中的一个接口,业务定义为用来处理一部分页面业务同时也是作为service层和前端html页面交互的桥梁

    其中包含的方法包括servlet生命周期,service服务,获取servlet配置信息
    继承关系

    GenericServlet抽象类继承了Servlet接口
    实现了除Service()以外的方法
    HTTPServlet继承了GenericServlet抽象类
    将Service()方法细分为了doGet(),doPost(),doHead(),doPull()方法
    不过除了doGet()和doPost(),其它几个和实现B/S交互业务不太相关


    来自:https://blog.csdn.net/liuajiehe1234567/article/details/78760564

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值