本文已参与「新人创作礼」活动, 一起开启掘金创作之路。
1 Tomcat是什么?
通过对Web服务器的学习,我们知道Tomcat是一种Web服务器。如果我们想要通过浏览器输入网址(HTTP请求)就可以访问我们的Web程序,我们就要将我们的Web程序放到我们的服务器上,这样是我们常说的讲程序部署到服务器上。
2 部署和不部署有什么区别?
相信大家在学习Java Web前都学习过H5 CSS JS这些,当我们将这些代码写完想要打开看卡效果,一般在网页上都是这个前端代码的文件绝对路径。如果你想用另一台电脑看这个页面的话,你输入这个路径肯就找不到了。
而这和我们平时上网是有出入的,我们上网是只要电脑连接了网络就,输入网址就可以访问一个网站,这里的网址就是URL,这个网址就是一个HTTP请求。
而我们自己写的web程序部署带Tomcat以后会是怎么样的呢?
我们来解析一下这个URL:
localhost表示的是服务器主机,因为是部署在自己的计算机上,所以是localhost
8888表示的是端口号
端口号后面的是资源路径
URL是通过HTTP协议存取资源的Internet路径,一个URL对应一个数据资源;所以如果我们的web程序需要被大家都看到必须拥有一个部署到服务器上。
3 输入一个url发生了什么
简单点回答过程是:
- DNS解析
- TCP连接
- 发送HTTP请求
- 服务器 HTTP 应答
- 浏览器解析渲染
- 连接结束
而Tomcat参与的就是服务器对HTTP进行应答,这个步骤有接受连接、解析请求数据包、处理请求和发送响应。
通过HTTP请求,Tomcat可以找到部署的应用、相应的资源,然后返回给浏览器。这里的部署的应用就是我们部署上去的Java web程序。也就是说Tomcat可以解析我们的部署的Java Web程序,而这种程序不是我们普通写的拥有main方法的Java程序,而是Servlet程序,这也是为什么在学习java Web的时候,Servlet是重点内容,同时Servlet也是很多Web框架的基础,基本上都是对Servlet进行封装。
4 解析一个HTTP请求后,Tomcat的工作流程
在解析完HTTP以后,HTTP服务器不能直接调用具体的业务类,因为这些业务类是紧耦合的。所以是使用的HTTP服务器将请求交给Servlet来处理。
servlet容器的工作流程
当客户请求某个资源时:
-
HTTP服务器会用一个ServletRequest对象把客户的请求信息封装起来,然后调用Servlet容器的service()方法
-
Servlet容器根据请求的URL和Servlet的映射关系,找到相应的Servlet
- 如果Servlet还没有被加载,就用反射机制创建Servlet对象,并调用Servlet的init方法来完成初始化,接着调用Servlet的service方法来处理请求
- 如果Servlet已经加载,直接调用Servlet的service方法来处理请求
-
请求处理完毕,Servlet容器把ServletResponse对象返回给HTTP服务器,HTTP服务器会把响应发送给客户端