关于tomcat服务器的分析(一)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/pickers/article/details/79335554

tomcat是一个服务器,或者更准确说的说只是一个servlet和jsp的容器(下文直接就用服务器这个词来表示tomcat这个容器,防止弄混),nginx/apache才属于服务器(这边的服务器指的是http服务器),tomcat应该属于动态服务器,因为他可以处理jsp文件,并且可以处理servlet,所以又被称之为java服务器,当然也是可以处理html和css这种静态文件的。这个应该也是他和apache的区别,apache是web服务器,只支持静态网页,其实本质上tomcat只是apache的一个扩展。

这个关系不能混淆,apache和nginx属于http服务器,在这种基础上可以进行一些负载均衡的设置等等,可以直接访问cgi(其实就是c语言编译后的exe可执行文件),为什么要单独说cgi呢,因为c语言牛逼啊,服务器一般都是部署在linux上,为什么要选择linux啊?因为linux开源啊,安全性十分高,社区里面大牛一大堆。c其实是linux的脚本语言,c最先被发明出来就是用在linux上的,所以我们之前在实验室做服务器实验的时候就是用c写一些应用(也就是cgi),然后写个makefile,makefile其实就是c在linux面的编译文件,比如假设有很多c文件,那么怎么编译呢,总不能每个都用gcc啊,那就写个makefile文件,里面写了每个文件的编译规则,之后生成一个exe文件,ok,之后我们就将这个exe文件直接丢到apache服务器,之后直接通过http访问就行。。。。其实我之前和一个同事一直在聊一个问题,不管服务器还是客户端,最终都是通过tcp/Ip之后通过tcp/Ip五层模型最终通过物理层发出去的,具体标识其实就是ip地址和端口号了,那这个怎么和tomcat对应起来呢,在这里我们我还得提下,之前java也好,c也好,python也好,对于网络编程,最终都会有个socket套接字这样的东西,其实网络编程也就是套接字编程,即socket编程,那么socket是什么,其实socket提供了一套api,它能够和工程师交互获取对方的ip和端口,之后他自己会有代码处理将其封装成tcp,之后通过底层传输出去。

我之前和同事争议的一个问题就是,如果我不开服务器,其他人是不是可以直接通过我的ip地址来访问到我这个目录下的文件,比如说存放在c盘下的1.txt,,其实我现在可以很负责任的说,那是不行的,(之前年少无知,不经常用脑子,因为这个不存在争议的啊),,,其实如果说不借助服务器也是可以的,你可以直接写一个c程序,然后通过socket编程开个服务器(这相当与自己写服务器了,其实主流服务器底层用的都是socket的,而socket是通过tcp协议传输数据的,具体tcp再往下,就涉及到太多了,比如ip啊,路由寻址啊,具体的链路传输啊等等关于计算机网络的知识了,我推荐一本计算机网络-自顶向下分析,,,这本书真的不错,我特地辞职去学习这个东西,,,再结合TCP/IP详解第一卷,再结合lwip,emmm,那你就基本就是大神了),开放下端口号,这样的话,你的客户端才会可以通过socket和这个联系起来,之后就可以进行一些交互了,,,之前用java做了个类似qq的聊天室用的就是这个(当时争论的时候怎么特么的就没想起来这茬呢,唉)。

说道这里我就得感慨下了,之前面试的时候,面试官让我写socket通信流程,我特么竟然没写出来,然后最关键的是,我特么面试还通过了,贼尴尬。

哦,对了,忘记提这点了,其实apache和nginx相当与一个平台,具体这个平台上怎么做高级逻辑处理,还得用编程语言来弄,比如java有tomcat,python要另外安装其他的解析器,不同的语言有不同的解析器,c就不需要了,应为linux本身就是最好的解释器啊。所以我之前在阿里服务器上部署php用的是phpstudy,部署javaweb用的是tomcat,这也就是为什么我之前弄微信的时候会出现端口号占用的情况。

ok,看到这里,应该对tcp,socket,以及服务器客户端的大体流程有个了解,也应该知道了假如我自己想简单的实现个服务器该怎么办,具体代码这个就得自己去学习了,这里只教你怎么忽悠面试官,怎么使你看起来感觉很牛逼。

有了这些基础,接下来就来分析下主流java服务器tomcat的具体工作原理,它是怎么将底层的tcp转化为服务器想要的数据,jsp和servlet获取的数据源从哪来等等,,,

猜你喜欢

转载自blog.csdn.net/pickers/article/details/79335554