杰瑞科技汇

Java Web MVC项目如何快速搭建?

什么是 MVC 模式?

我们要理解 MVC 本身,MVC 是一种软件设计架构模式,旨在将应用程序分为三个相互关联的部分,以提高代码的可维护性、可重用性和可扩展性。

Java Web MVC项目如何快速搭建?-图1
(图片来源网络,侵删)
  • M - Model (模型):

    • 职责: 负责数据和业务逻辑,它代表应用程序的状态和数据。
    • 实体类、数据访问层、业务服务层等,它不关心数据如何显示或如何接收用户输入。
    • 例如: 一个 User 类,包含 id, name, email 等属性,以及一个 UserService 类,负责处理用户注册、登录等业务逻辑。
  • V - View (视图):

    • 职责: 负责数据显示,它是用户看到并与之交互的界面。
    • JSP (JavaServer Pages)、Thymeleaf、FreeMarker 模板等,它主要负责展示从 Model 传递过来的数据。
    • 例如: 一个 userList.jsp 页面,从 Controller 接收到用户列表数据,然后通过 HTML/JSTL 标签将它们渲染成表格。
  • C - Controller (控制器):

    • 职责: 负责接收用户请求,调用 Model 处理业务逻辑,然后选择合适的 View 返回给用户,它是 Model 和 View 之间的协调者。
    • Servlet 或框架提供的控制器类(如 Spring MVC 的 @Controller)。
    • 例如: 一个 UserController,它有一个 listUsers() 方法,该方法调用 UserService 获取用户列表,然后将数据存入 Model,并返回逻辑视图名(如 "userList"),由视图解析器找到对应的 JSP 页面进行渲染。

工作流程:

Java Web MVC项目如何快速搭建?-图2
(图片来源网络,侵删)
  1. 用户通过浏览器发送请求(如访问 /users)。
  2. DispatcherServlet (前端控制器,Spring MVC 的核心) 接收请求。
  3. HandlerMapping (处理器映射器) 根据请求 URL 找到对应的 Controller 方法。
  4. Controller 调用 Model (Service/DAO) 处理业务逻辑,获取数据。
  5. Controller 将数据存入 Model 对象,并返回一个逻辑视图名。
  6. ViewResolver (视图解析器) 根据逻辑视图名找到实际的 View 文件。
  7. View 使用 Model 中的数据进行渲染,生成 HTML。
  8. DispatcherServlet 将最终的 HTML 响应返回给浏览器。

主流的 Java Web MVC 框架

虽然你可以用原生 Servlet 实现 MVC,但非常繁琐,现在业界几乎都使用成熟的框架来简化开发。

Spring MVC (最主流)

Spring MVC 是 Spring Framework 的一部分,是目前 Java Web 开发领域绝对的主流,它功能强大,生态完善,与 Spring Boot、Spring Security 等其他 Spring 项目无缝集成。

  • 核心注解:
    • @Controller: 标记一个类为控制器。
    • @RequestMapping: 映射 HTTP 请求到特定的处理方法(可以作用于类或方法上)。
    • @GetMapping, @PostMapping, @PutMapping, @DeleteMapping: @RequestMapping 的简化版,用于处理特定的 HTTP 方法。
    • @RequestParam: 绑定请求参数到方法参数。
    • @PathVariable: 绑定 URL 模板变量到方法参数。
    • @ModelAttribute: 绑定请求参数到 Model 对象。
    • @ResponseBody: 将方法的返回值直接作为 HTTP 响应体返回,常用于返回 JSON/XML 数据(开发 RESTful API 的核心)。
    • @RequestBody: 将 HTTP 请求体中的 JSON/XML 数据绑定到方法参数的对象上。

Jakarta MVC (较新,由 Eclipse 基金会维护)

这是 Java EE(现在是 Jakarta EE)官方的 MVC 规范,旨在提供一个标准化的、轻量级的 MVC 解决方案,作为传统 JSF 的替代品,它更接近于传统的 Servlet API 编程方式。

  • 特点: 语法更接近原生 Servlet,使用注解如 @Controller, @GET, @POST, @PathParam 等。
  • 现状: 虽然是官方标准,但目前社区和生态远不如 Spring MVC,采用率较低。

其他框架

  • Struts 2: 曾经非常流行(尤其是 Struts 1 之后),但现在市场份额已经大幅下降,逐渐被 Spring MVC 取代。
  • Play Framework: 一个现代化的、无状态的 Web 框架,强调“约定优于配置”,但在中国大陆使用较少。

对于新项目,首选 Spring MVC,通常与 Spring Boot 结合使用,可以极大地简化项目配置和部署。


一个典型的 Spring MVC 项目结构 (Maven)

一个标准的 Maven Java Web 项目结构如下:

my-web-app
├── src
│   ├── main
│   │   ├── java              # Java 源代码
│   │   │   └── com
│   │   │       └── example
│   │   │           └── demo
│   │   │               ├── controller      # 控制器层
│   │   │               │   └── HelloController.java
│   │   │               ├── model           # 模型层 (实体类)
│   │   │               │   └── User.java
│   │   │               ├── service         # 服务层 (业务逻辑)
│   │   │               │   └── UserService.java
│   │   │               └── DemoApplication.java # Spring Boot 启动类
│   │   │
│   │   ├── resources          # 配置文件和静态资源
│   │   │   ├── application.properties  # Spring Boot 配置文件
│   │   │   ├── static         # 静态资源 (CSS, JS, images)
│   │   │   └── templates      # 模板文件 (Thymeleaf, FreeMarker 等)
│   │   │       └── hello.html
│   │   │
│   │   └── webapp            # 传统 Web 应用目录 (JSP 等)
│   │       ├── WEB-INF
│   │       │   └── views      # JSP 文件存放地
│   │       │       └── welcome.jsp
│   │       └── index.html
│   │
│   └── test                  # 测试代码
│       └── java
│           └── com
│               └── example
│                   └── demo
│                       └── ...
│
├── pom.xml                    # Maven 项目构建文件
└── README.md

实践:使用 Spring Boot 创建一个简单的 MVC 项目

这里我们以最流行的 Spring Boot + Spring MVC + Thymeleaf 组合为例,创建一个“Hello, World!”项目。

步骤 1: 创建项目

使用 Spring Initializr (Web 官方项目生成器) 是最快的方式。

  • Project: Maven Project
  • Language: Java
  • Spring Boot: 选择一个稳定版本 (如 3.x.x)
  • Project Metadata: 填写 Group, Artifact, Name 等。
  • Dependencies:
    • Spring Web: 提供 Spring MVC 和嵌入式 Tomcat 服务器。
    • Thymeleaf: 强大的现代模板引擎,用于替代 JSP。
    • Spring Boot DevTools: 开发时热部署工具。

点击 "Generate" 下载项目压缩包,并用你的 IDE (如 IntelliJ IDEA 或 Eclipse) 打开。

步骤 2: 编写 Controller

src/main/java/com/example/demo/controller 目录下创建 HelloController.java

package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; // 用于向视图传递数据
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class HelloController {
    // @GetMapping 表示处理 GET 请求,"/hello" 是请求的 URL 路径
    @GetMapping("/hello")
    public String hello(Model model) {
        // 向 Model 中添加一个名为 "message" 的属性,值为 "Hello from Spring MVC!"
        model.addAttribute("message", "Hello from Spring MVC!");
        // 返回一个字符串 "hello",这个字符串会被 Thymeleaf 视图解析器
        // 解析为 "templates/hello.html" 这个模板文件
        return "hello";
    }
}

步骤 3: 编写 View (Thymeleaf 模板)

src/main/resources/templates 目录下创建 hello.html 文件。

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">Hello Page</title>
</head>
<body>
    <h1>Welcome to our application!</h1>
    <!-- 使用 Thymeleaf 的语法来显示 Controller 传来的 message 数据 -->
    <p th:text="${message}"></p>
</body>
</html>
  • xmlns:th="http://www.thymeleaf.org": 声明 Thymeleaf 命名空间。
  • th:text="${message}": 这是 Thymeleaf 的核心语法,意思是“将变量 message 的值显示在这个 <p> 标签内”。

步骤 4: 运行和测试

  1. 找到 src/main/java/com/example/demo/DemoApplication.java 文件,右键点击 "Run"。
  2. Spring Boot 会启动一个内置的 Tomcat 服务器,默认运行在 8080 端口。
  3. 打开你的浏览器,访问 http://localhost:8080/hello
  4. 你将看到页面显示 "Welcome to our application!" 和 "Hello from Spring MVC!"。

进阶:开发 RESTful API

现代 Web 开发中,前后端分离是主流,后端通常只提供数据接口(API),前端负责渲染页面,这时,Controller 就不再返回视图名,而是直接返回 JSON 数据。

修改 Controller 以返回 JSON

假设我们有一个 User 实体类:

// src/main/java/com/example/demo/model/User.java
package com.example.demo.model;
public class User {
    private Long id;
    private String name;
    private String email;
    // 构造器、Getter 和 Setter 方法
    // ...
}

修改 HelloController,添加一个提供用户信息的 API 端点:

// src/main/java/com/example/demo/controller/HelloController.java
package com.example.demo.controller;
import com.example.demo.model.User;
import org.springframework.web.bind.annotation.*;
// 使用 @RestController,它相当于 @Controller + @ResponseBody
// 标记为该类的所有方法都会返回 JSON/XML 数据,而不是视图名
@RestController
@RequestMapping("/api") // 为该控制器下的所有路径添加 /api 前缀
public class HelloController {
    // ... 之前的 hello 方法可以保留或删除 ...
    @GetMapping("/users/{id}")
    public User getUserById(@PathVariable("id") Long id) {
        // 模拟从数据库或服务层获取数据
        User user = new User();
        user.setId(id);
        user.setName("John Doe");
        user.setEmail("john.doe@example.com");
        // Spring Boot 会自动将 Java 对象转换成 JSON 格式并返回
        return user;
    }
}

测试 API

  1. 确保你的 Spring Boot 应用正在运行。
  2. 使用 Postman、Apifox 或浏览器访问 http://localhost:8080/api/users/1
  3. 你将收到如下 JSON 响应:
    {
        "id": 1,
        "name": "John Doe",
        "email": "john.doe@example.com"
    }

特性 描述
核心模式 MVC (Model-View-Controller),将业务逻辑、数据和表现层分离。
主流框架 Spring MVC 是绝对的主流,通常与 Spring Boot 结合使用以简化开发。
核心组件 DispatcherServlet (前端控制器)、HandlerMappingControllerModelViewResolverView
视图技术 JSP (传统)、Thymeleaf (现代推荐,功能强大)、FreeMarker。
API 开发 使用 @RestController@ResponseBody (或直接使用 @RestController) 来返回 JSON/XML 数据,构建 RESTful API。
项目构建 MavenGradle 是标准的构建工具。

掌握 Java Web MVC,特别是 Spring MVC,是成为一名合格 Java Web 开发者的必备技能,从理解其核心思想开始,通过动手实践(如创建一个项目、写一个 Controller、连接数据库等)来逐步深入,你会发现它其实非常清晰和强大。

分享:
扫描分享到社交APP
上一篇
下一篇