0415-web:web服务器
2020-04-15 本文已影响0人
小咕咕coco
网络上的服务器
- 管理文件,接受请求,作出响应:指驻留于因特网上某种程序,放置网站文件向浏览器等Web客户端提供文档
- 目前最主流的三个Web服务器是Apache、 Nginx 、IIS。
组成
硬件或软件,或者是它们协同工作的整体。
- 硬件部分:
- 一台存储了网络服务软件以及网站的组成文件(比如,HTML文档、图片、CSS样式表和JavaScript文件)的计算机
- 它接入到互联网并且支持与其他连接到互联网的设备进行物理数据的交互。
- 软件部分:
- 控制网络用户如何访问托管文件
- 至少是一台HTTP服务器
分类
静态/动态
http server/application server(+database)
:是否能动态的生成资源并返回
Http Server
关心的是HTTP协议层面的传输和访问控制,的一个应用程序
- 运行在服务器之上,绑定服务器的IP地址
- 监听某一个tcp端口来接收并处理HTTP请求,
- 网页(HTML格式)、文档(PDF格式)、音频(MP4格式)、视频(MOV格式)等等资源
主要用来做静态内容服务、代理服务器、负载均衡等。直面外来请求转发给后面的应用服务(Tomcat,django什么的)
Application Server
一个应用执行的服务器
- 需要支持开发语言的 Runtime(对于 Tomcat 来说,就是 Java)(保证应用能够在应用服务器上正常运行
- 需要支持应用相关的规范,例如类库、安全方面的特性(对于 Tomcat 来说,就是需要提供 JSP/Sevlet 运行需要的标准类库、Interface 等
支持Servlet - Servlet 容器
- 当初在Apache Server开发时还未出现Servlet的概念,所以Apache不能内置支持Servlet(实际上,除了Apache,其他许多HTTP Server软件都不能直接支持Servlet。
- 为了支持Servlet,通常要单独开发程序,这种程序一般称为服务器小程序容器(Servlet Container),有时也叫做服务器小程序引擎(Servlet Engine)
- 它是Web服务器或应用程序服务器的一部分,用于在发送的请求和响应之上提供网络服务,解码基于MIME的请求,格式化基于MIME的响应
- 它在Servlet的生命周期内包容和管理Servlet,是一个实时运行的外壳程序。运行时由Web服务器软件处理一般请求,并把Servlet调用传递给“容器”来处理。
与HTTP Server
- 应用服务器往往也会集成 HTTP Server 的功能,但是不如专业的 HTTP Server 那么强大
- 所以Application Server往往是运行在 HTTP Server 的背后,执行应用,将动态的内容转化为静态的内容之后,通过 HTTP Server 分发到客户端。
Tomcat
实践
我的tomcat安装在了/usr/local/apache/里,到里面的bin下启动
#启动
cd /usr/local/apache/apache-tomcat-9.0.14/bin
sudo ./startup.sh
#关闭
sudo ./shutdown.sh
然后在localhost:8080就可以访问webapp文件夹下的web应用:
比如localhost:8080/examples,就对应apache-tomcat-9.0.14/webapps/examples
而examples是一个典型的webapp总目录
如果我们需要部署的话,直接放在tomcat安装目录的webapps文件夹下即可,然后用localhost:8080/ProjectName/访问
框架
Tomcat 是一个「Application Server」,更准确的来说,是一个「Servlet/JSP」应用的容器
关于容器和serlet的配合工作
Web Client 向Servlet容器(Tomcat)发出Http请求;
Servlet容器接收Web Client的请求;
Servlet容器创建一个HttpRequest对象,将Web Client请求的信息封装到这个对象中;
Servlet容器创建一个HttpResponse对象;
Servlet容器调用HttpServlet对象的service方法,把HttpRequest对象与HttpResponse对象作为参数传给 HttpServlet对象;
HttpServlet调用HttpRequest对象的有关方法,获取Http请求信息;
HttpServlet调用HttpResponse对象的有关方法,生成响应数据;
Servlet容器把HttpServlet的响应结果传给Web Client;</pre>
Tomcat结构
Tomcat 也非常的模块化

- Server(服务器):Tomcat构成的顶级构成元素,所有一切均包含在Server中,Server的实现类StandardServer可以包含一个到多个Services;
- Service:调用了容器(Container)接口,其实是调用了Servlet Engine(引擎)
- 容器(Container):
- 主机(Host)、上下文(Context)和引擎(Engine)均继承自Container接口,所以它们都是容器。
- 但是,它们是有继承关系的,引擎(Engine)->主机(Host)->上下文(Context)
- 连接器(Connector):将Service和Container连接起来:注册到一个Service,把来自客户端的请求转发到Container(容器)
工作流程
- 请求被发送到本机端口8080,被在那里侦听的Coyote HTTP/1.1 Connector获得;
- Connector把该请求交给它所在的Service的Engine来处理,并等待Engine的回应;
- Engine获得请求localhost:8080/test/index.jsp,匹配它所有虚拟主机Host;
- Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机);
- localhost Host获得请求/test/index.jsp,匹配它所拥有的所有Context;
- Host匹配到路径为/test的Context(如果匹配不到就把该请求交给路径名为""的Context去处理);
- path="/test"的Context获得请求/index.jsp,在它的mapping table中寻找对应的servlet;
- Context匹配到URL PATTERN为*.jsp的servlet,对应于JspServlet类;
- 构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet或doPost方法;
- Context把执行完了之后的HttpServletResponse对象返回给Host;
- Host把HttpServletResponse对象返回给Engine;
- Engine把HttpServletResponse对象返回给Connector;
- Connector把HttpServletResponse对象返回给客户browser;