Web服务器与Servlet容器
往常看博客的过程中,总会看到Web容器,web容器,Servlet容器总搞不清楚它们到底是啥东西,是个什么关系。以前总觉得这些东西非常高端,所以最近就在空闲时间抽空好好查阅了一下资料,整理出本文对进行系统的学习。
博客上不同的人有不同的叫法,有的人叫做Web容器,有的人叫做web服务器,这两个东西大致指的是同一个东西。我认为web服务器更符合规范一点,并且更容易和Servlet容器区分开来,所以本文中统一称为web服务器。
在学习过程中,我们可以将抽象的东西具体化,就会好理解很多了。我们将网页使用过程中的一些静态资源想象成为电视频道(没有动态内容,我们只能被迫接受一样的内容),将静态资源想象成可以在电视上玩的游戏(具有动态内容,我们能够人为操作),这样一来我们就可以将web容器想象成电视,而Servlet容器想象成switch。买不起switch咱照样可以看电视,但是如果买了switch却没有电视那不是白给。
web服务器
用户通过浏览器向web服务器发送HTTP请求,web服务器解析HTTP请求将请求路径的文件返回给浏览器,浏览器再将文件渲染给用户查看。
简单来说Web服务器是指提供web服务的软件或主机,主要返回服务端的静态文件的。
作用
- 管理和布置web应用
- 响应针对静态页面或图片的请求
- 将动态请求委托给其他程序(Servlet容器、CGI等等技术)
Servlet容器
如果浏览器中请求的是动态资源的话,web服务器就无法处理了。所以前辈就开发了Server Applet(Servlet)来对动态请求进行处理返回动态资源。
往往一个web应用中会有非常多的Servlet,如果让开发人员自己手动来对如此多的Servlet手动管理它们的生命周期,业务逻辑,通信方式的话,估计就没人做web开发了吧。
所有就有大神帮我们实现了一套叫做Servlet容器的东西来统一加载和管理Servlet。
这样一来HTTP服务器不直接跟servlet打交道,而是把请求交给Servlet容器去处理,Servlet容器会将请求转发到具体的Servlet,如果这个Servlet还没创建,就加载并实例化这个Servlet,然后调用这个Servlet的接口方法。
因此Servlet接口其实是Servlet容器跟具体业务类之间的接口,这样做的话就达到了HTTP服务器与业务类解耦的目的,简化了开发过程。
作用
- 管理业务类(Servlet)
- 负责加载类、实例化和初始化Servlet
- 调用Servlet的service方法提供服务
- 管理Servlet实例的垃圾回收
- 管理Servlet之间的共同资源(servletContext)
- 处理动态请求
- 解析包装请求
- 调用某个Servlet
- 将Servlet的执行结果返回给请求端
- 多线程
- 自动为它所接收的每个Servlet请求创建一个新的java线程
- 但是也会出现线程安全问题
- 实现简便安全
- 使用xml部署描述文件来配置和修改安全性
- JSP支持
- 负责将jsp代码翻译为真正的java代码
- 管理通信
- 负责管理servlet与web服务器之间的通信
如果对这篇文章感兴趣,想学习更多的技术,也可以关注我的个人微信公众号。里面会不定期分享一些学习积累技术文章,同时也会有一些碎碎念的日常博文,笔芯!
参考文章
web容器与servlet容器的区别
Web容器、Servlet容器、Spring容器、SpringMVC容器之间的关系