从 01 开始 从 01 开始
首页
  • 📚 计算机基础

    • 计算机简史
    • 数字电路
    • 计算机组成原理
    • 操作系统
    • Linux
    • 计算机网络
    • 数据库
    • 编程工具
    • 装机
  • 🎨 前端

    • Node
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Windows 使用技巧
  • 手机相关技巧
  • 最全面的输入法教程
  • 最全面的浏览器教程
  • Office
  • 图片类工具
  • 效率类工具
  • 最全面的 RSS 教程
  • 码字工具
  • 各大平台
  • 校招
  • 五险一金
  • 职场规划
  • 关于离职
  • 杂谈
  • 自媒体
  • 📖 读书

    • 读书工具
    • 走进科学
  • 🌍 英语

    • 从零开始学英语
    • 英语兔的相关视频
    • Larry 想做技术大佬的相关视频
  • 🏛️ 政治

    • 新闻合订本
    • 反腐
    • GFW
    • 404 内容
    • 审查与自我审查
    • 互联网
    • 战争
    • 读书笔记
  • 💰 经济

    • 关于税
    • 理财
  • 💪 健身

    • 睡眠
    • 皮肤
    • 口腔健康
    • 学会呼吸
    • 健身日志
  • 🏠 其他

    • 驾驶技能
    • 租房与买房
    • 厨艺
  • 电影

    • 电影推荐
  • 电视剧
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 小说
  • 关于本站
  • 关于博主
  • 打赏
  • 网站动态
  • 友人帐
  • 从零开始搭建博客
  • 搭建邮件服务器
  • 本站分享
  • 🌈 生活

    • 2022
    • 2023
    • 2024
    • 2025
  • 📇 文章索引

    • 文章分类
    • 文章归档

晓林

程序猿,自由职业者,博主,英语爱好者,健身达人
首页
  • 📚 计算机基础

    • 计算机简史
    • 数字电路
    • 计算机组成原理
    • 操作系统
    • Linux
    • 计算机网络
    • 数据库
    • 编程工具
    • 装机
  • 🎨 前端

    • Node
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Windows 使用技巧
  • 手机相关技巧
  • 最全面的输入法教程
  • 最全面的浏览器教程
  • Office
  • 图片类工具
  • 效率类工具
  • 最全面的 RSS 教程
  • 码字工具
  • 各大平台
  • 校招
  • 五险一金
  • 职场规划
  • 关于离职
  • 杂谈
  • 自媒体
  • 📖 读书

    • 读书工具
    • 走进科学
  • 🌍 英语

    • 从零开始学英语
    • 英语兔的相关视频
    • Larry 想做技术大佬的相关视频
  • 🏛️ 政治

    • 新闻合订本
    • 反腐
    • GFW
    • 404 内容
    • 审查与自我审查
    • 互联网
    • 战争
    • 读书笔记
  • 💰 经济

    • 关于税
    • 理财
  • 💪 健身

    • 睡眠
    • 皮肤
    • 口腔健康
    • 学会呼吸
    • 健身日志
  • 🏠 其他

    • 驾驶技能
    • 租房与买房
    • 厨艺
  • 电影

    • 电影推荐
  • 电视剧
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 小说
  • 关于本站
  • 关于博主
  • 打赏
  • 网站动态
  • 友人帐
  • 从零开始搭建博客
  • 搭建邮件服务器
  • 本站分享
  • 🌈 生活

    • 2022
    • 2023
    • 2024
    • 2025
  • 📇 文章索引

    • 文章分类
    • 文章归档
  • JavaSE

  • JavaSenior

  • JavaEE

  • JavaWeb

  • Spring

  • 主流框架

  • SpringMVC

    • SpringMVC 基本概念
    • SpringMVC 入门案例
      • 需求
      • 新建 Maven 项目
      • 导入依赖
      • 配置前端控制器
      • 创建配置文件
      • 配置服务器
      • 新建控制器类
      • 配置 IoC
      • 加载配置文件
      • 新建 success.jsp
      • 配置视图解析器
      • 修改 index.jsp
      • 测试
      • 总结
    • SpringMVC 中的组件介绍
    • RequestMapping 注解的作用
    • 请求参数的绑定
    • 自定义类型转换器
    • 使用原生的 Servlet-API
    • SpringMVC 常用注解
    • 响应数据和结果视图
    • 文件上传
    • 文件上传之跨服务器
    • SpringMVC 的异常处理
    • SpringMVC 的拦截器
    • SSM 整合
  • SpringBoot

  • Java
  • SpringMVC
2023-05-15
目录

SpringMVC 入门案例

# 10.SpringMVC 入门案例

我们用 SpringMVC,完成一个实际的案例 ‍

# 需求

有一个 index.jsp 页面,上面有个超链接;

当点击超链接时,会发送一个请求,我们定义一个 Servlet,处理该请求;然后转发到成功页面。

我们分两步完成:

  1. 搭建开发环境(例如引入依赖,配置文件等)
  2. 编写入门的程序(编写 Servlet)

# 新建 Maven 项目

新建一个 Maven 的项目,使用的骨架是 webapp,这里我创建一个叫 LearnSpringMVC 的项目;相关源码已上传到 GitHub (opens new window) 和 Gitee (opens new window) 上。

使用该骨架,默认目录结构是不全的,我们得创建一个 java 目录:

‍

# 导入依赖

这里我们统一使用 5.0.2 的版本,因此配置了一个属性 spring.version,然后在依赖中使用该属性

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <spring.version>5.0.2.RELEASE</spring.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>jsp-api</artifactId>
        <version>2.0</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.1</version>
        <scope>test</scope>
    </dependency>

</dependencies>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48

# 配置前端控制器

要使用 SpringMVC,第一件事就是配置前端控制器,其实就是一个 Servlet,由 SpringMVC 提供的。

我们在 web.xml 中这样配置:

<servlet>
    <servlet-name>DispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>DispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
1
2
3
4
5
6
7
8
9

‍ 简单来说,就是任何请求都先经过前端控制器,由控制权负责统一的分发调度

# 创建配置文件

我们使用 SpringMVC 框架,也是需要一个配置文件的,我们创建一个 springmvc.xml:

‍

文件的内容:这里我们加上一些约束

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:mvc="http://www.springframework.org/schema/mvc"
        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/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">

</beans>
1
2
3
4
5
6
7
8
9
10
11
12
13
14

‍

# 配置服务器

此时我们基本上搭建好了环境,我们做了如下事情

  1. 创建 Maven 项目
  2. 完善 Maven 的目录结构
  3. 引入 SpringMVC 的依赖
  4. 配置前端控制器
  5. 创建配置文件

接下来我们先试着部署下,我们新建一个运行配置:

‍

选择 Tomcat 服务器:

然后在配置底部点击修复:

在弹框中选择第一个

并且我们设置路径为根路径:

# 新建控制器类

在 SpringMVC 中,用来处理请求的叫控制器类。 ‍ 我们新建一个控制器类,并新建一个方法(SpringMVC 是用方法来处理请求的)

package com.peterjxl.controller;


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

@Controller
public class HelloController {

    @RequestMapping(path = "/hello")
    public String sayHello() {
        System.out.println("Hello, World!");
        return "success";
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

代码说明:

  1. 这里我们使用了 2 个注解:@Controller 的作用是告诉 SpringMVC,这是一个控制器;
  2. 然后方法上的注解 @RequestMapping 则是配置路径的,当访问 /hello 时会执行该方法
  3. 我们返回的字符串 success,SpringMVC 会当成是一个静态资源文件的文件名 ‍

# 配置 IoC

要让一个方法执行,首先得创建一个对象;而我们是学过 Spring 的,我们可以将这个类交给 IoC 来管理,此时我们创建的配置文件就起作用了,我们在 springmvc.xml 中配置要扫描的包:

<!-- 开启注解扫描 -->
<context:component-scan base-package="com.peterjxl"/>
1
2

‍

# 加载配置文件

我们创建的这个 springmvc.xml 配置文件,如何让 SpringMVC 框架加载呢?如果不加载的话,我们就无法创建这个容器,并读取里面的配置,然后扫描包里的类,创建对象;

此时我们可以在 web.xml 中加载这个配置文件,我们添加一个初始化参数的配置(第 4 ~ 7 行):

<servlet>
    <servlet-name>DispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:springmvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
1
2
3
4
5
6
7
8
9

‍ 这个 init-param 的配置是指,给 DispatcherServlet 这个类的属性 contextConfigLocation 赋值,值是 springmvc.xml。然后控制器类,就可以帮我们加载配置文件了

然后我们配置 load-on-startup 参数,表明服务器一启动,就加载配置文件。

# 新建 success.jsp

我们在 WEB-INF 目录下,新建一个目录 pages,然后新建一个 success.jsp:这个文件用来当作请求成功后的页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>Title</title>
    </head>
    <body>
      <h1>入门成功</h1>
    </body>
</html>
1
2
3
4
5
6
7
8
9

‍

# 配置视图解析器

之前我们说过,控制器类的方法中,返回的字符串,SpringMVC 会当成是一个 JSP 文件的名字,那么去何处寻找这个文件呢?此时我们就可以用 SpringMVC 的视图解析器,我们在 springmvc.xml 中配置:

 <!-- 视图解析器 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/pages/"/> <!-- 前缀,可以理解为是文件的目录 -->
    <property name="suffix" value=".jsp"/>  <!-- 后缀,可以理解为是文件后缀名 -->
</bean>
1
2
3
4
5

当我们这样配置后,SpringMVC 就知道会去哪个目录寻找文件,并且拼接文件名+文件后缀,然后返回文件。

# 修改 index.jsp

然后我们就可以在 index.jsp 中,加上超链接了:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <h3>入门程序</h3>
        <a href="hello">入门程序</a>
    </body>
</html>
1
2
3
4
5
6
7
8
9
10

‍

# 测试

我们访问 localhost: 8080(其实默认就会寻找 index.jsp 页面然后访问),然后点击超链接,可以看到能成功调整,并且 IDEA 控制台有打印 Hello, World!,因此我们的需求完成了。

# 总结

经过这么多的配置,我们总算是成功使用 SpringMVC 做了一个小案例,可能读者会有点晕,因此我们特此梳理一下。

首先我们可以将过程分为两部分:

  1. 启动服务器的过程,加载一些配置文件
  2. 发送 HTTP 请求,后台处理这个请求 ‍

# 启动服务器的过程

‍

  1. 首先,我们在 web.xml 中配置了前端控制器;
  2. 然后我们配置了 load-on-startup 参数,并设置为 1,这样在服务器创建的时候,前端控制器就会被创建
  3. 然后前端控制器,会加载 springmc.xml 文件
  4. springmc.xml 中,我们开启了注解扫描,因此会去扫描代码中的控制器类,并加载到容器当中(默认是单例的)
  5. 然后我们配置了视图解析器,会帮我们解析文件 ‍

# 请求的过程

‍

  1. 首先我们的 index.jsp 页面,会请求 hello 路径;

  2. 由于我们配置了前端控制器 DispatcherServlet,该请求首先会交给它处理

  3. DispatcherServlet 可以简单理解为是一个管理员,指挥中心

    1. DispatcherServlet 会首先根据路径,寻找到具体的控制器类
    2. sayHello 方法执行,会打印 Hello, World!,然后返回结果 success 给 DispatcherServlet
    3. DispatcherServlet 会找视图解析器,根据结果找到具体的文件
    4. DispatcherServlet 将文件返回给客户端,也就是浏览器,至此,请求完成

示意图:

# 源码

本项目已将源码上传到 GitHub (opens new window) 和 Gitee (opens new window) 上。并且创建了分支 demo1,读者可以通过切换分支来查看本文的示例代码。 ‍

上次更新: 2025/6/3 09:31:54
SpringMVC 基本概念
SpringMVC 中的组件介绍

← SpringMVC 基本概念 SpringMVC 中的组件介绍→

最近更新
01
新闻合订本 2025-10
10-31
02
2025 年 10 月记
10-30
03
用 AI 批量优化思源笔记排版
10-15
更多文章>
Theme by Vdoing | Copyright © 2022-2025 | 粤 ICP 备 2022067627 号 -1 | 粤公网安备 44011302003646 号 | 点击查看十年之约
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式