springMVC 三大组件解析
springMVC组件概述
-
DispatcherServlet(调度器Servlet): DispatcherServlet 是 Spring MVC 的前端控制器(Front Controller)。它负责接收来自客户端的请求,然后将请求分发给相应的处理器(Controller)进行处理。DispatcherServlet 还负责管理其他 Spring MVC 组件的生命周期。
-
HandlerMapping(处理器映射): HandlerMapping 负责将请求映射到具体的处理器(Controller)。它决定了哪个处理器应该处理特定的请求。Spring MVC 提供了多种 HandlerMapping 的实现,包括注解扫描、配置文件等方式。
-
Controller(控制器): Controller 是处理请求的组件,它负责处理用户请求并生成响应。在 Spring MVC 中,Controller 通常是一个带有
@Controller注解的类,其中的方法使用@RequestMapping注解来指定处理的请求路径。 -
Model(模型): Model 用于封装处理器方法处理请求时所需要的数据。在处理器方法中,你可以通过方法参数传递 Model 对象,并在方法内设置属性,这些属性最终会被传递给视图进行渲染。
-
ViewResolver(视图解析器): ViewResolver 负责将逻辑视图名解析为实际的视图对象。它决定了返回给用户的视图应该是什么。Spring MVC 支持多种视图解析器,包括 InternalResourceViewResolver(用于 JSP 视图)、FreeMarkerViewResolver、ThymeleafViewResolver 等。
-
View(视图): View 负责将模型数据渲染成最终的响应输出。在 Spring MVC 中,视图可以是 JSP、FreeMarker、Thymeleaf 等模板引擎生成的页面。
-
Interceptor(拦截器): Interceptor 允许你在请求被处理之前或之后执行一些操作。拦截器可以用于日志记录、权限检查、性能监控等。在 Spring MVC 中,你可以通过实现
HandlerInterceptor接口来定义拦截器。 -
HandlerAdapter(处理器适配器): HandlerAdapter 负责将处理器(Controller)包装成一个能够被 DispatcherServlet 调用的处理器对象。它使得不同类型的处理器能够统一被调用。
InternalResourceViewResolver(视图解析器)
通过查看它的源码可以知道他可以设置前缀后缀
public InternalResourceViewResolver(String prefix, String suffix) {this();this.setPrefix(prefix);this.setSuffix(suffix);}
在配置文件里可以这样设置
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/views/" /> 前缀<property name="suffix" value=".jsp" /> 后缀 </bean>
RequestMappingHandlerAdapter(处理器适配器)
源码
可以知道它可以设置一个消息转换器列表。消息转换器在 Spring MVC 中负责处理请求和响应的数据格式转换,例如将 Java 对象转换为 JSON 格式或将 JSON 数据转换为 Java 对象。
public void setMessageConverters(List<HttpMessageConverter<?>> messageConverters) {this.messageConverters.clear();this.messageConverters.addAll(messageConverters);}
配置文件
可以把返回的字符串自动转换成json字符串 用的是jackson
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"><property name="MessageConverters"><list><bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> </bean></list></property>
RequestMappingHandlerMapping(处理器映射器)
@Controller public class MyController {
@RequestMapping("/hello")
public String hello() {// 处理请求的业务逻辑return "helloPage"; // 返回视图名
}
// 支持多个映射路径
@RequestMapping(value = {"/greet", "/welcome"})
public String greet() {// 处理请求的业务逻辑return "greetPage"; // 返回视图名
}
// 指定请求方法
@RequestMapping(value = "/greetPost", method = RequestMethod.POST)
public String greetPost() {// 处理POST请求的业务逻辑return "greetPostPage"; // 返回视图名
}
// 接收路径变量
@RequestMapping("/user/{id}")
public String getUserById(@PathVariable Long id) {// 使用路径变量id,处理请求的业务逻辑return "userPage"; // 返回视图名
}
}
相关文章:
springMVC 三大组件解析
springMVC组件概述 DispatcherServlet(调度器Servlet): DispatcherServlet 是 Spring MVC 的前端控制器(Front Controller)。它负责接收来自客户端的请求,然后将请求分发给相应的处理器(Control…...
聊聊nginx的keepalive_time参数
序 本文主要研究一下nginx的keepalive_time参数 keepalive_time Syntax: keepalive_time time; Default: keepalive_time 1h; Context: http, server, location This directive appeared in version 1.19.10.nginx的1.19.10版本新增了keepalive_time参数,用于限…...
沐风老师3DMAX键盘球建模方法详解
3DMAX键盘球建模教程 本教程给大家分享一个3dMax键盘球的建模方法过程。在学习本教程之前,大家需要对3dMax基本操作及建模知识有所掌握,还是那句话:做实例的前提是选学习基础知识和掌握3dMax的基本操作。 下面就给大家一步一步讲解演示3dMax…...
算法通关村第一关—白银挑战—链表高频面试算法题—查找两个链表的第一个公共子节点
文章目录 查找两个链表的第一个公共子节点(1)暴力求解法(2)使用哈希Hash⭐(3)使用集合⭐ - 与Hash类似(4)使用栈⭐(5)仍有更多方法,作者尚未理解&…...
C/C++ 发送与接收HTTP/S请求
HTTP(Hypertext Transfer Protocol)是一种用于传输超文本的协议。它是一种无状态的、应用层的协议,用于在计算机之间传输超文本文档,通常在 Web 浏览器和 Web 服务器之间进行数据通信。HTTP 是由互联网工程任务组(IETF…...
【算法集训】基础数据结构:一、顺序表(下)
由于今天的题目是昨天剩下的,所以只有两道题,也非常简单,刷完下班~~~嘿嘿 第六题 2656. K 个元素的最大和 https://leetcode.cn/problems/maximum-sum-with-exactly-k-elements/description/ 很简单的思路,要得到得分最大的&…...
[Java][项目][战斗逻辑]基于JFrame的文字游戏
项目注解: Core:启动文件 AttributeBean:玩家属性 BackpackedBean:背包设计(未完成) BackpackedFrame:背包页面(未完成) BattleField:战斗逻辑(核心&…...
顺序表和链表面试题
文章目录 顺序表(1)原地移除数组中所有的元素val,要求时间复杂度为O(N),空间复杂度为O(1)。(2)删除有序数组中的重复项(3)合并两个有序数组 链表(1)删除链表中等于给定值 val 的所有节点(2)反转一个单链表(3) 合并两个有序链表(4)链表的中间结点(5)链表中…...
树_二叉搜索树累加求和
//给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 // node.val 的值之和。 // // 提醒一下,二叉搜索树满足下列约束…...
gcc编译流程概述
前言 本篇文章介绍gcc编译器编译C文件的流程概述 比如我们创建了一个.c文件hello_gcc.c #include <stdio.h> int main() {printf("Hello gcc!!!\n");return 0; }最简单的方式就是在终端使用命令 gcc hello_gcc.c -o hello_gcc // 编译、汇编、链接 ./hello_…...
【web安全】ssrf漏洞的原理与使用
前言 菜某对ssrf漏洞的总结。 ssrf的作用 主要作用:访问外界无法访问的内网进行信息收集。 1.进行端口扫描,资源访问 2.指纹信息识别,访问相应的默认文件 3.利用漏洞或者和payload进一步运行其他程序 4.get类型漏洞利用,传参数…...
佳易王会员管理软件店铺积分以及积分兑换系统
一、佳易王会员管理软件大众版 部分功能简介: 1、会员信息登记 :可以直接使用手机号登记,也可以使用实体卡片,推荐用手机号即可。 2、会员卡类型 :可以自由设置卡的类型,比如:充值卡、计次卡、…...
Django回顾【二】
目录 一、Web框架 二、WSGI协议 三、 Django框架 1、MVC与MTV模型 2、Django的下载与使用 补充 3、启动django项目 补充 5、 Django请求生命周期 四、路由控制 1、路由是什么? 2、如何使用 3、path详细使用 4、re_path详细使用 5、反向解析 6、路由…...
[Ubuntu 18.04] RK3399搭建SSH服务实现远程访问
SSH(Secure Shell)是一种网络协议和软件,用于安全地远程登录到计算机并进行网络服务的加密通信。它提供了加密的认证和安全的数据传输,使得在不安全的网络中进行远程管理和访问变得更加安全。 以下是 SSH 服务的一些关键特点和用途: 安全认证:SSH 使用公钥/私钥加密技术…...
Linux进程间通信之共享内存
📟作者主页:慢热的陕西人 🌴专栏链接:Linux 📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言 本博客主要内容讲解共享内存原理和相关接口的介绍,以及一个…...
lv11 嵌入式开发 RTC 17
目录 1 RTC简介 编辑2 Exynos4412下的RTC控制器 2.1 概述 2.2 特征 2.3 功能框图 3 寄存器介绍 3.1 概述 3.2 BCD格式的年月日寄存器 3.3 INTP中断挂起寄存器 3.4 RTCCON控制寄存器 3.5 CURTICCNT 作为嘀嗒定时器使用的寄存器 4 RTC编程 5 练习 1 RTC简介 RTC(…...
c语言指针详解(上)
目录 一、指针的基本概念和用法 二、指针运算 2.1 指针的自增和自减运算 2.2 指针的自增和自减运算 三、数组和指针 四、指针和函数 4.1 在函数中使用指针作为参数和返回值 4.1.1 使用指针作为函数参数 4.1.2 使用指针作为函数返回值 4.2 指针参数的传值和传引用特性 4.2.1 指针…...
如何删除mac苹果电脑上面的流氓软件?
在使用苹果电脑的过程中,有时候我们也会遇到一些不需要的软件。无论是因为不再需要,或者是为了释放磁盘空间,删除这些软件是很重要的。本文将为大家介绍怎样删除苹果电脑上的软件! CleanMyMac X全新版下载如下: https://wm.make…...
WordPress(11)给文章添加预计阅读时长
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、文件配置二、代码块1.引入库2.配置 single.php三、效果图前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了…...
周周爱学习之快速排序
快速排序,顾名思义,快速排序是一种速度非常快的一种排序算法 平均时间复杂度为O(),最坏时间复杂度为O()数据量较大时,优势非常明显属于不稳定排序 1.算法描述 每一轮排序选择一个基准点(pivot)进行分区 让小于基准点…...
从Julia到Python:手把手教你用KomaMRI.jl模拟MRI序列,并与Python生态联动
从Julia到Python:KomaMRI.jl与Python生态的高效联动实战指南 在医学影像研究领域,MRI序列的模拟与深度学习分析正逐渐形成紧密的工作流闭环。传统MATLAB工具链虽然成熟,但在处理大规模模拟任务和对接现代AI框架时往往力不从心。Julia语言凭借…...
从DAP-Link看USB虚拟串口设计:手把手教你给STM32F407添加双通道调试功能
从DAP-Link看USB虚拟串口设计:手把手教你给STM32F407添加双通道调试功能 在嵌入式开发中,调试工具的性能直接影响开发效率。传统调试器往往需要额外串口芯片,而现代方案如DAP-Link通过USB CDC类实现虚拟串口,既节省硬件成本又能提…...
飞书机器人接入OpenClaw:Qwen3.5-4B-Claude模型对话触发方案
飞书机器人接入OpenClaw:Qwen3.5-4B-Claude模型对话触发方案 1. 为什么选择飞书OpenClaw的技术问答方案 去年团队内部开始频繁出现一个现象:每当新人遇到技术问题,总会在飞书群里反复老员工。简单的环境配置问题往往需要截图、录屏、文字描…...
嵌入式工程师必看:手把手教你排查PHY芯片挂载失败的6个硬件坑(附示波器实测图)
嵌入式工程师必看:手把手教你排查PHY芯片挂载失败的6个硬件坑(附示波器实测图) 调试一块新设计的PCB板时,最让人头疼的莫过于网口无法正常工作。作为一名嵌入式工程师,我经历过太多次PHY芯片无法被系统识别的窘境——那…...
Openclaw中文版落地:nanobot支持中文错误提示、中文文档与本地化调试
Openclaw中文版落地:nanobot支持中文错误提示、中文文档与本地化调试 1. nanobot:超轻量级OpenClaw中文版 nanobot是一款受OpenClaw启发的超轻量级个人人工智能助手,现在全面支持中文环境。这个工具最大的特点是轻量高效,仅需约…...
Android端集成MiniCPM-V-2_6轻量化版本:移动端图像风格迁移App开发
Android端集成MiniCPM-V-2_6轻量化版本:移动端图像风格迁移App开发 1. 引言 你有没有想过,用自己的手机摄像头,就能实时看到眼前的世界变成梵高的《星空》或者莫奈的《睡莲》?这听起来像是科幻电影里的场景,但现在&a…...
3步颠覆直播保存方式:抖音直播下载神器让精彩内容永久留存
3步颠覆直播保存方式:抖音直播下载神器让精彩内容永久留存 【免费下载链接】douyin-downloader 项目地址: https://gitcode.com/GitHub_Trending/do/douyin-downloader 你是否曾经为错过心仪主播的直播而惋惜?是否遇到过想要保存的直播内容在结束…...
索引——数据库中又一个面试常考的内容(1)
当我们系统的学习了数据行的CRUD操作以后,尤其是查询,是四者之中最复杂的,于是,我们就想高效地查询、更新表中的数据,索引就应运而生了。为什么要使用索引?一句话,就是提升查询效率。MYSQL数据库…...
从SIM卡到基站信令:IMSI号码的5种获取方式全解析(含读卡器/Wireshark对比)
从SIM卡到基站信令:IMSI号码的5种获取方式全解析(含读卡器/Wireshark对比) 在物联网设备管理和移动通信维护领域,IMSI(International Mobile Subscriber Identity)作为SIM卡的核心标识符,其获取…...
ComfyUI自定义节点开发指南:从零构建你的专属AI工具链
1. 为什么需要自定义ComfyUI节点? 第一次用ComfyUI做AI绘画时,我就被它灵活的节点式操作吸引了。但用着用着发现一个问题:官方提供的节点虽然强大,但总有些特殊需求无法满足。比如想给生成的图片自动打水印、批量处理文件夹里的图…...
