关键词:Tomcat、原理、javaweb
本文摘要:之前做过一些javaweb小项目,但是还有点懵懵的,对web项目的运行原理不太清晰,所以在此重新梳理一下。
首先从宏观上看看
在一次会话中(比如打开某个网页),浏览器向服务器发起一个请求,由Tomcat处理后再发回客户机。
假设来自客户的HTTP请求为:http://localhost:8080/Demo1t/HomePage.jsp。 其中localhost一般为域名,8080是服务器的端口,Demo1是项目名,HomePage是项目中的一个页面。
现在再看看Tomcat的组成部分
Tomcat 的核心功能有两个,分别是负责接收请求和返回请求结果的连接器 Connector,和负责处理请求的容器 Container。其中连接器和容器相辅相成,一起构成了基本的 web 服务 Service,每个 Tomcat 服务器可以管理多个 Service。下面分别介绍核心组件。
连接器Connector 核心功能: 1.监听端口(还记得第一次安装tomcat那个8080端口吧),接收和响应网络请求。 2.网络字节流处理。http协议传来的数据容器可看不懂,需要先进行预处理。将收到的网络字节流转换成 Tomcat Request 再转成标准的 ServletRequest 给容器。待容器处理结束后,将容器传来的 ServletResponse 转成 Tomcat Response 再转成网络字节流。
连接器又可以细分成更多小组件,先不细说了,总结一下,连接器的主要作用就是监听用户端发来的请求。
容器Container 简单说,容器就是用来处理请求的,容器主要包括: Engine:引擎,管理多个虚拟主机 Host:虚拟主机,用于部署web应用 Context:web应用
一个http请求过程 最后,回到文章开头的http请求,看看具体的请求过程 第一步,手机或者PC(客户端)发送了一个http://localhost:8080/Demo1t/HomePage.jsp请求。 第二步,连接器监听的端口是8080,请求的的端口和监听的端口一致,连接器接受了该请求。 第三步,因为引擎的默认虚拟主机是 localhost,并且虚拟主机的目录是webapps。所以请求找到了 tomcat/webapps 目录。 第四步:解析的 Demo1 是 web 程序的应用名,也就是 context。此时请求继续从 webapps 目录下找 Demo1 目录。 第五步:解析的 HomePage.jsp是具体的业务逻辑地址。此时需要从 docs/WEB-INF/web.xml 中找映射关系,最后调用具体的函数。
更底层一些,当浏览器发出一个http请求时,会先在本地电脑的system32文件夹下查找一个hosts文件,在hosts文件中寻找是否有相对应的域名映射。如找不到则会到DNS服务器继续寻找,直到找到相对应的域名映射。然后才会进行上述的请求过程。