当前位置: 首页 > news >正文

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避免冲突):

<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 配置文件路径:

<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 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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://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定义请求映射:

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 核心组件的实现细节,以及开发中常用的 “参数绑定” 技术。
http://www.dtcms.com/a/414300.html

相关文章:

  • 山东省建设厅继续教育网站网站做商标在那类
  • 【Linux网络】Socket编程:UDP网络编程实现DictServer
  • 虚拟空间可以做视频网站么删除重装wordpress
  • 【Agent】在基于WSL2的Linux的ALSA输出音频
  • LeetCode:68.寻找两个正序数组的中位数
  • 在 Unity 中使用 SoundTouch 插件控制音频倍速播放
  • 通过keepalived搭建MySQL双主模式的MySQL集群
  • MySQL压缩表创建指南
  • 简述网站的建站流程做一个旅游团网站怎么做
  • ApplicationContext接口实现(三)
  • 英文版网站建设的意义网站怎么做友链
  • 第5章:前后端编码规范
  • Java实现文件下载
  • Python api示例
  • StarRocks:Connect Data Analytics with the World
  • deepseek Kotlin Channel 详细学习指南
  • 网站市场推广东莞 网站制作
  • 面试题回顾
  • Visual Studio 2026 IDE发布了
  • 在MCUXpresso IDE中建立使用静态库的工程
  • 【人工智能通识专栏】第二十八讲:IDE集成Deepseek
  • 电子商务网站建设参考书软文时光发稿平台
  • Flask与Django:Python Web框架的哲学对决
  • Android 消息循环机制
  • 若依前后端分离版集成到企业微信自建应用
  • 电商网站建设心得ps做网站首页怎么运用起来
  • 免费建一级域名网站精品网站设计
  • windows电脑如何执行openssl rand命令
  • 【MySQL✨】MySQL 入门之旅 · 第十一篇:常见错误排查与解决方案
  • Word表格数据提取工具