java-web/docs/chapter04.md

463 lines
25 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 4. 基于Java的Web应用后端开发技术
### 4.1 Web应用的系统架构介绍(了解)
#### 4.1.1 应用系统架构演进
- **单体架构**:
- **定义**: 单体架构是指将Web应用的所有功能集成在一个单一的应用程序中通常部署为单一的服务单元。
- **优点**: 开发简单,部署方便。
- **缺点**: 扩展性差,维护困难,部署更新时需要重启整个应用。
- **客户端/服务器架构 (C/S)**:
- **定义**: 架构模式将应用分为客户端和服务器两端,客户端负责展示和用户交互,服务器端负责数据处理和存储。
- **优点**: 强交互性,数据安全。
- **缺点**: 需要客户端软件,维护成本高。
- **浏览器/服务器架构 (B/S)**:
- **定义**: 用户通过浏览器访问服务器资源,所有的应用逻辑均在服务器端执行。
- **优点**: 跨平台,易于维护和升级。
- **缺点**: 过度依赖客户端浏览器和网络环境。
- **微服务架构**:
- **定义**: 将复杂应用拆解为一组小型、松散耦合的服务,每个服务围绕特定业务功能构建,可以独立部署和扩展。
- **优点**: 高度模块化,易于开发和维护,服务可独立扩展。
- **缺点**: 管理复杂性增加,需要有效的服务间通信和管理策略。
#### 4.1.2 服务器端渲染与客户端渲染
- **服务器端渲染 (SSR)**:
- **定义**: 服务器处理请求时生成完整的HTML内容然后发送给客户端。
- **优点**: 有利于SEO首屏加载速度快。
- **缺点**: 服务器负载增加,对动态内容响应较慢。
- **客户端渲染 (CSR)**:
- **定义**: 应用的初始加载只请求必要的数据然后客户端JavaScript动态生成页面内容。
- **优点**: 减轻服务器负担,交互响应快。
- **缺点**: SEO效果不佳首屏加载速度依赖于客户端性能。
- **两者的区别**:
- **SEO**: SSR 有利于SEOCSR 通过预渲染或服务端渲染来改善。
- **性能**: SSR 提供更快的首屏加载CSR 交互更流畅。
- **用户体验**: CSR 可以提供更流畅的用户交互SSR 用户体验取决于网络和服务器性能。
- **服务器负载**: SSR 可能增加服务器负载CSR 主要负载在客户端。
### 4.2 MVC设计模式掌握
参考[MVC&&JavaBean(PPT)](./resources/JavaBean与JSP开发模型.pptx)
#### 4.2.1 MVC概念
> MVCModel-View-Controller是一种强调分离软件的业务逻辑和显示的软件设计模式。这种模式的核心在于实现关注点的分离即将应用程序分为三个核心组件模型Model、视图View和控制器Controller
![](./resources/imgs/mvc.png)
#### 4.2.2 视图层、业务逻辑层和数据访问层的职责划分
- **模型 (Model)**:
- 封装数据和业务规则。
- 通知视图数据变更。
- 可以包含数据访问对象 (DAO) 和业务逻辑类。
> 模型是应用程序中用于处理数据逻辑的部分。它直接管理数据、逻辑和规则,并提供数据访问的接口。模型不依赖于视图和控制器,即它不关心数据将如何被显示或操作。
- **视图 (View)**:
- 显示数据给用户。
- 可以是JSP、HTML页面或使用模板引擎生成的页面。
- 接收用户输入并传递给控制器。
> 视图是应用程序中用于数据显示的部分。它实现了模型中数据的可视化。
- **控制器 (Controller)**:
- 接收并解析用户输入。
- 调用模型处理业务逻辑。
- 选择视图并向用户展示结果。
> 控制器是模型和视图之间的协调者。它接收用户的输入,并调用模型和视图去完成用户的请求。控制器的存在使得视图与模型能够分离.
#### 4.2.3 使用MVC模式的优点
- **分离关注点**: 将数据处理、业务逻辑和用户界面分离,降低耦合度。
- **提高可维护性**: 各层独立更新,易于定位问题和维护。
- **增强可测试性**: 每一层可以独立进行单元测试和集成测试。
- **提升可扩展性**: 可以独立扩展应用的某一部分而不影响其他部分。
- **促进代码复用**: 视图和控制器可以独立于模型变化,模型可以被多个视图重用。
#### 4.2.4 MVC模式的实现
- **框架支持**: 许多Web应用开发框架都支持比如spring mvc。
示例典型的MVC模式的实现jsp+servlet+javabean
![](./resources/imgs/jsp_javabean_mvc.jpg)
- JavaBean作为模型既可以作为数据模型来封装业务数据又可以作为业务逻辑模型来包含应用的业务操作。其中数据模型用来存储或传递业务数据而业务逻辑模型接收到控制器传过来的模型更新请求后执行特定的业务逻辑处理然后返回相应的执行结果。
- JSP作为视图层负责提供页面为用户展示数据提供相应的表单Form来用于用户的请求并在适当的时候点击按钮向控制器发出请求来请求模型进行更新。
- Servlet作为控制器用来接收用户提交的请求然后获取请求中的数据将之转换为业务模型需要的数据模型然后调用业务模型相应的业务方法进行更新同时根据业务执行结果来选择要返回的视图。
### 4.3 Servlet基础知识
#### 4.3.1 JavaBean技术(掌握)
参考[MVC&&JavaBean(PPT)](./resources/JavaBean与JSP开发模型.pptx)
- **定义**: JavaBean是一种符合特定规范的Java类用于封装数据和行为。这些类通常用于表示简单的数据容器或小型应用程序组件。JavaBean的设计旨在方便集成到各种Java应用中特别是在Java Web应用中作为数据传输对象Data Transfer Objects, DTOs
- **特点**:
- **公共无参构造器**: JavaBean必须有一个公共的无参数构造器这样它们可以被反射创建。
- **属性**: JavaBean的属性应该通过标准的getter和setter方法暴露。属性名一般遵循驼峰命名规则例如`firstName`的getter方法为`getFirstName()`setter方法为`setFirstName(String firstName)`。
- **序列化**: JavaBean通常是可以序列化的这意味着它们可以通过实现`Serializable`接口来保存状态或者在网络间传输。
- **简单**: JavaBean通常不包含复杂的业务逻辑而是专注于数据的存储和检索。
- **使用场景**:
- **数据传输对象**: 在Web应用中JavaBeans常被用来封装从数据库或其他数据源获取的数据然后传递给视图层进行展示。
- **配置文件**: JavaBeans可以用作配置文件的模型例如在Spring框架中JavaBeans可以用来表示XML配置文件中的bean定义。
- **表单绑定**: 在Web应用中JavaBeans可以用来绑定表单数据简化数据的处理过程。
- **组件**: JavaBeans可以用作桌面应用中的组件如Swing组件就是基于JavaBean规范设计的。
- **示例**: 下面是一个简单的JavaBean示例用于表示一个用户对象
```java
public class User implements Serializable {
private String name;
private int age;
// 公共无参构造器
public User() {}
// Getter and Setter 方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
```
这个简单的`User`类遵循了JavaBean的规范拥有两个属性`name`和`age`以及对应的getter和setter方法。
- **总结**: JavaBean作为一种标准化的Java类为数据的封装和组件的重用提供了便利。在Java Web开发中JavaBeans常被用来处理数据传输和表单绑定的任务是构建MVC架构的重要组成部分。
#### 4.3.2 Servlet基本概念(掌握)
**Servlet 的基本概念**
- **定义:** ServletJava Servlet的简称是一种基于Java的Web组件它运行在服务器端用于接收客户端通常是Web浏览器的请求、处理这些请求并生成响应。Servlet遵循特定的Java API这些API定义了Servlet必须实现的方法和行为。Servlet通常用于处理HTTP协议的请求和响应但也可以处理其他类型的请求。
- **生命周期:** Servlet 的生命周期包括初始化、服务请求和销毁三个阶段。Servlet 初始化时,容器会调用其 init() 方法;当请求到来时,容器会调用其 service() 或者 doGet(), doPost() 等方法;当 Servlet 不再需要时,容器会调用其 destroy() 方法。
- **继承关系**: Servlet 类通常需要继承 javax.servlet.http.HttpServlet 类,并重写其中的 doGet() 或 doPost() 等方法来处理具体的 HTTP 请求。也可以直接实现 javax.servlet.Servlet 接口,但这在实际开发中较少见。
**Servlet的主要特点包括**
* 基于JavaServlet是用Java语言编写的并且运行在支持Java的Web服务器或应用服务器上。
* 遵循Servlet APIServlet实现了javax.servlet包中的Servlet接口这个接口定义了所有Servlet必须遵守的生命周期方法如init(), service(), destroy()等。
* 处理HTTP请求Servlet主要用于处理HTTP请求如GET、POST、PUT、DELETE等但也可以处理其他类型的请求。
* 生成HTTP响应Servlet可以生成HTTP响应包括响应头、状态码和响应体。
* 运行在Web容器中Servlet运行在Web容器如Apache Tomcat、Jetty、WildFly这些容器管理Servlet的生命周期并负责将客户端请求路由到相应的Servlet。
* 可扩展性Servlet API支持过滤器Filters、监听器Listeners和其他中间件组件这些组件可以与Servlet一起工作提供请求处理、事件处理和应用生命周期管理等功能。
* 平台无关性由于Servlet是基于Java的因此可以在任何支持Java的平台上运行实现了跨平台的特性。
#### 4.3.3 Servlet示例 (了解)
- **示例**: 创建一个处理表单提交的Servlet。
```java
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
String username = request.getParameter("username");
String password = request.getParameter("password");
// 验证用户名和密码
if ("expectedUser".equals(username) && "expectedPassword".equals(password)) {
response.getWriter().write("Login successful!");
} else {
response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Login failed!");
}
}
}
```
#### 4.3.4 Servlet API (了解)
- **javax.servlet**: 定义了Servlet的主要接口和类。
- **javax.servlet.http**: 包含处理HTTP Servlet请求的类和接口。
- **HttpServletRequest**: 表示客户端发送的请求信息。
- **HttpServletResponse**: 表示服务器返回给客户端的响应信息。
#### 4.3.5 Servlet配置和映射(了解)
- **web.xml配置**: 在传统的Servlet应用中通过web.xml配置Servlet的映射关系。
- **注解配置**: 使用@WebServlet等注解在Servlet类上直接配置映射。
#### 4.3.6 Servlet事件监听器(了解)
- **ServletContextListener**: 监听ServletContext的创建和销毁。
- **HttpSessionListener**: 监听HttpSession的创建和销毁。
- **其他监听器**: 用于监听请求、会话、上下文等事件。
#### 4.3.7 Servlet过滤器(了解)
- **Filter**: 用于在请求到达Servlet之前或响应发送给客户端之后执行过滤任务。
- **FilterChain**: 用于调用下一个过滤器或目标资源Servlet
#### 4.3.8 Servlet安全(了解)
- **认证和授权**: Servlet容器提供认证和授权机制。
- **安全考虑**: 防止SQL注入、跨站脚本XSS和其他安全威胁。
#### 4.3.9 Servlet与现代Web框架(了解)
- **Spring框架**: 提供了更高级的Web开发特性如依赖注入、声明式事务管理等。
- **Spring MVC**: 扩展了Servlet API提供了更简洁的控制器实现方式。
#### 4.3.10 Servlet容器Tomcat介绍及使用 (了解)
- **定义**: Tomcat是一个免费的开放源代码的Servlet容器它实现了Servlet和JavaServer Pages (JSP) 规范同时也提供了HTTP服务器的功能。Tomcat由Apache Software Foundation (ASF) 开发和维护。
- **特点**:
- **轻量级**: Tomcat相对较小且易于部署适合开发和测试环境。
- **免费开源**: 它是一个开放源代码项目,任何人都可以下载和使用。
- **广泛支持**: Tomcat支持最新的Servlet和JSP规范。
- **跨平台**: Tomcat可以在多种操作系统上运行包括Windows、Linux、Mac OS等。
- **易于配置**: Tomcat通过XML配置文件进行配置易于理解和修改。
- **可扩展性**: Tomcat可以通过插件和其他扩展来增强功能。
- **安装和配置**:
- **下载**: 从官方网站 (https://tomcat.apache.org/) 下载最新版本的Tomcat。
- **解压**: 将下载的压缩包解压到一个目录中。
- **配置环境变量**: 可选地,设置`CATALINA_HOME`环境变量指向Tomcat的安装目录。
- **启动**: 在命令行中运行`bin/startup.sh` (Linux) 或 `bin/startup.bat` (Windows)。
- **管理界面**: Tomcat自带了一个管理界面可以用来管理应用、查看日志等。 通过 `http://localhost:8080/manager/html` 访问管理界面需要在配置文件tomcat-users.xml中配置管理员账号密码
- **部署应用**:
- **WAR文件**: 将应用打包成WAR文件然后将其放置在`webapps`目录下。
- **解压部署**: 如果应用已经是一个WAR文件Tomcat会自动解压它并部署。
- **目录部署**: 也可以将应用作为一个目录放置在`webapps`目录下。
- **访问应用**: 使用浏览器访问`http://localhost:8080/你的应用名`。
- **配置文件**:
- **位置**: 在Tomcat安装目录下一般位于`conf`目录下。
- **server.xml**: 位于`conf`目录下是Tomcat的主要配置文件用于配置端口、连接器、线程池等。
- **web.xml**: conf目录下的web.xml设置适用于所有部署在该 Tomcat 实例上的 Web 应用程序,除非在特定应用程序的 WEB-INF 目录中有一个同名的 web.xml 文件,后者将覆盖全局配置。
- **context.xml**: 位于`conf`目录下,用于配置全局的上下文参数。
- **tomcat-users.xml**: 用于配置管理员账号密码。
```xml
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<user username="admin" password="admin" roles="manager-gui, manager-script"/>
```
- **其他配置文件**: 其他配置文件如`logging.properties`、`catalina.properties`等,用于配置日志、数据库连接等。
- **日志文件**:
- Tomcat的日志文件位于`logs`目录下,包括访问日志和错误日志等。
### 4.4 后端模板引擎技术介绍(了解)
#### 4.4.1 JSP的介绍和示例
##### JSP技术概述
- **JSP (JavaServer Pages)**:
- **定义**: JSP是一种动态网页技术允许Java代码嵌入HTML页面中由服务器在请求时处理这些代码生成动态内容。
- **运行机制**: JSP页面首次请求时被编译成Servlet之后像Servlet一样处理请求。
##### JSP组成元素
- **JSP指令元素**: 用于控制JSP的编译和行为如页面指令`<%@ page %>`。
- **JSP脚本元素**:
- **脚本片段**: `<% %>`内编写Java代码。
- **表达式**: `<%= %>`输出Java表达式结果。
- **JSP声明**: `<%! %>`内声明变量和方法。
- **JSP注释**:
- HTML注释被发送到客户端显示在源码中。
- JSP注释`<%-- --%>`,不被发送到客户端。
- **JSP动作元素**: 使用XML语法控制JSP的执行流程如包含其他页面`<jsp:include>`。
##### JSP内置对象
- JSP技术提供了一些预定义的对象用于简化开发
- `request`: 封装客户端请求信息。
- `response`: 封装响应信息发送给客户端。
- `session`: 跟踪用户会话状态。
- `application`: 代表整个Web应用的范围。
- `out`: 输出内容到响应对象。
- `config`: 访问Servlet的配置信息。
- `pageContext`: 提供对所有JSP内置对象的访问。
- `exception`: 处理页面级异常。
##### JSP的生命周期
**编译阶段**: JSP页面首次请求时被编译成Servlet类。
**初始化阶段**: Servlet的`init()`方法被调用。
**执行阶段**: 对每个请求调用Servlet的`service()`方法。
**销毁阶段**: Servlet的`destroy()`方法被调用,准备卸载。
##### JSP的使用场景
- **生成动态内容**: 根据数据库查询结果动态生成网页。
- **页面导航**: 根据用户输入重定向到不同的页面。
- **表单处理**: 接收和处理HTML表单数据。
##### JSP示例
- **示例**: 创建一个显示当前日期和消息的JSP页面。
```jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>JSP Example</title>
</head>
<body>
<h1>The Current Date and Time is:</h1>
<p><%= new java.util.Date() %></p>
<%-- 使用JSP表达式输出日期 --%>
<h1>Welcome to JSP!</h1>
<p>Below is a simple message displayed using JSP.</p>
<%-- 使用HTML注释 --%>
<%
String message = "Hello, JSP!";
// JSP脚本片段可以包含多行Java代码
%>
<p><%= message %></p>
<%-- 使用JSP表达式输出变量 --%>
</body>
</html>
```
##### JSP与Servlet的关系
- JSP本质上是一种Servlet它在服务器上被编译成Servlet类。
- Servlet可以作为JSP的底层支持处理HTTP请求和生成响应。
##### JSP的最佳实践
- **避免业务逻辑**: 尽量将业务逻辑放在后端Java类中保持JSP页面的简洁。
- **使用表达式和脚本**: 利用JSP表达式输出数据使用脚本片段编写控制逻辑。
- **模板和标签**: 使用标签库和自定义标签减少页面模板的重复代码。
#### 4.4.2 Thymeleaf的介绍和示例
- **定义**: Thymeleaf 是一个适用于现代Web应用的服务器端模板引擎。
- **特性**:
- **自然模板**: 允许HTML标记保持完整即使在没有数据的情况下也能在浏览器中正确显示。
- **易于前后端分离**: 前端开发者可以在不依赖后端的情况下构建和测试页面。
- **内建方言扩展**: 提供多种方言如标准方言、Spring方言等以满足不同场景的需求。
- **静态资源处理**: 支持直接在HTML中引用静态资源无需额外配置。
- **与JSP的比较**:
- **静态资源处理**: 在JSP中静态资源如CSS、JavaScript和图片文件通常需要通过特殊的标签或表达式来引用。而在Thymeleaf中可以直接像普通HTML那样引用静态资源。
- **浏览器兼容性**: Thymeleaf的一个重要特点是它能够在没有后端服务器的情况下被浏览器正常解析。这意味着开发人员可以在本地开发环境中预览页面而无需每次刷新都请求服务器数据。相比之下JSP页面需要服务器环境的支持才能被正确解析和渲染。
- **前后端分离**: Thymeleaf的设计允许前端开发者在没有后端数据的情况下构建和测试页面这有助于前后端团队并行工作提高开发效率。而JSP通常需要后端的支持才能显示动态内容。
- **示例**: 使用 Thymeleaf 表达式语言在页面中显示动态内容。
```html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title th:text="${title}">Thymeleaf Example</title>
</head>
<body>
<h1 th:text="${greeting}">Hello, Thymeleaf!</h1>
<p th:text="${message}">Welcome to Thymeleaf.</p>
<!-- 示例: 静态资源引用 -->
<link rel="stylesheet" href="/css/style.css" th:href="@{/css/style.css}" />
<script src="/js/app.js" th:src="@{/js/app.js}"></script>
</body>
</html>
```
Thymeleaf 提供了一个更现代且高效的模板解决方案,尤其适合前后端分离的开发模式。
相比于传统的 JSP 技术Thymeleaf 在开发效率和浏览器兼容性方面具有明显的优势。
Thymeleaf也是spring mvc的默认模板引擎。
#### 4.4.3 Freemarker介绍
- **定义**: Freemarker 是一个强大的模板引擎用于生成文本输出特别适合生成HTML网页。它可以应用于多种应用场景包括Web开发、邮件模板生成等。
- **特性**:
- **高性能**: 由于其设计上的优化Freemarker能够快速地处理大量的数据并生成所需的输出。
- **宏支持**: 提供了宏定义功能,使得模板可以复用代码片段,便于维护和扩展。
- **复杂的模板逻辑**: 支持复杂的条件语句、循环结构以及其他高级编程特性,使得开发者能够灵活地控制输出内容。
- **与Thymeleaf的比较**:
- **模板语法**: Freemarker的模板语法更加接近于编程语言提供了丰富的控制结构如`#foreach`、`#if`等这使得编写复杂的逻辑更为容易。而Thymeleaf则倾向于提供一种更为简洁和接近HTML的语法使得模板更容易阅读和维护。
- **前后端分离**: Thymeleaf的设计更加倾向于支持前后端分离的工作流程允许前端开发者在没有后端数据的情况下构建和测试页面。Freemarker虽然也可以在客户端渲染但其主要还是作为服务器端模板引擎使用。
- **浏览器兼容性**: Thymeleaf的一个显著优势是在没有后端服务器的情况下浏览器也能正确解析其模板。Freemarker通常需要服务器环境的支持才能完全发挥作用。
- **示例**: 使用Freemarker表达式语言在页面中显示动态内容。
```freemarker
<!DOCTYPE html>
<html>
<head>
<title>${title!}</title>
</head>
<body>
<h1>${greeting!}</h1>
<p>${message!}</p>
<!-- 示例: 列表循环 -->
<#list users as user>
<div>User: ${user.name}</div>
</#list>
</body>
</html>
```
Freemarker 提供了一个强大且灵活的模板解决方案,特别适用于需要复杂逻辑处理的场景。与 Thymeleaf 相比Freemarker 更加注重性能和逻辑的灵活性,但 Thymeleaf 在前后端分离和支持静态资源方面具有优势。
### 4.5 流行的Java Web开发框架介绍(了解)
#### 4.5.1 Spring Boot
- **定义**: Spring Boot 是 Spring 框架的一个子项目,它简化了基于 Spring 的应用开发。Spring Boot 的目标是让开发者能够快速创建独立的、生产级别的基于 Spring 的应用。
- **优势**:
- **快速开发与简化配置**: 通过自动化配置和约定大于配置的方式,极大地减少了开发人员的工作量。
- **微服务支持与智能化管理**: 为微服务架构提供了强大的支持包括各种依赖库和组件使得构建微服务应用程序变得快速而简单。它还提供了运维和监控功能帮助开发人员更好地管理应用程序。Spring Boot的可扩展性强基于Spring的基础支持扩展和增强。
- **社区支持**: 强大的社区支持作为Spring家族的一部分它继承了Spring的优点并规避了一些缺点。
- **生产就绪**: 提供了监控和管理应用的工具,使得运维人员可以轻松监控应用的健康状况和性能指标。这让应用在生产环境中更加可靠和稳定。
- **生态系统**: 与众多第三方库和服务紧密集成,使得开发者可以轻松利用现有的工具和服务来增强应用功能,如数据库连接、消息队列、安全框架等。
#### 4.5.2 Micronaut
- **定义**: Micronaut 是一个轻量级的 Java 框架,专为构建模块化、易于测试的微服务而设计。它支持 JVM 和非 JVM如 GraalVM Native Image环境。
- **优势**:
- **快速启动**: Micronaut 的设计使得应用启动速度极快,非常适合微服务架构。
- **编译时元数据处理**: 支持编译时注解处理,提高了代码的执行效率和安全性。
- **AOTAhead-of-Time编译**: 支持 AOT 编译,使得应用在启动时占用更少的内存和更快的速度。
- **云原生**: 原生支持 Kubernetes 和容器化,适用于现代云环境部署。
- **测试友好**: 提供了强大的测试支持,使单元测试和集成测试更加容易。
#### 4.5.3 Quarkus
- **定义**: Quarkus 是一个高性能的 Java 框架,专注于开发者体验和应用性能。它旨在为现代 Java 应用提供最佳的开发和运行环境。
- **优势**:
- **高性能**: Quarkus 通过优化的启动时间和高效的运行时性能,显著提升了应用表现。
- **云原生**: 原生支持 Kubernetes 和容器化,适合在云环境中部署。
- **DevOps 友好**: 设计时考虑了 DevOps 的需求,提供了便捷的开发工具和部署选项。
- **广泛的生态支持**: 支持多种企业级特性和工具,如 RESTful API、GraphQL、事件驱动架构等。
- **JVM 和非 JVM 部署**: 支持传统的 JVM 部署以及通过 GraalVM 进行的非 JVM 原生部署。
Spring Boot 因其广泛的社区支持和成熟的生态系统而广受欢迎Micronaut 和 Quarkus 则因其在性能和云原生方面的优势而受到青睐。选择合适的框架需要综合考虑项目规模、团队经验以及未来的扩展性等因素。