我们将主要关注当前最主流、最高效的两种方式:

- Spring Boot: 极大地简化了 Java Web 应用的创建和开发,是目前的事实标准。
- 传统 Servlet (使用 Maven/Gradle): 这是 Java Web 开发的传统方式,有助于理解底层原理,适合学习。
核心概念
在开始之前,先理解几个核心概念:
- Web 服务: 在网络上运行的软件,通过标准的 Web 协议(主要是 HTTP)提供服务,它可以返回 HTML 页面(传统 Web 应用),也可以返回 JSON/XML 数据(现代 RESTful API)。
- Servlet: Java EE(现在是 Jakarta EE)的核心技术,它是一个 Java 类,运行在 Web 服务器(如 Tomcat)中,用于接收和响应来自客户端的 HTTP 请求,你可以把它看作是处理 HTTP 请求的“处理器”。
- Web 服务器 / Servlet 容器: 一个能运行和管理的 Java Web 应用(包括 Servlet)的程序,常见的有:
- Tomcat: 最流行、轻量级的开源 Servlet 容器。
- Jetty: 另一个轻量级、高性能的选择。
- Undertow: 由 WildFly 提供的高性能服务器。
- 构建工具: 用于自动化项目的编译、测试、打包、依赖管理等。
- Maven: 最老牌、最成熟的工具,使用 XML 配置。
- Gradle: 更现代的工具,使用 Groovy/Kotlin DSL,构建速度更快,配置更灵活。
- 依赖管理: 管理项目所需的外部库(JAR 包),Maven 和 Gradle 都内置了强大的依赖管理功能,会自动从中央仓库下载所需的依赖。
使用 Spring Boot (推荐)
Spring Boot 的核心理念是“约定优于配置”,它通过“起步依赖”(Starters)自动为你配置好所需的一切,让你可以专注于业务逻辑。
项目创建
最简单的方式是使用 Spring Initializr (https://start.spring.io/)。
- Project: 选择
Maven或Gradle。 - Language:
Java。 - Spring Boot: 选择一个稳定的版本(如 3.x.x)。
- Project Metadata:
- Group:
com.example - Artifact:
demo-web-service - Name:
demo-web-service - Packaging:
Jar(Spring Boot 通常打包成可执行的 JAR) - Java: 选择你的 JDK 版本 (17 或 21 是目前主流)。
- Group:
- Dependencies: 添加必要的依赖。
Spring Web: 提供构建 Web 应用(包括 RESTful API)和 RESTful 服务所需的一切,它内嵌了 Tomcat 服务器。Spring Boot DevTools: 提供开发时的自动重启和实时加载功能,提高开发效率。
点击 "GENERATE" 下载项目 ZIP 包,并用你的 IDE(如 IntelliJ IDEA 或 Eclipse)打开。

编写代码
Spring Boot 使用注解来简化配置,我们将创建一个简单的 REST 控制器来处理 HTTP 请求。
在 src/main/java/com/example/demo/web/service/ 目录下,创建 HelloController.java 文件:
package com.example.demo.web.service;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
// @RestController 是一个组合注解,相当于 @Controller + @ResponseBody
// 它告诉 Spring 这个类中的所有方法都返回的数据直接写入 HTTP 响应体中,而不是解析为视图名。
@RestController
public class HelloController {
// @GetMapping 注解将 HTTP GET 请求映射到该方法上
// value = "/hello" 定义了请求的路径
// @RequestParam 将查询参数 "name" 绑定到方法的 "name" 参数上,defaultValue 提供了默认值
@GetMapping("/hello")
public String sayHello(@RequestParam(value = "name", defaultValue = "World") String name) {
return String.format("Hello, %s!", name);
}
}
运行 Web 服务
Spring Boot 应用非常简单,可以直接作为独立应用程序运行。
在 IDE 中,找到 DemoWebServiceApplication.java(通常在 src/main/java/com/example/demo/web/service/ 目录下),这是一个带有 @SpringBootApplication 注解的主类,右键点击它,选择 "Run"。

或者,在项目根目录下,通过命令行运行 Maven 或 Gradle 命令:
- Maven:
./mvnw spring-boot:run
- Gradle:
./gradlew bootRun
验证服务
服务启动后,控制台会显示类似 "Tomcat started on port(s): 8080 (http)" 的信息。
打开你的浏览器或使用 API 工具(如 Postman、curl),访问以下 URL:
http://localhost:8080/hello- 响应:
Hello, World!
- 响应:
http://localhost:8080/hello?name=Java- 响应:
Hello, Java!
- 响应:
打包与独立运行
当你需要将应用部署到服务器时,可以将其打包成一个可执行的 JAR 文件。
-
Maven:
./mvnw clean package
这会在
target/目录下生成一个demo-web-service-0.0.1-SNAPSHOT.jar文件。 -
Gradle:
./gradlew clean build
这会在
build/libs/目录下生成一个 JAR 文件。
你可以在任何安装了 Java 运行时环境的机器上运行这个 JAR 文件:
# java -jar <你的jar文件名> java -jartarget/demo-web-service-0.0.1-SNAPSHOT.jar
这个 JAR 文件是“胖 JAR”(Fat JAR),它包含了所有依赖和内嵌的 Tomcat 服务器,因此可以独立运行。
传统 Servlet 方式 (Maven + Tomcat)
这种方式更接近 Java Web 的传统工作方式,需要手动配置 Servlet 和 Web 服务器。
项目创建
使用你的 IDE 创建一个 "Maven Web App" 项目,这会自动生成一个标准的 Web 应用目录结构:
my-web-app/
├── pom.xml // Maven 配置文件
└── src/
└── main/
├── java/ // Java 源代码
├── resources/ // 配置文件、资源
└── webapp/ // Web 内容
├── WEB-INF/
│ └── web.xml // 部署描述符,核心配置文件
└── index.jsp // 默认首页
配置 pom.xml
添加 Servlet API 的依赖,我们使用 provided 作用域,因为 Tomcat 服务器会提供这些类,我们只需要在编译时使用它们。
<dependencies>
<!-- Servlet API -->
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>5.0.0</version> <!-- 版本号根据你的 Tomcat 版本调整 -->
<scope>provided</scope>
</dependency>
</dependencies>
编写 Servlet
在 src/main/java 下创建你的包和 Servlet 类。
package com.example.servlet;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
// @WebServlet 注解替代了 web.xml 中的配置
// 它直接将 URL 模式 "/servlet/hello" 映射到这个 Servlet
@WebServlet("/servlet/hello")
public class HelloServlet extends HttpServlet {
// 处理 GET 请求
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 设置响应内容类型为 HTML
resp.setContentType("text/html;charset=UTF-8");
// 获取请求参数
String name = req.getParameter("name");
if (name == null || name.isEmpty()) {
name = "Servlet World";
}
// 向响应写入内容
resp.getWriter().println("<h1>Hello from a traditional Servlet!</h1>");
resp.getWriter().println("<p>Hello, " + name + "!</p>");
}
}
打包与部署
传统 Web 应用被打包成 WAR (Web Application Archive) 文件。
- 配置
pom.xml: 确保你的pom.xml中的packaging标签是war。<packaging>war</packaging>
- 配置 Tomcat Maven 插件 (可选但推荐): 这可以让你直接在 Maven 中部署和运行应用。
<build> <plugins> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <path>/myapp</path> <!-- 访问路径 --> <port>8080</port> <!-- 端口 --> </configuration> </plugin> </plugins> </build> - 打包: 运行 Maven 命令生成 WAR 文件。
./mvnw clean package
这会在
target/目录下生成my-web-app.war文件。
运行与验证
方式 A: 使用 IDE 集成 Tomcat 在 IDE(如 IntelliJ IDEA)中,添加一个 Tomcat Server 实例,并将你的 Web 应用部署到这个实例上,然后启动服务器。
方式 B: 使用独立的 Tomcat 服务器
- 下载并解压一个 Tomcat 服务器(Apache Tomcat 9 或 10)。
- 将上面生成的
my-web-app.war文件复制到 Tomcat 的webapps目录下。 - 进入 Tomcat 的
bin目录,运行startup.sh(Linux/macOS) 或startup.bat(Windows) 来启动服务器。 - 访问 URL:
http://localhost:8080/myapp/servlet/hello?name=Java- 响应: 一个 HTML 页面,显示 "Hello from a traditional Servlet!" 和 "Hello, Java!"。
总结与对比
| 特性 | Spring Boot | 传统 Servlet (Maven + Tomcat) |
|---|---|---|
| 核心思想 | 约定优于配置,快速启动 | 灵活配置,显式控制 |
| 项目结构 | 标准化的 Maven/Gradle 项目 | 标准的 Maven Web App 项目结构 |
| 配置方式 | 注解 (@RestController, @GetMapping) 和 application.properties |
XML (web.xml) 和注解 (@WebServlet) |
| 打包方式 | 可执行 JAR (内嵌服务器) | WAR (部署到外部服务器) |
| 服务器 | 内嵌 (Tomcat, Jetty, Undertow) | 外部 (需要单独安装和配置 Tomcat 等) |
| 依赖管理 | 通过 "Starters" 自动配置 | 手动添加依赖,需注意版本兼容性 |
| 学习曲线 | 低,入门快,适合快速开发 | 中,需要理解 Servlet 容器和配置,适合学习底层原理 |
| 适用场景 | 微服务、现代 Web 应用、快速原型 | 传统企业应用、需要深度定制服务器环境、学习 Java Web 基础 |
给初学者的建议:
- 直接从 Spring Boot 开始,它能让你快速体验到构建和运行 Java Web 服务的乐趣,而不是陷入繁琐的配置中。
- 当你对 Spring Boot 比较熟悉后,可以尝试传统 Servlet 方式,这能帮助你理解 Web 服务背后的工作原理,比如请求是如何被服务器接收并分发给 Servlet 的,这对于解决复杂问题和进行底层优化非常有帮助。
