Spring MVC系统学习(一)——初识Spring MVC框架

news2026/4/2 16:29:30

1. Spring MVC 介绍

1.1 Spring MVC 概述

Spring MVC(Model-View-Controller)是 Spring 框架中用于构建 Web 应用的模块,它实现了基于模型-视图-控制器(MVC)设计模式的 Web 应用程序开发。MVC 模式通过将应用逻辑、数据和界面分开,促进应用的分层设计:

  • Model(模型):封装了应用的数据和业务逻辑。
  • View(视图):负责将模型数据展示给用户。
  • Controller(控制器):负责接收用户请求,调用服务处理数据,并将结果返回给视图。

Spring MVC 是构建 Java Web 应用程序的常用工具,提供了灵活的、可扩展的结构,支持多种视图技术,如 JSP、Thymeleaf、FreeMarker 等。

1.2 Spring MVC 特点
  • 轻量级框架:依赖 Spring 核心特性,不需要额外的复杂配置。
  • 松耦合:通过 IoC(控制反转)解耦对象之间的依赖关系。
  • 可扩展性:提供了一组接口和类,允许开发者根据需求扩展功能。
  • RESTful 支持:Spring MVC 天生支持 RESTful 风格的 Web 应用程序。
  • 强大的数据绑定和校验:Spring MVC 提供了便捷的表单数据绑定和输入数据校验功能。

2. Spring MVC 入门程序

为了理解 Spring MVC 的基本概念,下面通过一个简单的入门示例程序展示其工作原理。

2.1 项目结构
SpringMVC-Example
│   pom.xml
└───src
    └───main
        ├───java
        │   └───com
        │       └───example
        │           ├───controller
        │           │       HomeController.java
        │           └───config
        │                   WebConfig.java
        └───webapp
            ├───WEB-INF
            │       web.xml
            │       views
            │           └───home.jsp
2.2 代码示例

1. pom.xml

<dependencies>
    <!-- Spring MVC 依赖 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.3.9</version>
    </dependency>
    <!-- JSP 支持 -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.1</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

2. web.xml

<web-app>
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring-config.xml</param-value>
    </context-param>
</web-app>

3. HomeController.java

package com.example.controller;

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

@Controller
public class HomeController {

    @RequestMapping("/")
    public ModelAndView home() {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("home");
        modelAndView.addObject("message", "欢迎来到Spring MVC世界!");
        return modelAndView;
    }
}

4. WebConfig.java

package com.example.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.example.controller")
public class WebConfig implements WebMvcConfigurer {
}

5. home.jsp

<!DOCTYPE html>
<html>
<head>
    <title>Home</title>
</head>
<body>
    <h1>${message}</h1>
</body>
</html>

3. Spring MVC 工作原理

Spring MVC 的工作流程可以概括为以下几个步骤:

  1. 客户端发送请求:用户通过浏览器发送一个 HTTP 请求。
  2. DispatcherServlet 接收请求:Spring MVC 的核心是 DispatcherServlet,它是整个框架的控制中枢,负责将请求分发到相应的控制器。
  3. 寻找合适的控制器DispatcherServlet 通过 HandlerMapping 找到匹配的控制器。
  4. 执行控制器逻辑:控制器处理用户请求,并返回一个 ModelAndView 对象,包含视图名称和模型数据。
  5. 视图解析器处理视图ViewResolver 根据控制器返回的视图名称找到相应的视图页面(如 JSP)。
  6. 视图渲染:视图页面根据模型数据生成动态 HTML 内容。
  7. 响应返回客户端:生成的 HTML 页面返回到用户的浏览器中进行展示。

4. 小结

  • Spring MVC 是一个基于 MVC 模式的 Web 开发框架,它集成了 Spring 框架的核心特性,如 IoC 和 DI,适合构建复杂的 Web 应用程序。
  • 通过一个简单的入门示例,我们可以看到 Spring MVC 如何轻松实现请求处理和页面渲染。
  • Spring MVC 的工作流程 体现了其松耦合、扩展性强的特点,同时支持多种视图技术,使得它非常灵活且易于维护。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2167562.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Qemu开发ARM篇-5、buildroot制作根文件系统并挂载启动

文章目录 1、 buildroot源码获取2、buildroot配置3、buildroot编译4、挂载根文件系统 在上一篇 Qemu开发ARM篇-4、kernel交叉编译运行演示中&#xff0c;我们编译了kernel&#xff0c;并在qemu上进行了运行&#xff0c;但到最后&#xff0c;在挂载根文件系统时候&#xff0c;挂…

基于 Redis 实现滑动窗口的限流

⏳ 限流场景&#xff1a;突发流量&#xff0c;恶意流量&#xff0c;业务本身需要 基于 Redis 实现滑动窗口的限流是一种常见且高效的做法。Redis 是一种内存数据库&#xff0c;具有高性能和支持原子操作的特点&#xff0c;非常适合用来实现限流功能。下面是一个使用 Redis 实现…

谷歌浏览器如何把常用的网址创建快捷方式到电脑桌面?

1、打开想要创建快捷方式的网页之后&#xff0c;点击谷歌浏览器右上角的【三个点】 2、选择【保存并分享】&#xff0c;再选择【创建快捷方式】 3、之后在浏览器上方弹出的框中&#xff0c;重新命名快捷方式。 然后&#xff0c;点击【创建】 4、之后&#xff0c;即可在电…

手机解压软件加密指南:让文件更安全

在数字化时代&#xff0c;文件加密对于保护个人隐私和敏感信息的重要性不言而喻。随着互联网的飞速发展&#xff0c;我们的生活和工作越来越依赖于数字设备和网络。 然而&#xff0c;这也带来了一系列的安全风险&#xff0c;如黑客攻击、数据泄露等。文件加密技术成为了保护我…

mac m1 electron生产环境使用prisma,sqlite

最近在用electron开发一个适合自己的小应用&#xff0c;技术选型中使用prisma和sqlite在进行数据存储&#xff0c;写这篇文章的目的就是用来记录下遇到的一些问题。 开发环境使用prisma 1、开发环境使用prisma非常的简单&#xff0c;只需要按照教程安装prisma&#xff0c;然后…

vue嵌套路由刷新页面空白问题

问题描述 在vue项目开发中遇到这样一个问题&#xff0c;在history模式下通过页面点击路由跳转可以打开页面&#xff0c;但是在当前页面刷新就空白了&#xff0c;如下&#xff1a; 点击路由跳转页面是有的 刷新页面就空白 代码 {path: "/home",name: "home&qu…

TreeMap源码详解

优质博文&#xff1a;IT-BLOG-CN 背景&#xff1a;昨天有人问我&#xff0c;他想将Map中的Key按照顺序进行遍历&#xff0c;我说直接使用keySet方法获取到Set集合&#xff0c;因为它是集成Collection接口&#xff0c;所以包含了sort方法后遍历取value值即可。但当看到TreeMap的…

差旅报销的数智化转型 以分贝通为例

企业差旅报销的数智化转型之所以势在必行&#xff0c;源于传统差旅报销方式在效率、合规性和成本控制等方面存在严重不足。作为服务企业的一体化差旅报销管理平台&#xff0c;分贝通结合数千家合作伙伴的实际案例为企业提供定制化的差旅报销数智化解决方案&#xff0c;帮助企业…

【Python报错已解决】AttributeError: ‘tuple‘ object has no attribute ‘log_softmax‘

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 专栏介绍 在软件开发和日常使用中&#xff0c;BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

CentOS 7 中安装 docker 环境

作者&#xff1a;程序那点事儿 日期&#xff1a;2023/02/15 02:31 官网地址 官网文档 docker三种网络模式 Docker CE 支持 64 位版本 CentOS 7&#xff0c;并且要求内核版本不低于 3.10&#xff0c; CentOS 7 满足最低内核的要求。 Docker 分为 CE 和 EE 两大版本。CE 即社区…

前端开发必备:实用Tool封装工具类方法大全

程序员必备宝典网站https://tmxkj.top/#/ 1.判断空值 /*** 判断是否是空值*/ export function isEmpty(value) {if (typeof value string) {return value.length 0 || value "";} else if (typeof value number) {return value 0;} else if (Array.isArray(va…

TypeScript 设计模式之【抽象工厂模式】

文章目录 抽象工厂模式:一个神奇的玩具制造商主要思想:玩具制造商的秘密这个制造商有什么好处和坏处?如何打造这个神奇的玩具制造商?代码实现案例抽象工厂模式主要优点抽象工厂模式主要缺点抽象工厂模式适用场景总结 抽象工厂模式:一个神奇的玩具制造商 想象一下&#xff0c…

(done) 声音信号处理基础知识(7) (Understanding Time Domain Audio Features)

参考&#xff1a;https://www.youtube.com/watch?vSRrQ_v-OOSg&t1s 时域特征包括&#xff1a; 1.幅度包络 2.均方根能量 3.过零率 振幅包络的定义&#xff1a;一个 frame 里&#xff0c;所有采样点中最大的振幅值 一个形象的关于振幅包络的可视化解释如下&#xff1a;…

基于SpringBoot + Vue的大学生日常消费管理系统设计与实现

文章目录 前言一、详细操作演示视频二、具体实现截图三、技术栈1.前端-Vue.js2.后端-SpringBoot3.数据库-MySQL4.系统架构-B/S 四、系统测试1.系统测试概述2.系统功能测试3.系统测试结论 五、项目代码参考六、数据库代码参考七、项目论文示例结语 前言 &#x1f49b;博主介绍&a…

fiddler抓包07_抓IOS手机请求

课程大纲 前提&#xff1a;电脑和手机连接同一个局域网 &#xff08;土小帽电脑和手机都连了自己的无线网“tuxiaomao”。&#xff09; 原理如下&#xff1a; 电脑浏览器抓包时&#xff0c;直接就是本机网络。手机想被电脑Fiddler抓包&#xff0c;就要把Fiddler变成手机和网络…

浅拷贝和深拷贝(Java 与 JavaScript)

一、Java 浅拷贝和深拷贝 在Java中&#xff0c;浅拷贝和深拷贝的主要区别在于对对象的引用和内容的复制方式。 浅拷贝 Java 的类型有基本数据类型和引用类型&#xff0c;基本数据类型是可以由 CPU 直接操作的类型&#xff0c;无论是深拷贝还是浅拷贝&#xff0c;都是会复制出…

ANSYS Workbench晶体结构Voronoi泰森多边形建模

在ANSYS Workbench内建立包含晶格及晶格边界在内的晶体结构模型&#xff0c;可用于模拟多种物理现象及材料行为。晶格模型适用于研究微观尺度下的材料性质&#xff0c;以及它们如何影响宏观性能&#xff0c;如进行金属晶体结构建模及断裂的模拟等。 晶体结构模型可采用CAD Vo…

fastapp-微信开发GPT项目第一课

0. 开发说明 在学习开发本项目之前&#xff0c;必须保证有以下知识储备和环境工具。 技术栈说明python>3.9、pydantic>2.7.1python基础&#xff0c;http协议fastapi>0.111.0web协程异步框架&#xff0c;有web开发基础&#xff0c;异步编程&#xff0c;类型标注[pyth…

银河麒麟操作系统中查看动态库函数的方法

银河麒麟操作系统中查看动态库函数的方法 1、查看单个动态库中的函数2、查找特定函数位于哪个动态库中 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在Linux系统&#xff0c;包括银河麒麟操作系统中&#xff0c;动态库&#xff08;.so文件…

单片机项目合集列表与专栏说明——Excel合集列表目录查阅(持续更新)

阿齐Archie《单片机项目合集》专栏项目 为方便查找本专栏的项目&#xff0c;特整理Excel合集列表供查阅&#xff08;可搜索或按系列查找&#xff09; 持续更新链接如下&#xff1a; 阿齐单片机项目合集 (kdocs.cn)https://www.kdocs.cn/l/cmrxCxJN05YN 打开链接如下Exce表所…