凌峰创科服务平台

jsp引擎与tomcat服务器

Tomcat 是一个 Web 服务器,它内置了一个 JSP 引擎来处理 JSP 文件。

jsp引擎与tomcat服务器-图1
(图片来源网络,侵删)

为了更好地理解,我们先分别看看它们是什么,然后再将它们结合起来。


JSP (JavaServer Pages) 是什么?

JSP 本质上是一种技术规范,而不是一个具体的软件,它由 Sun Microsystems(现在的 Oracle)公司制定,用于简化动态网页的开发。

  • 目标:让网页设计师(前端)和 Java 开发者(后端)能够更好地协作,前端可以专注于 HTML/CSS/JavaScript 的展示,后端则可以嵌入 Java 代码来处理业务逻辑、数据库操作等。
  • 文件形式:一个 JSP 文件(.jsp 后缀)看起来像是一个普通的 HTML 文件,但它里面可以嵌入特殊的 JSP 标签、Java 代码片段、表达式等。
  • 工作原理:JSP 文件不能直接被浏览器运行,当用户第一次请求一个 JSP 页面时,服务器需要将其转换成一个 Java Servlet 文件,然后再由 Java 虚拟机编译成可执行的 .class 文件,这个编译后的 Servlet 才会真正被服务器执行,并生成 HTML 响应,最后发送给浏览器。

核心角色:JSP 引擎 负责完成“JSP 文件 -> Java Servlet -> .class 文件”这个转换和编译过程的程序,就叫做 JSP 引擎

常见的 JSP 引擎有:

jsp引擎与tomcat服务器-图2
(图片来源网络,侵删)
  • Apache Jasper:这是 Apache Tomcat 内置的、最常用的 JSP 引擎。
  • 其他应用服务器(如 IBM WebSphere, Oracle WebLogic)也都有自己的 JSP 引擎。

Tomcat 是什么?

Apache Tomcat 是一个开源的、轻量级的 Web 服务器,它实现了多个 Java EE(现在叫 Jakarta EE)规范中的核心部分,其中最重要的就是 ServletJSP 规范。

  • 身份:Tomcat 不仅仅是一个 Web 服务器,它更准确的身份是一个 “Web 容器”“Servlet 容器”
  • 核心功能
    1. 处理 HTTP 请求:接收来自浏览器的 HTTP 请求。
    2. 管理 Servlet:负责加载、初始化、调用和销毁 Servlet,Servlet 是 Java 编写的服务器端程序,是 Java Web 应用的基石。
    3. 提供运行环境:为 Java Web 应用提供一个独立的运行环境(包括 JVM、类加载器等)。

两者的关系与协作流程

现在我们把它们联系起来,Tomcat 作为 Web 容器,它内置了 JSP 引擎(主要是 Jasper),当你的 Web 应用中包含 JSP 文件时,Tomcat 就会调用其内置的 JSP 引擎来处理它们。

下面是一个完整的请求处理流程,假设我们有一个 index.jsp 文件:

第一次请求 index.jsp 时的流程:

jsp引擎与tomcat服务器-图3
(图片来源网络,侵删)
  1. 浏览器发起请求: 用户在浏览器中输入 http://localhost:8080/myapp/index.jsp,向 Tomcat 服务器发送请求。

  2. Tomcat 接收请求: Tomcat 的连接器(Connector)接收到这个 HTTP 请求。

  3. 请求分发到 JSP 引擎: Tomcat 的 Servlet 容器检查 web.xml(或注解),发现 index.jsp 是一个 JSP 页面,它不会直接查找一个名为 index_jsp 的 Servlet,而是将这个请求转发给内置的 JSP 引擎(Jasper)

  4. JSP 引擎进行转换和编译

    • 转换:JSP 引擎读取 index.jsp 文件,将其中的 HTML、JSP 标签、Java 代码等转换成一个完整的 Java Servlet 源代码文件(index_jsp.java),这个转换后的 Servlet 类通常会继承一个名为 HttpJspBase 的基类。
    • 编译:JSP 引擎调用 Java 编译器(javac)将 index_jsp.java 文件编译成一个可执行的字节码文件 index_jsp.class
  5. 加载和执行 Servlet

    • Tomcat 的类加载器加载这个新生成的 index_jsp.class 文件。
    • Tomcat 创建这个 Servlet 类的一个实例,并调用其 service() 方法来执行,在执行过程中,JSP 页面中嵌入的 Java 代码会被执行,可能访问数据库、调用业务逻辑等。
    • Servlet 执行完毕后,生成最终的纯 HTML 内容。
  6. 返回响应: Tomcat 将这个 HTML 响应通过 HTTP 协议发送回浏览器,浏览器解析并显示这个页面。

后续请求 index.jsp 时的流程:

  • Tomcat 会检查 index.jsp 文件是否被修改过。
  • index.jsp 没有被修改,Tomcat 会直接加载并执行之前已经编译好的 index_jsp.class 文件,跳过转换和编译的步骤,大大提高了响应速度。
  • index.jsp 文件被修改了,Tomcat 会认为这是一个“新”的 JSP 文件,会重复执行第 4 步的转换和编译过程,然后再执行。

一个生动的比喻

为了让你更形象地理解,我们可以做一个比喻:

  • Tomcat:像一个餐厅,它负责接待顾客(浏览器请求),提供用餐环境(运行环境),并且最终把做好的菜(HTTP响应)端给顾客。
  • JSP 文件:像一份带有特殊标记的菜谱,菜谱本身不能直接吃,上面写着“加入 50g 盐(Java代码)”、“用中火炒 5 分钟(JSP动作)”。
  • JSP 引擎:像餐厅里的主厨或厨房,他拿到这份特殊的菜谱后,会把它翻译成一份标准的、厨师能看懂的详细步骤单(Java Servlet 源代码),然后厨房的厨师(JVM编译器)根据这份步骤单做出最终的菜肴(.class 文件)。
  • Servlet:像厨房里最终做菜的厨师,他拿到标准步骤单后,直接开始烹饪,做出美味的菜肴(HTML响应)。

整个流程是:顾客(浏览器)向餐厅(Tomcat)点了一份特殊菜谱(JSP)做的菜 -> 餐厅把菜谱交给厨房(JSP引擎) -> 厨房翻译菜谱、准备食材 -> 厨师(Servlet)烹饪 -> 最后把菜(HTML)端给顾客。


特性 JSP 引擎 Tomcat 服务器
本质 一个软件组件程序,遵循 JSP 规范。 一个完整的 Web 应用服务器(Web 容器)。
功能 负责将 JSP 文件转换成 Java Servlet 源码,并编译.class 文件。 接收 HTTP 请求,管理 Servlet 的生命周期,为 Web 应用提供运行环境。
关系 Tomcat 内置并使用了 JSP 引擎(如 Jasper),JSP 引擎是 Tomcat 处理 JSP 功能的核心部分。 Tomcat 是 JSP 引擎的“宿主”和“管理者”,没有 Tomcat 这样的容器,JSP 引擎无法独立工作。
独立性 JSP 引擎不能单独存在,它必须嵌入到一个 Servlet 容器(如 Tomcat)中。 Tomcat 是一个独立的产品,它包含了 Servlet 容器和 JSP 引擎,可以单独部署和运行。

简而言之,JSP 引擎是 Tomcat 实现其 JSP 处理能力的“心脏”,而 Tomcat 则是为这个“心脏”提供全身机能的“身体”,两者紧密协作,共同构成了一个强大而灵活的 Java Web 开发和运行平台。

分享:
扫描分享到社交APP
上一篇
下一篇