文章目录
1 Web服务器
在学习JavaWeb的时候有一个很抽象的概念,叫做:web服务器,在学习的过程中一定会有下面这张图:
浏览器是我们经常要使用的一个软件,而数据库这种在以前的学习也不陌生,如果你要写一个有数据存储的软件,那就需要使用到数据库,而这个web服务器是我们之前没有接触过的东西。
本文就将Web服务器这个东西进行一下具体化。
1.1 什么是web服务器
这里说的web服务器应该是:Web Server——服务器软件(程序),或者是安装了这个软件的硬件。这个服务器的核心,就是对HTTP协议的实现。所以在学习JavaWeb一定要对HTTP协议以及相关的TCP/IP协议有一定的了解。
1.2 web服务器的工作
Web Server的主要工作就是通过HTTP协议与客户端进行通讯,处理客户端发送的HTTP请求,并且对这些请求HTTP请求做出回应,返回用户需要的内容,或者错误信息。
在我们日常使用浏览器的时候,我们想要访问哪个一个网页,就会在浏览器上输入网址(URL),或者点击某个链接(其实也是在跳转URL),这个就是我们发送的HTTP请求(Request),而Web Server就是来处理这些请求,并返回给我们相应的页面的(Respones)。如果错误我们也会看到像404这样的状态码,这也是错误信息的一种。所以在我们之后写程序的过程中会大量的运用到request和respones。
1.3 web服务器有哪些
常见的web服务器有:
服务器名称 | 说明 |
---|---|
weblogic | 实现了javaEE规范,重量级服务器,又称为javaEE容器 |
websphereAS | 实现了javaEE规范,重量级服务器。 |
JBOSSAS | 实现了JavaEE规范,重量级服务器。免费的。 |
Tomcat | 实现了jsp/servlet规范,是一个轻量级服务器,开源免费。 |
如果是初学Java web基本上都是使用Tomcat作为Web Server
1.4 小结
在初学JavaWeb的时候很多人都搞不懂什么是Web服务器、tomcat是做什么用的,Jsp和Servlet到底是个啥。
那这三者的关系就是Web服务器就是实现HTTP协议的软件,软件有很多,Tomcat是其中的一个,而Tomca实现了Jsp/servlet规范。
Tomcat、Jsp/servlet就是后面要学习的内容了。
2 Tomcat
2.1 Tomca是什么?
通过对Web服务器的学习,我们知道Tomcat是一种Web服务器。如果我们想要通过浏览器输入网址(HTTP请求)就可以访问我们的Web程序,我们就要将我们的Web程序放到我们的服务器上,这样是我们常说的讲程序部署到服务器上。
2.2 部署和不部署有什么区别?
相信大家在学习Java Web前都学习过H5 CSS JS这些,当我们将这些代码写完想要打开看卡效果,一般在网页上都是这个前端代码的文件绝对路径。如果你想用另一台电脑看这个页面的话,你输入这个路径肯就找不到了。
而这和我们平时上网是有出入的,我们上网是只要电脑连接了网络就,输入网址就可以访问一个网站,这里的网址就是URL,这个网址就是一个HTTP请求。
而我们自己写的web程序部署带Tomcat以后会是怎么样的呢?
我们来解析一下这个URL:
localhost
表示的是服务器主机,因为是部署在自己的计算机上,所以是localhost
8888
表示的是端口号
端口号后面的是资源路径
2.3 输入一个url发生了什么
简单点回答过程是:
- DNS解析
- TCP连接
- 发送HTTP请求
- 服务器 HTTP 应答
- 浏览器解析渲染
- 连接结束
而Tomcat参与的就是服务器对HTTP进行应答,这个步骤有接受连接、解析请求数据包、处理请求和发送响应。
通过HTTP请求,Tomcat可以找到部署的应用、相应的资源,然后返回给浏览器。这里的部署的应用就是我们部署上去的Java web程序。也就是说Tomcat可以解析我们的部署的Java Web程序,而这种程序不是我们普通写的拥有main方法的Java程序,而是Servlet程序,这也是为什么在学习java Web的时候,Servlet是重点内容,同时Servlet也是很多Web框架的基础,基本上都是对Servlet进行封装。
2.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服务器会把响应发送给客户端