我的Java Web之路 - Servlet(2)- 核心原理

本系列文章旨在记录和总结自己在Java Web开发之路上的知识点、经验、问题和思考,希望能帮助更多码农和想成为码农的人。本文转发自头条号【普通的码农】的文章,大家可以关注一下,直接在今日头条的移动端APP中阅读。因为平台不同,会出现有些格式、图片、链接无效方面的问题,我尽量保持一致。

文章目录

    • 介绍
    • Servlet核心原理
    • Servlet的物理构件
    • Servlet规范
    • 总结

介绍

前面我们介绍了基于Servlet技术的Spring MVC,以及更早的文章中使用Servlet技术开发出我们的第一个Java Web应用。现在是时候全面的介绍一下Servlet技术了。
当然,之前提到过Java Web开发就是Servlet的开发。其实这有点不太准确,Java Web涉及的技术还有不少,比如JSP(实际上也是基于Servlet的)、JSF、Java WebSocket、Java中的Web服务API等等。只不过Servlet技术是基石,所以有此一说,而且Web开发本身就包括前端(HTML、CSS、JavaScript)和后端开发,Servlet只是属于后端开发。
Servlet实际上翻译成中文是服务端小程序的意思,前缀Serv是Server,名词后缀-let来源于中古法语或拉丁语,表示小、微小的意思。比如:
• booklet [book 书 + -let 后缀表示小 → 很小的书→] 小册子
• bullet [bull =法文boule 球 + -let 后缀表示小→ 球一样的小东西→] 子弹
• cutlet [cut 切 + -let 后缀表示小 → 切成小块的东西→] 供烧烤或煎炸的薄肉片
可以看到,英语还是蛮有意思的,知道了一些词根或后缀以后记忆单词也容易许多。
感觉有点跑题了,Java里面还有一个技术叫Applet,就是应用小程序,这个是指在浏览器端执行的Java代码,暂且不细说。

Servlet核心原理

要讲清楚Servlet的核心原理,就必须知道Servlet是如何来的,它解决了什么问题。
Servlet技术是Sun公司于1996年发布的,它和早期的CGI(Common Gateway Interface,公共/通用网关接口)都是为了能够根据用户的请求生成动态的Web内容(而不是静态的所有用户都相同的网页)。
可以说,静态Web只是相同信息的展示:
我的Java Web之路 - Servlet(2)- 核心原理_第1张图片
而动态Web还能跟用户进行交互获取特定于用户的信息:
我的Java Web之路 - Servlet(2)- 核心原理_第2张图片
当然,动态Web和静态Web也可以结合起来,现实往往也需要这样,因为很多信息都是在某段较长时间内是固定不变的,这部分信息使用静态Web技术即可;而特定于用户或其他方面的信息都是不同的,它们需要动态Web页面。
那为什么还需要Servlet技术呢?答案就在于CGI的技术实现是Web服务器每次处理请求都要启动一个新的进程来执行CGI程序,因此会耗费大量系统资源;
我的Java Web之路 - Servlet(2)- 核心原理_第3张图片
而Servlet技术采用线程来处理每一个请求,Servlet加载一次之后会常驻于内存,从而有着更好的性能,更好的可扩展性。
我的Java Web之路 - Servlet(2)- 核心原理_第4张图片
没错,Servlet的核心原理就是这么简单,从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器,甚至Web服务器和Servlet容器合二为一了。

Servlet的物理构件

从上面的讨论中可以得知,Servlet的物理构件主要有两个部分:
• Servlet容器:主要就是用于加载、创建、管理Servlet,将用户的请求根据配置分派到某个Servlet来处理,当然都是通过线程来执行Servlet的业务逻辑。我们之前使用的Tomcat就是一个Servlet容器,同时也是一个Web服务器。
• Servlet API:当然是为了提供给业务开发人员扩展业务功能而使用的,主要包括三大系列的组件:Servlet、Listener(监听器)、Filter(过滤器)。Servlet容器通过调用Servlet API来处理请求。
• 基于Servlet API扩展的Java代码:这就是我们需要编写的,实现我们的业务功能的,扩展自Servlet API的代码了。

Servlet规范

事实上,Servlet规范包括了很多内容,它由一个叫做JCP(Java Community Process)的开放的国际组织来制定和维护。
JCP也是Sun公司1995年始创的。百度百科里面这样描述JCP:
JCP维护的规范包括J2ME、J2SE、J2EE,XML,OSS,JAIN等。组织成员可以提交JSR(Java Specification Requests),通过特定程序以后,进入到下一版本的规范里面。
我们可以登录JCP官网(https://jcp.org/en/home/index)下载Servlet规范:
我的Java Web之路 - Servlet(2)- 核心原理_第5张图片
在上图中红色圆圈中输入servlet,点击GO按钮,查看搜索结果页面:
我的Java Web之路 - Servlet(2)- 核心原理_第6张图片
可以看到搜索结果有多项,找到最新版本的Servlet规范,截止到撰写本文之时最新版本是2017-09-05发布的4.0版本,状态是最终发布(Final Release),点击红色箭头所指的Download page,进入下载页面:
我的Java Web之路 - Servlet(2)- 核心原理_第7张图片
选择红色圆圈中的(上面是用于评估的),点击DOWNLOAD按钮,进入下载页面:
我的Java Web之路 - Servlet(2)- 核心原理_第8张图片
我们必须接受授权协议,点击上面的红色箭头所指即可,然后点击下面的红色箭头所指的链接,先在浏览器中打开该文档(可能这步取决于使用的浏览器及其配置):
我的Java Web之路 - Servlet(2)- 核心原理_第9张图片
我们需要等待一段时间,当文档全部加载完毕后出现红色箭头所指的按钮,点击该按钮即可保存到指定的本地目录。
我们可以打开Servlet规范看一看,内容很多,主要包括(经过归纳后):
• 以Servlet为中心的Servlet、Context、Request、Response、Config等接口;
• 过滤器Filter;
• 会话Session;
• 生命周期事件监听器Listener,事实上,上面各个组件都有自己对应的若干事件的监听器,这里单独把监听器拿出来;
• 请求的分派;
• 请求的映射;
• 安全相关;
• 部署描述符;
• 等等,还有异步处理、Servlet的动态加载没有单独划分出来。

总结

• Servlet的核心原理就是采用线程来执行Servlet的业务逻辑,可以理解为Servlet容器最核心的就是一个线程池。

你可能感兴趣的:(Servlet,Java,Web,Servlet)