理清Servlet、Tomcat、web服务器关系
一、什么是Web服务器?
Web
服务器的作用说穿了就是:将某个主机上的资源映射为一个URL
供外界访问。
问:我们如何能通过Web服务器映射的URL访问资源?
经过以下步骤:
- 接收请求
- 处理请求
- 响应请求
于是把接收和响应两个步骤抽取成: Web服务器,
但处理请求的逻辑是不同的,抽取出来做成 Servlet,交给程序员自己编写。
但是 Servlet 并不擅长往浏览器输出HTML页面,所以出现了JSP。
等Spring家族出现后,Servlet开始退居幕后,取而代之的是方便的 SpringMVC。
二、什么是 Servlet容器?
Servlet容器,顾名思义里面存放着 Servlet对象。
1. Servlet是啥?
很简单,是一组接口,接口的作用是什么?规范
servlet接口定义的是一套处理网络请求的规范,实现
- 你初始化时要做什么?
- 你销毀时要做什么?
- 你接受到请求时要做什么?————
service()
2. Servlet不会直接和客户端打交道!
那请求怎么来到servlet
呢?答案是servlet
容器。
比如我们最常用的tomcat
,必须把servlet
部署到一个容器中,不然servlet
不会起作用。
3. tomcat才是与客户端直接打交道的家伙
Tomcat
监听了端口- 请求过来后,根据url等信息,确定要将请求交给哪个
servlet
去处理 - 调用那个
servlet
的service
方法,service
方法返回一个response
对象 tomcat
再把这个response
返回给客户端。
三、Tomcat = web服务器 + Servlet容器
1. Servlet的五个方法,最难的地方在于形参
然而 Tomcat
会事先把形参对象封装好传给我们。
我们不需要写TCP连接数据库、解析HTTP请求、结果转成HTP响应,这些原始的、底层的解析、连接。
2. Servlet是个接口
实现类只是个空壳,我们写点业务逻辑就好了。
进入Tomcat
阶段后,我们开始全面面向接口编程。
3. 总的来说
Tomcat
已经替我们完成了所有底层抽象操作,并且传入三个对象
ServletConfig
、 ServletRequest
、 ServletResponse
四、Servlet中各类的关系
1.Tomcat中传过来的各参数
1.1 ServletConfig:
web.xml
中的配置直接经过dom4j
解析xml
得到对象,打包给我们
1.2 Request:
HTTP
请求到了Tomcat
后,Tomca
t通过字符串解析,把各个请求头( Header
),
请求地址(URL
),请求参数( Query String
)都封装进了Request
对象中。
1.3 Response:
Servlet
逻辑处理后得到结果,最终通过 response. write()
方法,将结果写入 response
内部的缓冲区。 Tomcat
会在 servlet
处理结束后,拿到response
,遍历里面的信息,组装成HTTP
响应发给客户端。
2.Servlet接口5个方法
2.1 init()、 service()、 destroy()
是生命周期方法。
init和 destroy
各自只执1次,即 servlet
创建和销毀时。
而 service
会在每次有新请求到来时被调用。
也就是说,我们主要的业务代码需要写在 service中,但是,浏览器发送请求最基本的有两种:Get/Post
,于是我们必须在里面区分请求写处理逻辑。
- 在
Servlet
基础之上抽象类Genericservlet
对其进行改良。但是依旧没有实现service
方法 - 于是抽象类
HttpServlet
继承Genericservlet
,实现service
的get、post
方法区分
2.2 Httpservlet
虽然在 service()
中帮我们写了请求方式的判断。
但是针对每一种请求,业务逻辑代码是不同的, HttpServlet
无法知晓子类想干嘛,所以写成抽象类,要求实现doGet()、doPost()
两个方法,当子类重写该方法,整个业务代码就活了
五、参考:
感谢:文章