【Spring 篇】深入解析SpringMVC的组件魅力

在这里插入图片描述

SpringMVC,这个名字在Java Web开发者的耳边仿佛是一首动听的旋律,携着轻盈的氛围,带给我们一种愉悦的编程体验。但是,当我们深入探寻这个框架时,它的魅力远不止表面的简单,它由许多组件构成,每个组件都像乐章中的一段旋律,构筑出一幅和谐而富有层次的画卷。

控制器(Controller):引领交响乐的指挥者

在SpringMVC的舞台上,控制器是一位指挥者,负责协调整个交响乐的演奏。通过@Controller注解,我们将一个普通的Java类标记为控制器,告诉SpringMVC这是一个可以接受用户请求的角色。下面是一个简单的控制器示例:

@Controller
@RequestMapping("/music")
public class MusicController {@GetMapping("/play")public String playMusic(Model model) {model.addAttribute("song", "Spring Symphony");return "music-player";}
}

在这个例子中,MusicController被标记为@Controller,而@RequestMapping("/music")指定了该控制器处理的请求路径前缀。当用户请求/music/play时,playMusic方法将被调用,将音乐名传递给视图。

视图解析器(View Resolver):翩翩起舞的芭蕾演员

在交响乐的演奏过程中,芭蕾舞台上的演员在音乐的引导下翩翩起舞,而在SpringMVC的舞台上,视图解析器扮演了这个角色。它负责将控制器返回的逻辑视图名解析为实际的视图页面。在spring-mvc.xml中配置视图解析器:

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/views/" /><property name="suffix" value=".jsp" />
</bean>

上述配置中,prefix指定了视图页面的前缀,suffix指定了视图页面的后缀。比如在前面的控制器例子中,return "music-player";中的music-player将被解析为/WEB-INF/views/music-player.jsp

模型(Model)和视图(View):交响乐团的演奏家

在交响乐团中,演奏家们各司其职,通过共同的努力演绎出一场精彩的音乐会。在SpringMVC中,模型和视图也是紧密合作的两个组件。控制器方法返回的ModelAndView对象包含了模型和视图的信息。

@Controller
@RequestMapping("/orchestra")
public class OrchestraController {@GetMapping("/playConcert")public ModelAndView playConcert() {ModelAndView modelAndView = new ModelAndView("concert");modelAndView.addObject("musician", "Spring Orchestra");return modelAndView;}
}

在这个例子中,playConcert方法返回了一个ModelAndView对象,其中指定了视图名为"concert",并通过addObject方法将乐团的名字传递给视图。

请求映射(Request Mapping):音符的节奏与和弦的和谐

在音乐中,每个音符都有其特定的节奏,而和弦的组合则创造出音乐的和谐。在SpringMVC中,@RequestMapping注解就是控制器方法的节奏,定义了请求的映射关系。它可以设置在类级别,也可以设置在方法级别。

@Controller
@RequestMapping("/musician")
public class MusicianController {@RequestMapping(value = "/playNote", method = RequestMethod.GET)public String playNote() {// 演奏一个音符return "music-note";}
}

在这个例子中,类级别的@RequestMapping("/musician")表示该控制器处理的请求路径前缀为"/musician",而方法级别的@RequestMapping(value = "/playNote", method = RequestMethod.GET)则表示处理路径为"/musician/playNote"的GET请求。

视图页面:乐谱上的音符和符号

音乐的美妙在于乐谱上的音符和符号,而在SpringMVC中,视图页面就是呈现最终音乐的媒介。通常使用JSP、Thymeleaf等技术来编写视图页面。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Music Note</title>
</head>
<body><h1>Play a beautiful note!</h1>
</body>
</html>

在这个简单的JSP页面中,通过<h1>标签展示了一段音符的文字。

请求参数和路径变量:交互中的对话

音乐会不仅仅是演奏者在台上的独奏,还包括与观众的互动。在SpringMVC中,请求参数和路径变量就是这场交互中的对话。

@Controller
@RequestMapping("/conversation")
public class ConversationController {@GetMapping("/talk")public String talk(@RequestParam(name = "topic", defaultValue = "Spring") String topic, Model model) {model.addAttribute("conversation", "Let's talk about " + topic + "!");return "talk";}
}

在这个例子中,talk方法接受一个名为topic的请求参数,如果请求中没有提供topic参数,则默认值为"Spring"。通过@RequestParam注解,SpringMVC将请求参数绑定到方法的参数上,并传递给视图。

表单处理:交互的演奏

音乐会中的互动不仅仅局限于对话,有时还需要观众参与演奏。在SpringMVC中,表单处理提供了强大的功能,使得用户能够向服务器提交数据。

@Controller
@RequestMapping("/audience")
public class AudienceController {@GetMapping("/joinOrchestra")public String joinOrchestraForm(Model model) {model.addAttribute("musician", new Musician());return "join-form";}@PostMapping("/processJoinForm")public String processJoinForm(@ModelAttribute("musician") Musician musician) {// 处理表单提交的参与乐团的音乐家信息return "joined-orchestra";}
}

在这个例子中,joinOrchestraForm方法展示了一个加入乐团的表单,通过@ModelAttribute注解,表单中的数据将被绑定到Musician对象。而processJoinForm方法则处理表单的提交。

拦截器(Interceptor):交响乐团的监察员

在音乐会上,总有监察员保证音乐会的正常进行,而在SpringMVC中,拦截器就是这样的监察员。拦截器可以在请求被处理前或处理后进行一些预处理或后处理。

public class ConcertInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 在请求处理前执行return true; // 返回true表示继续执行,返回false表示中断执行}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {// 在请求处理后但在视图渲染前执行}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {// 在整个请求完成后执行,包括视图渲染完成后}
}

在这个例子中,ConcertInterceptor实现了HandlerInterceptor接口,可以在preHandlepostHandleafterCompletion中执行相应的操作。在spring-mvc.xml中配置拦截器:

<mvc:interceptors><mvc:interceptor><mvc:mapping path="/secure/**" /><bean class="com.example.interceptor.ConcertInterceptor" /></mvc:interceptor>
</mvc:interceptors>

上述配置表示拦截路径为"/secure/**"的请求,并使用ConcertInterceptor进行处理。

结语

SpringMVC的组件如同一场音乐会,控制器、视图解析器、模型和视图、请求映射、视图页面、请求参数和路径变量、表单处理以及拦截器,每个组件都有其独特的角色,共同协作,构建出一幅美妙的交响乐。这篇博客只是带你浏览了这个庞大而美丽的音乐会场,而深入学习每个组件将让你更好地驾驭SpringMVC的优雅之处。在这个音乐之旅中,让我们激发内心的热情,不断地学习、实践,去创造出属于自己的音乐之美。愿你的编程旅途如同一场动听的交响乐,充满激情与深度。

作者信息

作者 : 繁依Fanyi
CSDN: https://techfanyi.blog.csdn.net
掘金:https://juejin.cn/user/4154386571867191

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

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

相关文章

从第一性原理看大模型Agent技术

本文由下面的内部分享视频文字稿重新整理而成 从第一性原理看大模型Agent技术 引 一个乐观主义者的悲观估计 随着大规模模型技术的兴起&#xff0c;我们正处于一个崭新的智能时代的黎明。我们有一个大胆的预测&#xff0c;未来的5到10年将可能带来一场大变局&#xff1a;99%的…

效率交响曲:AIOps 协调卓越运营

作者&#xff1a;来自 Elastic Priscilla_Parodi ​ 在我们探索 AIOps 之前&#xff0c;让我们先澄清一些与不同 Ops 的一些单并非全部相关的关键概念&#xff1a; 1&#xff09;DevOps&#xff1a;开发运维 你可能已经听说过 DevOps。 它是一种通过协作和自动化促进交付来集…

批评与自我批评组织生活会发言材料2024年六个方面

生活就像一场马拉松&#xff0c;成功需要坚持不懈的奔跑。每一步都可能会遇到挫折和困难&#xff0c;但只要你努力向前&#xff0c;坚持不放弃&#xff0c;你就一定能够迎接胜利的喜悦。不要害怕失败&#xff0c;因为失败是成功的垫脚石。相信自己的能力&#xff0c;追求自己的…

翻译: Streamlit从入门到精通 显示图表Graphs 地图Map 主题Themes 二

Streamlit从入门到精通 系列&#xff1a; 翻译: Streamlit从入门到精通 基础控件 一 1. 使用Streamlit显示图表Graphs 1.1 为什么我们需要可视化&#xff1f; 数据可视化通过将数据整理成更容易理解的格式来讲述故事&#xff0c;凸显趋势和异常点。好的可视化能够讲述一个故…

MySQL隐藏密码之mysql_config_editor

转载说明&#xff1a;如果您喜欢这篇文章并打算转载它&#xff0c;请私信作者取得授权。感谢您喜爱本文&#xff0c;请文明转载&#xff0c;谢谢。 1. mysql_config_editor介绍 mysql_config_editor是一个MySQL自带的一款用于安全加密登录的工具&#xff0c;使用这个工具&…

STM8入门|第一个工程

开发软件 不支持Keil&#xff0c;使用IAR for STM8&#xff0c;注意 IAR系列有很多种 STM8对应软件是 IAR for STM8 软件下载&#xff1a; 官网下载地址&#xff0c;官网版本下载比较麻烦&#xff0c;可以按教程网盘地址下载。 下载安装教程&#xff1a; https://www.cnblogs…

4. Mybatis 事务和Spring事务关系

大体上分为两种情况&#xff1a;方法上添加了事务注解Transactional 和方法上没有添加事务注解Transactional。 添加了Transactional 注解的在注入 bean 的时候就会被创建代理类&#xff0c;在代理类中使用增强逻辑进行事务处理。没有添加Transactional 注解的&#xff0c;在 …

【JaveWeb教程】(26) Mybatis基础操作(新增、修改、查询、删除) 详细代码示例讲解(最全面)

目录 1. Mybatis基础操作1.1 需求1.2 准备1.3 删除1.3.1 功能实现1.3.2 日志输入1.3.3 预编译SQL1.3.3.1 介绍1.3.3.2 SQL注入1.3.3.3 参数占位符 1.4 新增1.4.1 基本新增1.4.2 主键返回 1.5 更新1.6 查询1.6.1 根据ID查询1.6.2 数据封装1.6.3 条件查询1.6.4 参数名说明 1. Myb…

如何打赢稳定性之战?

文章目录 前言为什么总会出现问题呢&#xff1f;如何证明你的稳定性做的有效果&#xff1f;既是持久战&#xff0c;也是防御战1. 提前建筑好防御工事2. 以攻为守3. 找外部支援和配合 前言 随着23年年末期间&#xff0c;各大厂争先恐后的出现的各种线上故障&#xff0c;一时间“…

帆软使用总结-动态分组背景变色

1.开发界面设计 提示&#xff1a; ROUNDUP((ROW() - M) / N, 0) % 2 0row() 获取当前行号 M 标题行数 N 间隔行数 ROUNDUP() 向上取整 如果被2整除&#xff0c;改变背景颜色 当前公式&#xff1a;ROUNDUP((ROW() - 2) / 3, 0) % 2 02.效果演示

【题解】—— 每日一道题目栏

2024.1 【题解】—— LeetCode一周小结1 1. 1599. 经营摩天轮的最大利润 2. 466. 统计重复个数 3. 2487. 从链表中移除节点 4. 2397. 被列覆盖的最多行数 5. 1944. 队列中可以看到的人数 6. 2807. 在链表中插入最大公约数 7. 383. 赎金信 【题解】—— LeetCode一周小…

【前端框架】Vue2合集

一、Vue快速上手 1、Vue概念 vue 是一个用于构建用户界面的渐进式框架&#xff0c;由数据驱动 vue 的两种使用方式 vue 核心包开发&#xff1a;局部模块改造vue 核心包与 vue 插件 工程化开发&#xff1a;整站 开发 2、 创建实例 1、准备容器 <div id"app"&…

网站万词霸屏推广系统源码:实现关键词推广,轻松提高关键词排名,带完整的安装部署教程

现如今&#xff0c;互联网的快速发展&#xff0c;网站推广成为企业网络营销的重要手段。而关键词排名作为网站推广的关键因素&#xff0c;一直备受关注。罗峰给大家分享一款网站万词霸屏推广系统源码&#xff0c;该系统可实现关键词推广&#xff0c;有效提高关键词排名&#xf…

【教3妹学编程-算法题】回文串重新排列查询

3妹&#xff1a;好冷啊&#xff0c; 冻得瑟瑟发抖啦 2哥 : 这已经是你今年的第几次抖啦&#xff1f; 3妹&#xff1a;昨天20度&#xff0c;今天7度&#xff0c;直降13度呢&#xff0c;能不抖嘛 2哥 : 继哈尔滨之后&#xff0c;全国各地的城市也在发展旅游业。 河北喊话赵丽颖回…

使用mamba替换conda和anaconda配置环境安装软件

使用mamba替换miniconda和anaconda&#xff0c;原因是速度更快&#xff0c;无论是创建新环境还是激活环境 conda、mamba、anaconda都是蟒蛇的意思… 下载mambaforge wget https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-Linux-x86_64.sh ba…

乐意购项目前端开发 #3

一、icon的使用 前往网站挑选要的图标 iconfont-阿里巴巴矢量图标库https://www.iconfont.cn/?spma313x.manage_type_myprojects.i3.2.2f173a81fQSVOU 创建项目添加图标 选择Font Class 下载到本地 解压后会看到这个页面 在asserts目录下创建iconfont目录,然后将最底下的6…

数据库第一次作业

1.创建一个英雄表 create table t_hero ( id int primary key auto_increment, name varchar(10) unique not null, gender char(5) check (gender in (男,女)), grade char(5) default 5星, groups char(5) check (groups in (毁灭,巡猎,智识,存护,…

GPT与文心一言大模型的比较与展望

目录 前言1 GPT和文心一言简介2 GPT和文心一言的技术原理和基础架构3 GPT和文心一言的模型规模和参数数量4 GPT和文心一言的语言理解表现5 展望GPT和文心一言未来的发展5.1 技术改进5.2 应用扩展 结语 前言 随着人工智能技术的飞速发展&#xff0c;自然语言处理领域的两个引领…

swing快速入门(四十四)拖动、编辑JTree结点

注释很详细&#xff0c;直接上代码 新增内容&#xff08;源码细节知识点巨多&#xff0c;建议细看&#xff09; 1.设置JTree可编辑 2.使用JTree关联的数据模型实现节点的增删改 3.鼠标拖动节点事件设计及处理方法 4.手动刷新视图与自动刷新的方法区别 5.自定位节点视图方法 源码…

linux环境中一次启动多个jar包,并且设置脚本开机自启

1、编写启动脚本 我们在通过jar启动项目时&#xff0c;有时候会比较多&#xff0c;启动会比较麻烦&#xff0c;需要编写shell脚本启动&#xff0c;将启动脚本存放在需要启动的jar包路径下。&#xff08;文档存放在 /home/process_parent &#xff09; vim start.sh#! /bin/sh…