Java 创建 Web 应用的方式多样,根据不同的技术栈和场景需求,可以选择以下主流方案:
---
### 1. **Servlet + JSP(传统方式)**
- **特点**:基于 Java EE 规范,直接使用 `javax.servlet` 和 JSP 技术。
- **适用场景**:传统企业级应用或学习底层原理。
- **步骤**:
1. 创建 `Servlet` 类,继承 `HttpServlet`,重写 `doGet`/`doPost` 方法。
2. 编写 JSP 页面,通过 `JSTL` 或 `EL` 表达式处理动态内容。
3. 配置 `web.xml` 或使用 `@WebServlet` 注解映射 URL。
- **示例代码**:
```java
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
resp.getWriter().write("Hello World!");
}
}
```
- **部署**:打包为 WAR 文件,部署到 Tomcat、Jetty 等 Servlet 容器。
---
### 2. **Spring MVC**
- **特点**:基于 Spring 框架的 MVC 模式,提供依赖注入和模块化开发。
- **适用场景**:需要灵活性和扩展性的中大型项目。
- **核心组件**:
- `DispatcherServlet`(前端控制器)
- `@Controller` 注解处理请求
- 视图解析器(如 Thymeleaf、JSP)
- **示例代码**:
```java
@Controller
public class UserController {
@GetMapping("/users")
public String listUsers(Model model) {
model.addAttribute("users", userService.findAll());
return "users";
}
}
```
- **优势**:整合 Spring 生态(如 Security、Data JPA)。
---
### 3. **Spring Boot**
- **特点**:简化 Spring 配置,内嵌 Web 服务器,开箱即用。
- **适用场景**:快速开发微服务或 RESTful API。
- **步骤**:
1. 使用 [start.spring.io](https://start.spring.io) 生成项目模板。
2. 添加 `spring-boot-starter-web` 依赖。
3. 通过 `@RestController` 编写 API。
- **示例代码**:
```java
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
@RestController
public class ApiController {
@GetMapping("/api/data")
public ResponseEntity
return ResponseEntity.ok("Data from Spring Boot");
}
}
```
- **部署**:打包为可执行 JAR(内嵌 Tomcat),支持云原生部署。
---
### 4. **Jakarta EE(原 Java EE)**
- **特点**:标准化企业级开发规范(如 CDI、JPA、JAX-RS)。
- **适用场景**:遵循标准规范的大型企业应用。
- **核心技术**:
- **JSF**(组件式 UI 开发)
- **JAX-RS**(RESTful Web 服务)
- **EJB**(分布式事务管理)
- **示例**(JAX-RS):
```java
@Path("/users")
public class UserResource {
@GET
@Produces(MediaType.APPLICATION_JSON)
public List
return userService.getAllUsers();
}
}
```
- **服务器**:WildFly、Payara、TomEE。
---
### 5. **反应式框架(如 Spring WebFlux)**
- **特点**:非阻塞异步编程,支持高并发场景。
- **适用场景**:实时数据处理或高吞吐量服务。
- **技术栈**:
- **Spring WebFlux**(基于 Reactor)
- **Vert.x**(轻量级事件驱动框架)
- **示例**(WebFlux):
```java
@RestController
public class ReactiveController {
@GetMapping("/flux")
public Flux
return Flux.just("A", "B", "C").delayElements(Duration.ofSeconds(1));
}
}
```
---
### 6. **微服务框架(如 Micronaut/Quarkus)**
- **特点**:低内存占用、快速启动,适合云原生和 Serverless。
- **适用场景**:容器化部署或函数计算。
- **示例**(Quarkus):
```java
@Path("/hello")
public class HelloResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
return "Hello Quarkus!";
}
}
```
- **优势**:编译时优化,GraalVM 原生镜像支持。
---
### 7. **全栈框架(如 Vaadin/Play)**
- **特点**:整合前端与后端,减少技术栈分裂。
- **示例**(Vaadin):
```java
public class MainView extends VerticalLayout {
public MainView() {
Button button = new Button("Click me");
button.addClickListener(e -> Notification.show("Clicked!"));
add(button);
}
}
```
---
### 8. **无服务器架构(Serverless)**
- **特点**:无需管理服务器,按需运行代码。
- **适用场景**:事件驱动或低频访问的 API。
- **工具**:
- AWS Lambda + Java
- Spring Cloud Function
---
### 总结选择建议:
- **快速原型开发**:Spring Boot + Thymeleaf。
- **高性能 API**:Spring WebFlux 或 Quarkus。
- **企业级规范**:Jakarta EE。
- **云原生微服务**:Micronaut 或 Spring Cloud。
- **轻量级单页应用**:Vaadin 或 JAX-RS + Angular/React。
根据项目规模、团队熟悉度和部署环境选择最合适的技术组合。