据课程需要,进行复习。
概述是为了更好整理过程,从历史发展的角度来铺开知识点。
基本概念
Java SE(Standard Edition)
Java SE(Java Standard Edition)是 Java 的基础开发平台,就像 Python 的标准库一样,提供了编写 Java 程序所需的核心功能,包括基本语法支持、集合、输入输出、网络、多线程等常用工具。所有 Java 程序都离不开 Java SE,它是整个 Java 技术体系的根基。
Java EE (Java Platform, Enterprise Edition)
Java EE(现称 Jakarta EE)是一套专为构建大型企业级应用设计的标准平台,基于 Java SE,提供了开发 Web 应用、分布式系统和企业服务所需的规范和接口,帮助开发者快速搭建安全、可扩展的业务系统。
作为规范,其提供的是一套标准,类似于C++11 语言标准需要各种 编译器作为遵守者去实现,Java EE的遵守者是GlassFish,WildFly等应用服务器。
Web 容器
Web 容器是 Java Web 应用的运行环境,负责处理基于 Servlet 和 JSP 的请求,如请求转发、会话管理、Servlet 生命周期管理等。它实现的是 Java EE 规范中的 Web 部分,例如 Tomcat 就是常见的 Web 容器。
Tomcat
Tomcat 是一个开源的 Java Web 服务器和 Servlet 容器,主要负责运行基于 Java Servlet 和 JSP 的 Web 应用。它轻量、易用,广泛用于中小型网站和应用的开发与部署。 他不算是Java EE的完整实现者,他只实现了Java EE中的部分规范,主要是Servlet 与 JSP的规范实现
初期:Servlet 与 JSP —— 动态网页的起点
技术背景:HTTP 协议 + 静态 HTML 无法满足用户交互和动态数据展示需求。
产生了用 Java 编写动态 Web 服务,专注于业务逻辑和请求处理的需求
Servlet
最早由 Sun Microsystems 在 1997-1998 年间提出,作为 Java EE(当时叫 J2EE)的一部分,旨在替代早期的 CGI。
Servlet 是一个 Java 类,在 Java 以对象为中心的编程理念下,处理一个 HTTP 请求的完整流程也交由一个 Servlet 对象完成。当用户发起请求时,Web 容器(如 Tomcat)会将请求封装成 HttpServletRequest
对象,连同响应对象 HttpServletResponse
一并传递给 Servlet。开发者通过重写 doGet()
或 doPost()
方法,实现业务逻辑和页面输出。
Servlet 具有明确的生命周期,包括:
init()
:初始化方法,在 Servlet 第一次被加载时调用;service()
:核心处理方法,自动分发请求到doGet()
、doPost()
等方法;destroy()
:销毁方法,用于释放资源。
不足之处
Servlet 编程方式虽然逻辑清晰,但页面输出需要通过 response.getWriter().write(...)
手动拼接 HTML 字符串,极不直观,代码混杂了业务逻辑与页面结构,导致维护成本高。
这时,JSP 应运而生——
JSP(JavaServer Pages)
为了解决 Servlet 在输出 HTML 时存在的“代码与页面混写、可读性差”的问题,Sun Microsystems 在 1999 年提出了 JSP(JavaServer Pages)技术。
JSP 的核心思想是:以 HTML 为主,Java 代码为辅。开发者可以直接在 HTML 页面中嵌入 Java 脚本逻辑,通过特殊的标签(如 <% ... %>
)处理数据、控制流程,最终动态生成网页内容。
JSP 的运行原理
JSP 本质上也是一种 Servlet。第一次访问 JSP 页面时,Web 容器会将 JSP 编译为 Servlet 类,随后通过 Servlet 的方式进行执行。这一过程如下:
- JSP → 转换为 Java Servlet 源码;
- Java 文件 → 编译为
.class
字节码; - 加载 Servlet 类,执行
service()
方法,生成响应。
因此,JSP 是对 Servlet 的一种封装和扩展,更偏向于“前端视图层”的模板语言,是 Servlet 的语法糖。
不足之处
逻辑复杂时容易造成“HTML + Java 混杂”,难以维护、难以分层,代码重复,对于大型项目,不利于团队协作和分工。
为了解决这些问题,MVC 架构逐渐被引入 Java Web 开发中,Servlet 负责控制,JSP 负责视图,二者分工明确;而随着框架的演进,如 Struts、Spring MVC、JSF 的出现,JSP 逐渐退出主流视图层技术的舞台。
中期:MVC 架构与 Web 框架的崛起 —— 分层解耦的开始
随着 Java Web 项目的复杂度提升,单纯依赖 Servlet 和 JSP 编写业务逻辑与页面,导致代码耦合严重、开发效率低下、协作困难。想修改一个功能可能要牵扯大量的代码。
为了更好地组织代码、提高可维护性,MVC(Model-View-Controller)架构模式逐渐成为主流。
MVC 模式在 Java Web 中的体现
- Model(模型层):表示业务逻辑与数据,如 JavaBean、DAO、数据库访问层;
- View(视图层):负责页面展示,通常由 JSP 实现;
- Controller(控制层):接收请求,调用模型,选择视图,通常由 Servlet 或框架提供的控制器类完成。
这种模式将表示层和业务逻辑层解耦,推动了更清晰的分工:前端工程师专注于 JSP 页面,后端开发者专注于逻辑控制与数据处理。
Struts(2000年左右)
Struts 是 Apache 基金会于 2000 年左右推出的一个早期 Java Web MVC 框架,基于 Servlet 和 JSP 构建,解决了 Java Web 项目中控制层组织混乱、逻辑分离困难的问题。
- 基于 Servlet 与 JSP 之上,定义 XML 配置文件统一管理控制器;
- 提供标签库(Taglib)封装 JSP 页面中的 Java 逻辑;
- 后期因过度依赖配置、扩展性差逐渐衰落。
Struts2(Apache Struts 2)
Struts2 是对 Struts1 的彻底重构,基于 WebWork 框架二次开发,2007 年后成为 Struts 的主线版本,已经不是 Struts1 的升级,而是全新的框架。
- 基于 拦截器机制,取代原有 ActionForm 和 Servlet API;
- 简化了配置和开发过程,支持注解式开发;
- 更强的表达式语言(OGNL);
- 提供更灵活的参数绑定和类型转换;
- 更易与 Spring 等框架集成。
Spring MVC(2003年起)
- 属于 Spring Framework 的核心子项目;
- 简洁的注解驱动控制器(
@Controller
+@RequestMapping
); - 支持 RESTful 风格、模板引擎(JSP, Thymeleaf 等);
- 到今天依然是 Java Web 开发的核心框架之一。
现代:Spring Boot 与轻量级 Web 架构 —— 开发效率的飞跃
进入 2010 年代,传统 Java Web 项目面临着新的挑战:
- 配置繁琐:XML 文件配置量大、开发门槛高;
- 启动缓慢:传统 Java EE 容器(如 GlassFish)部署慢、运行重;
- 不适应微服务架构:项目拆分困难、部署复杂。
在这种背景下,Spring Boot 于 2014 年发布,成为 Java Web 开发的新主流。
Spring Boot:约定优于配置的轻量框架
Spring Boot 以“开箱即用、自动配置、内嵌容器”为核心理念,简化了传统 Spring 应用的开发流程。
- 零 XML 配置:使用注解和自动配置类代替冗长的 XML;
- 内嵌服务器:自带 Tomcat、Jetty、Undertow,可直接运行为独立应用;
- Starter 模块:按需引入功能模块(如
spring-boot-starter-web
); - 集成监控、热部署、测试等工具;
- 天然支持微服务,可与 Spring Cloud 无缝结合。
Spring Boot 保留了 Spring MVC 的核心(如控制器、依赖注入等),但对开发体验进行了极大简化,使 Java Web 项目更符合现代开发节奏。
向微服务演进:Spring Boot + Spring Cloud
随着项目规模扩大与服务化需求增长,微服务架构成为趋势。Spring Boot 成为服务基础,Spring Cloud 提供分布式支持(如注册发现、配置中心、断路器等)。
Java Web 技术也从早期的“单体应用 + JSP 页面”转向现代“后端服务 + 前端分离(如 Vue/React)”的开发模式。
总结:Java Web 的技术演进路线
阶段 | 技术核心 | 特点 |
---|---|---|
初期 | Servlet, JSP | 实现动态网页,逻辑与视图混杂 |
中期 | MVC 框架(Struts, Spring MVC) | 分层解耦,适应大型项目 |
现代 | Spring Boot, REST, 微服务 | 开箱即用、自动配置、服务化架构 |