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

【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.lryc.cn/news/283649.html

相关文章:

  • HPsocket 在 C# 中的运用:一款优秀的 socket 通信框架
  • 黑豹程序员-MyBatisPlus封装SQL的where条件的对象 QueryWrapper
  • 每日一题——LeetCode1252.奇数值单元格的数目
  • C#学习笔记3-函数与单元测试
  • osg屏幕事件处理器和状态集操控器学习
  • 中国泛娱乐出海视频字幕解决方案
  • iOS原生应用屏幕适配完整流程
  • 【征服redis8】Redis的AOF持久化
  • 【动态规划】【二分查找】【C++算法】730. 统计不同回文子序列
  • android 和 opencv 开发环境搭建
  • elasticsearch[一]-索引库操作(轻松创建)、文档增删改查、批量写入(效率倍增)
  • tp6框架中Http类 请求的header、body参数传参 及post、file格式
  • 基于极限学习机的图像处理,基于ELM的图像分割,基于极限学习机的细胞分割
  • ELAU C400/A8/1/1/1/00嵌入式系统中的模块动态加载技术
  • github clone Failed to connect to github.com port 443 after xxx ms
  • ARM的一些基础知识
  • 零售的数字化转型,利用AWS云服务资源如何操作?
  • 【通知】我的教学文章《Rust跟我学》已全部上线
  • Docker安全基线检查需要修复的一些问题
  • MobX 的 Observable Array,如何转换成一个普通的数组
  • spring boot集成loback日志配置
  • 【mars3d】 graphic.bindPopup(inthtml).openPopup()无需单击小车,即可在地图上自动激活弹窗的效果。
  • 工厂企业消防安全AI可视化视频智能监管解决方案
  • 【并发编程】synchornized原理
  • 计算机网络-ACL访问控制列表
  • 论文学习记录之SeisInvNet(Deep-Learning Inversion of Seismic Data)
  • 深度学习中的优化方法
  • 【设计模式之美】重构(三)之解耦方法论:如何通过封装、抽象、模块化、中间层等解耦代码?
  • Spring MVC学习之——Controller类中方法的返回值
  • IDEA中启动项目报堆内存溢出或者没有足够内存的错误