0.引言
我在刚刚接触大型工程项目时,无数之前闻所未闻的概念向我纷至沓来,而且在刚开始了解这些概念的时候尤其痛苦——因为这些概念通常是一个串着一个,如果要从最底层开始了解又会花费巨量的时间,怎么办呢?
也没啥办法只能一个个慢慢啃了,这个专栏就专门用来分享我这个小白学习的相关计算机知识;
只是简单的介绍,供广大入门开发者了解,更深入的学习还是需要更专业的资料和官方的文档。
1.Servlet
什么是servlet?sun(oracle)公司制订的一种用来扩展web服务器端功能的组件规范(即用来让网页处理动态的请求,不同访问有不同的响应),处理请求和发送响应的过程是由一种叫做 Servlet 的程序来完成的
如下图所示,如果你的浏览器,需要一些动态的请求,通常你就需要用到servlet;因为比如Nginx这类web服务器是无法处理动态请求的(Nginx见第三章)
那什么是动态请求呢,他跟静态请求有何区别?
1.他们的工作原理不同:
一般客户端请求的静态资源,发送请求到web服务器,web服务器从内存取到相应的文件,返回给客户端,客户端解析并渲染显示出来。
一般客户端请求的动态资源,发送请求交于web容器,web容器连接数据库,数据库处理数据之后,将内容交给web服务器,web服务器返回给客户端解析渲染处理。
2.他们的交互性与运行状态不同:
静态资源一般都是设计好的html页面,而动态资源依靠设计好的程序来实现按照需求的动态响应;
静态资源的交互性差,动态资源可以根据需求自由实现;
在服务器的运行状态不同,静态资源不需要与数据库参于程序处理,动态可能需要多个数据库的参与运算。
servlet本质上是一种符合相应的规范,具有部分功能的,并且需要部署到相应的容器里面才能运行的软件模块。并且需要部署到servlet容器里面才能运行。
注:容器:符合相应的规范,提供组件运行环境的程序。比如Tomcat就是比较有名的servlet容器。jetty jboss weblogic都是servlet容器。这些servlet把网络相关的问题已经全部处理好,我们写servlet只需要关注业务逻辑
接下来我们就来说一下Tomcat
2.Tomcat
说来有趣,我第一次听说这个概念,是因为在接触java语言和spring框架的时候,教课的老师特别喜欢用动物类来讲解功能,而且每次都创建“猫”的实例他并取名为Tomcat
但实际上Tomcat跟java还真有点关系,一句话定义:
Tomcat是一种web服务器/一个web网站的运行容器,把你写好的网站放进去就可以运行
看到这个小白可能感觉很抽象,大白可能会把docker容器带入进去理解理解,那么更通俗的说法是什么呢?
详细的说:tomcat是一个轻量级应用服务器,是支持运行Servlet/JSP应用程序的容器,运行在jvm(java虚拟机)上,绑定IP并监听TCP端口;一款免费开源的Servlet容器,可实现JavaWeb程序的装载,是配置JSP(Java Server Page)和JAVA系统必备的一款环境。Tomcat不仅仅是一个Servlet容器,它也具有传统的Web服务器的功能:处理Html页面
好在我们已经讲过了什么是servlet,这下应该没那么抽象了;jsp、jvm等基础概念不懂的读者可以自行搜索一下,我们举一个例子来进一步具体:
你在做web项目时,多数需要http协议,也就是基于请求和响应,比如你在百度输入一行内容搜索,那么百度服务器如何处理这个请求呢,他需要创建servlet来处理,servlet其实就是java程序,只是在服务器端的java程序servlet通过配置文件拦截你的请求,并进行相应处理,然后展示给你相应界面,那么servlet如何创建?这时候就用到了tomcat,它就是帮助你创建servlet的东西,所以也称web容器,没有它,没法运行web项目。
当然,相对应的web容器有很多,比如JBOSS,WEBLOGIC等。但Tomcat运行时占用的系统资源小,扩展性好,支持负载平衡与邮件服务等开发应用系统常用的功能,因而深受java爱好者的喜爱,并得到了部分软件开发商的认可,和Apache一样,早已成为主流Web服务器的一种
以servlet为例,tomcat有三大作用:
(1)管理servlet应用的生命周期
(2)把客户端请求的url映射到对应的servlet
(3)与Servlet程序合作处理HTTP请求
3.Nginx
最后我们涉及到这个俄罗斯小伙子写的web服务器,他虽然不能跟servlet一样处理动态资源,但是有其他显著的优势,
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,处理高并发能力是十分强大的,同时也提供了IMAP/POP3/SMTP服务,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。
换而言之,Nginx是一款轻量级的Web 服务器/反向代理服务器及email(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。同时,Nginx支持热部署,启动简单,可以做到7*24不间断运行。几个月都不需要重新启动
注:以下都是email用的协议,所以Nginx被广泛用在邮件相关场景
POP3,基于TCP/IP协议,主要用于支持使用客户端远程管理在服务器上的email,
IMAP,一种交互邮件访问协议(应用层),主要作用是邮件客户端可以通过这种协议从邮件服务器上获取邮件的信息、下载邮件等;运行在TCP/IP协议之上,使用的端口是143。它与POP3协议的主要区别是用户可以不用把所有的邮件全部下载,可以通过客户端直接对服务器上的邮件进行操作
SMTP,简单邮件传输协议(SimpleMailTransferProtocol),是定义邮件传输的协议,基于TCP服务的应用层协议
注2:什么是反向代理?
正向代理: 我们平时需要访问国外的浏览器,比如推特、GitHub等等,会非常慢甚至访问不上去。也就是说有的时候我们直接用国内的服务器无法访问国外的服务器,或者是访问很慢。所以我们需要在本地搭建一个服务器来帮助我们去访问。
即:浏览器——>正向代理服务器——>对应网址(如github),这种就是正向代理。(每个浏览器中都可以配置配置代理服务器)
反向代理: 当我们访问某个流量很大的网址,比如淘宝、微博的时候,这些网址内部肯定不是只有一台服务器不然他处理不了大量的访问。就拿淘宝来举例,比如你想访问美妆区它是一台服务器,访问电子产品区可能又是另外一台。那我们进行访问的时候,因为服务器中间session不共享,那我们是不是在服务器之间访问需要频繁登录?这样会非常麻烦
因此,反向代理就起作用了,还是拿淘宝举例,淘宝可以搭建一个过渡服务器作为反向代理,我们是登录淘宝的时候,只需要把请求发送给反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,再返回给我们的浏览器。在我们看来,此时反向代理服务器和目标服务器对外就是一个入口,也可以看成一台服务器,暴露的是代理服务器address,而隐藏了真实服务器的address。(在服务器中配置代理服务器)。即:客户端对反向代理是无感知的,不需要任何配置就可以访问
即:浏览器——>反向代理服务器(如Nginx)<——>对应网址(如淘宝)