杰瑞科技汇

Tomcat与Java Web技术如何协同工作?

第一部分:Java Web 技术详解

Java Web 技术是使用 Java 语言来构建运行在 Web 服务器上的应用程序的技术总称,它的核心思想是客户端/服务器架构,客户端通过浏览器发送请求,服务器上的 Java 应用程序处理请求并返回响应(通常是 HTML 页面)。

Tomcat与Java Web技术如何协同工作?-图1
(图片来源网络,侵删)

核心概念

1 HTTP 协议

Web 应用的基石,它是一种应用层协议,定义了客户端(浏览器)和服务器之间如何通信。

  • 请求: 客户端向服务器发送数据,包含:
    • 请求方法: GET (获取数据), POST (提交数据), PUT (更新), DELETE (删除) 等。
    • 请求路径: /index.html, /api/users 等。
    • 请求头: Host, User-Agent, Content-Type 等,包含附加信息。
    • 请求体: 对于 POST 请求,通常包含提交的数据(如表单数据、JSON)。
  • 响应: 服务器向客户端返回数据,包含:
    • 状态码: 200 OK (成功), 404 Not Found (资源不存在), 500 Internal Server Error (服务器内部错误) 等。
    • 响应头: Content-Type (内容类型,如 text/html, application/json), Content-Length (内容长度) 等。
    • 响应体: 实际返回的内容,如 HTML 代码、JSON 数据、图片等。

2 Servlet (服务器小程序)

Servlet 是 Java Web 技术的核心,它是一个运行在 Web 服务器端的 Java 类,用于接收和响应来自客户端的 HTTP 请求。

  • 本质: 一个实现了 javax.servlet.Servlet 接口的 Java 类。
  • 生命周期:
    1. 加载和实例化: 服务器启动或第一次请求该 Servlet 时,加载并创建其实例。
    2. 初始化: 调用 init() 方法,只执行一次,用于完成一些初始化工作(如加载配置、建立数据库连接池)。
    3. 请求处理: 每次客户端请求时,服务器会创建一个新的 ServletRequestServletResponse 对象,然后调用该 Servlet 的 service() 方法。
    4. 销毁: 服务器关闭或应用被卸载时,调用 destroy() 方法,释放资源。
  • 工作流程:
    1. 浏览器发送一个 HTTP 请求到 Tomcat。
    2. Tomcat 解析请求,根据 web.xml 配置或注解找到对应的 Servlet。
    3. Tomcat 调用 Servlet 的 service() 方法,并将请求和响应对象作为参数传入。
    4. service() 方法(或更常用的 doGet()/doPost() 方法)中,开发者编写业务逻辑,处理请求,并生成响应内容。
    5. 写入 HttpServletResponse 对象。
    6. Tomcat 将 HttpServletResponse 对象转换成 HTTP 响应,发送回浏览器。

3 JSP (JavaServer Pages)

JSP 是一种用于创建动态网页的技术,它看起来像一个 HTML 文件,但其中可以嵌入 Java 代码。

  • 本质: 一个 Servlet,当 JSP 文件第一次被访问时,Tomcat 会将其翻译成一个 Java Servlet 文件(.java),然后编译.class 文件,之后就像处理普通 Servlet 一样处理它。
  • 核心元素:
    • HTML/XML 静态内容: 页面的骨架。
    • JSP 脚本元素:
      • 表达式: <%= ... %>:用于输出 Java 表达式的结果到页面上。
      • 脚本片段: <% ... %>:可以编写多行 Java 代码。
      • 声明: <%! ... %>:用于声明成员变量或方法。
    • JSP 动作标签: 如 <jsp:include>, <jsp:forward> 等。
    • JSP 内置对象: 9 个预定义的变量,可以直接在 JSP 中使用,如 request, response, session, application, out 等。

4 JSP 与 Servlet 的关系与分工

  • Servlet 的优势: 逻辑处理能力强,性能高(因为是纯 Java 代码)。
  • JSP 的优势: 页面表现能力强,便于美工设计(因为看起来像 HTML)。
  • 经典 MVC 模式:
    • Model (模型): JavaBean 或 POJO,封装数据和业务逻辑。
    • View (视图): JSP 页面,负责数据显示和用户交互。
    • Controller (控制器): Servlet,负责接收请求,调用 Model 处理业务逻辑,然后选择合适的 View 进行响应。
    • 流程: 用户请求 -> Controller -> 处理请求,调用 Model -> 将数据存入 request -> 转发到 JSP -> JSP 展示数据。

5 Filter (过滤器) 和 Listener (监听器)

  • Filter: 可以对请求进行拦截和预处理,也可以对响应进行后处理,常用于:
    • 字符编码统一: CharacterEncodingFilter
    • 权限验证: 检查用户是否登录。
    • 日志记录: 记录请求信息。
    • GZIP 压缩: 压缩响应内容。
  • Listener: 用于监听 Web 应用中某些对象的创建、销毁或属性变化事件,常用于:
    • ServletContextListener: 在 Web 应用启动和销毁时执行代码,常用于初始化数据库连接池、加载全局配置等。

第二部分:Tomcat 详解

Tomcat 是一个开源的、轻量级的 Web 应用服务器,也被称为 Catalina,它实现了 Java EE 中的 ServletJSP 规范,因此是运行 Java Web 应用的理想容器。

Tomcat与Java Web技术如何协同工作?-图2
(图片来源网络,侵删)

Tomcat 的核心架构

理解 Tomcat 的架构是掌握其精髓的关键,Tomcat 的核心组件是分层的,每个组件都有明确的职责。

  • Server (服务器): 代表整个 Tomcat 实例,一个 Server 可以包含一个或多个 Service。
  • Service (服务): 将一个或多个 Connector 与一个 Engine 关联起来,它将连接器(接收请求)和引擎(处理请求)组合在一起。
  • Connector (连接器): 负责接收和返回 HTTP 请求/响应,它是 Tomcat 与外部世界(如浏览器)交互的窗口,Tomcat 支持多种连接器,最常见的是 HTTP/1.1 连接器和 AJP 连接器(用于与 Apache/Nginx 等 Web 服务器集成)。
  • Engine (引擎): 处理 Service 中所有 Connector 接收到的请求,它是 Tomcat 的核心请求处理引擎,负责将请求传递给合适的 Host。
  • Host (虚拟主机): 代表一个虚拟主机,可以部署一个或多个 Web 应用。www.example.comapi.example.com 可以是两个不同的 Host。
  • Context (上下文): 代表一个 Web 应用,当你在 webapps 目录下放一个 WAR 包或一个文件夹时,Tomcat 就会为其创建一个 Context,Context 包含了该应用的所有 Servlet、JSP、静态资源和配置。
  • Wrapper (包装器): 代表一个 Servlet,它负责管理单个 Servlet 的生命周期(加载、初始化、调用、销毁)。

请求流程简述:

  1. 浏览器通过 HTTP 协议向 Tomcat 的 Connector 发送请求。
  2. Connector 将请求交给关联的 Engine
  3. Engine 根据 Host 头(如 Host: www.example.com)将请求交给对应的 Host
  4. Host 根据 URL 路径(如 /myapp/index.jsp)将请求交给对应的 Context (/myapp)。
  5. Context 根据 URL 路径(如 /index.jsp)找到对应的 Wrapper (即处理该请求的 Servlet)。
  6. Wrapper 调用 Servlet 实例的 service() 方法处理请求。
  7. 响应沿着相反的路径返回给浏览器。

部署 Java Web 应用到 Tomcat

最简单的方式是部署 WAR 包

  1. 打包: 使用 Maven 或 Gradle 等构建工具,将你的 Java Web 项目(包含 src/main/webapp 目录和 src/main/java 的代码)打包成一个 .war 文件。
  2. 部署: 将生成的 .war 文件
Tomcat与Java Web技术如何协同工作?-图3
(图片来源网络,侵删)
分享:
扫描分享到社交APP
上一篇
下一篇