手记

深入分析Java Web-Servlet工作原理

前几篇已经详细介绍了 Java 的原理还有 JVM 的原理,但是一直没有去讲 Web ,也就是 Java 是如何与 Web 建立联系的,如果能将 Java 可以输出的内容,显示到网页上面, 或者将 Java 连接数据库,把数据库的内容输出到页面上,就是所谓的动态网站了。如果你已经学了HTML 标签,那么你应该知道,写好的网页文件,双击在浏览器打开,就可以看到页面了,在 Java 里有 扩展名为 .jsp 的文件,它可以写HTML标签,同时也可以嵌入 Java 代码实现 Java 与网页互动,但是 .jsp 页面是不能像普通的 .html 文件双击打开并显示的,需要一个“容器”,比如 Tomcat 也就是说我们想查看 .jsp 的真实面貌就要通过 Tomcat 才能看到,下面来讲讲 Tomcat 里 Servlet 容器是如何工作的。

Servlet

Servlet(Server Applet),全称Java Servlet,未有中文译文。 是用Java编写的服务器端程序。 其主要功能在于交互式地浏览和修改数据,生成动态Web内容。
以Tomcat 为例来介绍 Servlet 容器是如何管理 Servlet 的。

Tomcat 容器模型


一个Context 对应一个 Web 工程,也就是我们 Tomcat 文件夹里的 webapps 放入 Web 工程。

Servlet 容器的启动过程

重点关注 StandardContext 容器启动过程

init 方法主要完成以下工作

  • 创建用于解析 XML 配置文件的 contextDigester 对象。
  • 读取默认的 context.xml 配置文件,如果存在则解析它。
  • 读取默认的 Host 配置文件,如果存在则解析它。
  • 读取默认的 Context 自身的配置文件,如果存在则解析它。
  • 设置 Context 的 DocBase。

ContextConfig 的 init 方法完成后,Context 容器就会执行 startInternal 方法,这个方法的启动逻辑比较复杂,主要包括以下几部分。

  • 创建读取资源文件对象。
  • 创建 ClassLoader 对象。
  • 设置应用的工作目录。
  • 启动相关的辅助类,如 logger、realm、resources 等。
  • 修改启动状态,通知感兴趣的观察者(Web 应用的配置)
  • 子容器的初始化。
  • 获取 ServletContext 并设置必要的参数。
  • 初始化“load on startup” 的 Servlet。
0人推荐
随时随地看视频
慕课网APP