【JavaWeb】MVC三层架构

发布于:2025-06-02 ⋅ 阅读:(35) ⋅ 点赞:(0)

MVC三层架构

  • MVC 是什么?
  • 三层架构的组成(View、Controller、Model)
  • 各层职责划分
  • 示例说明
  • 面试高频问题与参考答案

MVC(Model-View-Controller)是一种经典的软件设计模式,广泛应用于 Web 应用开发中,尤其是 Java Web(Servlet + JSP)、Spring MVC 等框架。


什么是 MVC?

MVC 全称是 Model-View-Controller,它将应用程序分为三个核心部分:

层级 英文名 中文名 职责
M Model 模型 处理数据、业务逻辑
V View 视图 用户界面(如 HTML 页面)
C Controller 控制器 接收请求,调用模型,返回视图

MVC 在 Java Web 中的三层架构详解

在实际开发中,我们通常把 MVC 扩展为 三层架构(3-tier architecture),分别是:

表现层(View / UI Layer)

  • 技术实现:JSP、HTML、CSS、JavaScript
  • 作用
    • 展示数据给用户
    • 接收用户输入
    • 不处理复杂逻辑,只负责展示和跳转

控制层(Controller Layer)

  • 技术实现:Servlet、Spring MVC 的 @Controller@RestController
  • 作用
    • 接收用户的 HTTP 请求
    • 调用 Service 层处理业务逻辑
    • 根据结果选择跳转的页面(Forward/Redirect)

示例代码(Servlet):

@WebServlet("/login")
public class LoginServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        UserService userService = new UserService();
        User user = userService.login(username, password);

        if (user != null) {
            request.setAttribute("user", user);
            request.getRequestDispatcher("welcome.jsp").forward(request, response);
        } else {
            response.sendRedirect("login.jsp");
        }
    }
}

业务逻辑层(Service Layer)

  • 技术实现:Java 类(如 UserServiceOrderService
  • 作用
    • 处理具体的业务规则(如登录验证、订单计算)
    • 调用 DAO 层获取或保存数据

示例代码:

public class UserService {
    private UserDao userDao = new UserDao();

    public User login(String username, String password) {
        return userDao.findByUsernameAndPassword(username, password);
    }
}

数据访问层(DAO Layer / Persistence Layer)

  • 技术实现:Java 类(如 UserDao),配合 JDBC、MyBatis、Hibernate 等
  • 作用
    • 与数据库交互(增删改查)
    • 封装底层 SQL 操作

示例代码:

public class UserDao {
    public User findByUsernameAndPassword(String username, String password) {
        // 连接数据库查询
        // 返回 User 对象
    }
}

MVC 分层结构

+---------------------+
|       Browser       |
+----------+----------+
           |
           | HTTP Request
           v
+----------+----------+
|     Controller      | ←→ 调用 Service 层
+----------+----------+
           |
           | 调用 DAO 层
           v
+----------+----------+
|       Service       |
+----------+----------+
           |
           | 操作数据库
           v
+----------+----------+
|         DAO         |
+----------+----------+
           |
           | 数据库操作
           v
+----------+----------+
|       Database      |
+---------------------+

MVC 的优势

优点 说明
分工明确 各层职责清晰,便于团队协作
易于维护 修改某一层不影响其他层
可扩展性强 可以替换某一层而不影响整体架构
降低耦合 各层之间通过接口通信,松耦合设计
提高复用性 Service 层可被多个 Controller 复用

简单案例演示

场景:用户登录功能

View(login.jsp)
<form action="login" method="post">
  用户名:<input type="text" name="username"><br>
  密码:<input type="password" name="password"><br>
  <input type="submit" value="登录">
</form>

Controller(LoginServlet)
@WebServlet("/login")
public class LoginServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        UserService userService = new UserService();
        User user = userService.login(username, password);

        if (user != null) {
            request.setAttribute("user", user);
            request.getRequestDispatcher("welcome.jsp").forward(request, response);
        } else {
            response.sendRedirect("login.jsp");
        }
    }
}
Service(UserService.java)
public class UserService {
    private UserDao userDao = new UserDao();

    public User login(String username, String password) {
        return userDao.findByUsernameAndPassword(username, password);
    }
}
DAO(UserDao.java)
public class UserDao {
    public User findByUsernameAndPassword(String username, String password) {
        // 查询数据库并封装成 User 对象
        return user;
    }
}
View(welcome.jsp)
<h1>欢迎你,${user.username}</h1>

面试高频问题

Q1:MVC 和三层架构的区别是什么?

A:MVC 是一种设计模式,强调的是 用户交互流程;而三层架构是从 系统架构角度 划分的层次结构,两者结合后形成完整的 Web 应用结构。


Q2:为什么要在项目中使用 MVC?

A:为了实现 前后端分离、逻辑清晰、易于维护、提高开发效率。各层分工明确,便于多人协作开发。


Q3:Servlet 在 MVC 中属于哪一层?JSP 呢?

A:

  • Servlet 属于 Controller 层,用于接收请求和控制流程;
  • JSP 属于 View 层,用于展示数据和页面渲染。

Q4:如果不用 MVC,会有什么问题?

A:会出现大量业务逻辑混杂在 JSP 页面中,导致代码难以维护、不易测试、安全性差等问题。


Q5:如何保证各层之间的低耦合?

A:通过接口编程、依赖注入等方式,使各层之间仅依赖接口而非具体实现类。



网站公告

今日签到

点亮在社区的每一天
去签到