SpringMVC 入门:核心概念与第一个 HelloWorld 案例

引言

在 JavaWeb 开发中,MVC 模式是解决传统 Servlet 开发中 "代码耦合严重、维护困难" 的经典方案,而 SpringMVC 作为 Spring 生态的核心模块,凭借其 "轻量、灵活、易整合" 的特点,成为当前主流的 MVC 框架。本文将带新手快速入门 SpringMVC,理解其核心概念和工作流程,并通过一个完整的 HelloWorld 案例,让你动手搭建第一个 SpringMVC 项目。

一、先搞懂:SpringMVC 是什么?MVC 模式又是什么?

1. MVC 模式回顾

MVC 是 "Model-View-Controller" 的缩写,是一种软件架构模式,核心是 "职责分离":

  • Model(模型):处理业务逻辑和数据,比如实体类(POJO)、Service 层、DAO 层;
  • View(视图):展示数据,比如 JSP、Thymeleaf、Vue 页面;
  • Controller(控制器):接收请求、协调 Model 和 View,比如 SpringMVC 中的 Controller 类。

2. SpringMVC 的核心定位

SpringMVC 是基于 MVC 模式的请求驱动型框架,本质是对 Servlet 的封装,通过核心组件(如 DispatcherServlet)统一处理请求,简化开发流程,核心优势:

  • 无需手动编写 Servlet,通过注解(如@Controller)快速定义控制器;
  • 内置参数绑定、视图解析、异常处理等功能,减少重复代码;
  • 与 Spring 无缝整合,轻松使用 Spring 的 IOC、AOP 等特性。

二、SpringMVC 核心组件与工作流程(关键!)

1. 5 个核心组件

SpringMVC 的请求处理依赖以下核心组件,缺一不可:

组件名称 作用
DispatcherServlet 前端控制器(核心),统一接收所有请求,分发到对应组件
HandlerMapping 处理器映射器,根据请求 URL 找到对应的 Controller 方法(如@RequestMapping
HandlerAdapter 处理器适配器,调用 Controller 方法(处理参数绑定、类型转换)
ModelAndView 封装处理结果(数据 + 视图名),由 Controller 返回
ViewResolver 视图解析器,根据视图名找到实际视图(如 JSP 路径)

2. 请求处理完整流程(9 步)

用一张 "请求旅行图" 理解 SpringMVC 的工作过程:

  1. 浏览器发送请求(如http://localhost:8080/springmvc/hello);
  2. 请求被 Tomcat 拦截,转发给DispatcherServlet(web.xml 中配置);
  3. DispatcherServlet调用HandlerMapping,根据 URL 找到对应的 Controller 方法;
  4. HandlerMapping返回方法的映射信息给DispatcherServlet
  5. DispatcherServlet调用HandlerAdapter,适配并执行 Controller 方法;
  6. Controller 方法处理业务,返回ModelAndView(如数据msg="Hello"+ 视图名"hello");
  7. DispatcherServlet调用ViewResolver,根据视图名解析实际视图路径(如/WEB-INF/views/hello.jsp);
  8. ViewResolver返回解析后的视图对象给DispatcherServlet
  9. DispatcherServlet渲染视图(将 Model 数据传入视图),最终响应给浏览器。

三、动手实战:第一个 SpringMVC HelloWorld

1. 环境准备

  • 开发工具:IDEA 2023 + Maven 3.8 + Tomcat 9
  • 依赖版本:SpringMVC 5.3.28(与 Spring 核心版本一致)

2. 步骤 1:创建 Maven Web 项目

  • 打开 IDEA → 新建 Maven 项目 → 选择maven-archetype-webapp → 填写 GroupId(如com.example)、ArtifactId(如springmvc-hello);
  • 补全项目结构:在src/main下新建javaresources目录(分别标记为 "Sources Root" 和 "Resources Root")。

3. 步骤 2:导入 SpringMVC 依赖(pom.xml)

核心依赖包括 SpringMVC、Spring 核心、ServletAPI(需设置provided避免冲突):

XML 复制代码
<dependencies>
    <!-- Spring核心 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.3.28</version>
    </dependency>
    <!-- SpringMVC -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.3.28</version>
    </dependency>
    <!-- Servlet API(Tomcat已提供,无需打包) -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.1</version>
        <scope>provided</scope>
    </dependency>
    <!-- JSP API(可选,用于视图) -->
    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>jsp-api</artifactId>
        <version>2.2</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

4. 步骤 3:配置前端控制器(web.xml)

WEB-INF下的web.xml中配置DispatcherServlet,指定 SpringMVC 配置文件路径:

XML 复制代码
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" version="4.0">
    <!-- 配置SpringMVC前端控制器 -->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!-- 指定SpringMVC配置文件位置 -->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring-mvc.xml</param-value>
        </init-param>
        <!-- 项目启动时加载Servlet -->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <!-- 映射所有请求(除了.jsp)交给DispatcherServlet处理 -->
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

5. 步骤 4:配置 SpringMVC 核心文件(spring-mvc.xml)

resources目录下新建spring-mvc.xml,配置组件扫描 (扫描 Controller)和视图解析器

XML 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">

    <!-- 1. 组件扫描:扫描Controller所在的包(替换为你的包路径) -->
    <context:component-scan base-package="com.example.controller"/>

    <!-- 2. 配置视图解析器:解析JSP视图 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- 前缀:视图文件所在目录 -->
        <property name="prefix" value="/WEB-INF/views/"/>
        <!-- 后缀:视图文件后缀 -->
        <property name="suffix" value=".jsp"/>
    </bean>
</beans>

6. 步骤 5:编写 Controller(核心业务逻辑)

com.example.controller包下新建HelloController,用@Controller@RequestMapping定义请求映射:

java 复制代码
package com.example.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller // 标记此类为SpringMVC控制器
public class HelloController {

    // 映射请求路径:http://localhost:8080/springmvc/hello
    @RequestMapping("/hello")
    public String hello(Model model) {
        // 1. 处理业务逻辑(这里模拟返回数据)
        String msg = "Hello, SpringMVC!";
        
        // 2. 将数据存入Model(类似request.setAttribute,供视图使用)
        model.addAttribute("message", msg);
        
        // 3. 返回视图名(会被视图解析器解析为:/WEB-INF/views/hello.jsp)
        return "hello";
    }
}

7. 步骤 6:编写视图(JSP 页面)

WEB-INF下新建views目录,再新建hello.jsp,通过 EL 表达式获取 Model 中的数据:

复制代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>SpringMVC HelloWorld</title>
</head>
<body>
    <!-- 从Model中获取message值 -->
    <h1>${message}</h1>
</body>
</html>

8. 步骤 7:部署并测试

  • 配置 Tomcat:IDEA 右侧 "Add Configuration" → 新增 "Tomcat Server" → 选择本地 Tomcat 路径;
  • 部署项目:将springmvc-hello项目添加到 Tomcat 中,启动 Tomcat;
  • 访问测试:打开浏览器输入http://localhost:8080/springmvc-hello/hello,页面显示Hello, SpringMVC!,说明项目成功!

四、入门小结

  1. 本文核心:理解 SpringMVC 的 "前端控制器 + 组件分工" 模式,记住 9 步工作流程;
  2. 关键注意点:
    • web.xmlDispatcherServleturl-pattern设为/(不要设为/*,否则会拦截 JSP);
    • spring-mvc.xml的组件扫描包路径必须正确,否则 Controller 无法被识别;
  3. 下一篇预告:深入 SpringMVC 核心组件的实现细节,以及开发中常用的 "参数绑定" 技术。
相关推荐
这周也會开心7 小时前
Spring-MVC响应
java·spring·mvc
William_cl17 小时前
【连载7】 C# MVC 跨框架异常处理对比:.NET Framework 与 .NET Core 实现差异
c#·mvc·.net
疯癫的老码农18 小时前
【word解析】Java文件解析问题排查:无法找到OMML2MML.xsl的IO异常解析
java·开发语言·spring boot·spring·maven
叶 落1 天前
[Maven 基础课程]10_Maven 私服
maven·maven 入门·maven 基础课程·maven 基础
_院长大人_1 天前
阿里云云效将本地的maven相关文件批量推送到阿里云仓库以及使用
java·阿里云·maven
在下村刘湘2 天前
maven pom文件中<dependencyManagement><dependencies><dependency> 三者的区别
java·maven
李昊哲小课2 天前
Maven 完整教程
java·maven
龙茶清欢2 天前
7、revision 是 Maven 3.5+ 引入的现代版本管理机制
java·elasticsearch·maven
柯南二号2 天前
【安装配置】【搭建本地Maven私服】
java·maven