当前位置: 首页 > 编程日记 > 正文

Spring MVC原理

摘要: Spring MVC工作流程图

springMVC工作流程图

图一


图二


开发工具

1.Eclipse IDE:采用Maven项目管理,模块化。

2.代码生成:通过界面方式简单配置,自动生成相应代码,目前包括三种生成方式(增删改查):单表、一对多、树结构。生成后的代码如果不需要注意美观程度,生成后即可用。

技术选型(只列了一部分技术)

1、后端

服务框架:Dubbo、zookeeper、Rest服务

缓存:Redis、ehcache

消息中间件:ActiveMQ

负载均衡:Nginx

分布式文件:FastDFS

数据库连接池:Alibaba Druid 1.0

核心框架:Spring framework

安全框架:Apache Shiro 1.2

视图框架:Spring MVC 4.0

服务端验证:hibernateValidator 5.1

布局框架:SiteMesh 2.4

工作流引擎:Activiti 5.15

任务调度:quartz 1.8.5

持久层框架:MyBatis 3.2

日志管理:SLF4J 1.7、Log4j

工具类:Apache Commons、Jackson 2.2、Xstream 1.4、Dozer 5.3、POI

2、前端

js框架:jQuery1.9。

CSS框架: Bootstrap 4 metronic

客户端验证:jqueryValidation Plugin。

富文本:CKEcitor

文件管理:CKFinder

动态页签:Jerichotab

数据表格:jqGrid

对话框:jQuery jBox

树结构控件:jQuery zTree

其他组件:Bootstrap 4 metronic

3、支持

服务器中间件:Tomcat 6、7、Jboss 7、WebLogic 10、WebSphere 8

数据库支持:目前仅提供MySQL数据库的支持,但不限于数据库,下个版本升级多数据源切换和数据库读写分离: 如:Oracle、SqlServer、H2等

支持开发环境:Eclipse、MyEclipse、Ras、Idea等

经典介绍:

源码结构


Spring工作流程描述

1. 用户向服务器发送请求,请求被Spring 前端控制Servelt DispatcherServlet捕获;

2. DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI)。然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回;

3. DispatcherServlet 根据获得的Handler,选择一个合适的HandlerAdapter。(附注:如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(...)方法)

4. 提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)。 在填充Handler的入参过程中,根据你的配置,Spring将帮你做一些额外的工作:

HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息

数据转换:对请求消息进行数据转换。如String转换成Integer、Double等

数据根式化:对请求消息进行数据格式化。 如将字符串转换成格式化数字或格式化日期等

数据验证: 验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中

5. Handler执行完成后,向DispatcherServlet 返回一个ModelAndView对象;

6. 根据返回的ModelAndView,选择一个适合的ViewResolver(必须是已经注册到Spring容器中的ViewResolver)返回给DispatcherServlet ;

7. ViewResolver 结合Model和View,来渲染视图

8. 将渲染结果返回给客户端。

Spring工作流程描述

为什么Spring只使用一个Servlet(DispatcherServlet)来处理所有请求?

详细见J2EE设计模式-前端控制模式

Spring为什么要结合使用HandlerMapping以及HandlerAdapter来处理Handler?

符合面向对象中的单一职责原则,代码架构清晰,便于维护,最重要的是代码可复用性高。如HandlerAdapter可能会被用于处理多种Handler。

欢迎大家一起学习研究相关技术愿意了解框架技术或者源码的朋友直接求求2042849237


转载于:https://juejin.im/post/5a682f51f265da3e591e7337

相关文章:

linux下poll和epoll内核源代码剖析

作者:董昊 博客链接http://donghao.org/uii/ poll和epoll的使用应该不用再多说了。当fd很多时,使用epoll比poll效率更高。 我们通过内核源码分析来看看到底是为什么。 poll剖析poll系统调用:int poll(struct pollfd *fds, nfds_t nfds, int t…

百度副总裁马杰:实现元宇宙,技术要过三道坎

近来,元宇宙一词就像龙卷风瞬间席卷整个科技圈,一时间所有新概念层出不穷,无数科技公司蜂拥而至扎堆元宇宙。先是在线游戏创作平台Robolox把元宇宙写进招股书里,成为“元宇宙第一股”。后有扎克伯格宣布将Facebook更名为Meta&…

consolez设置

2019独角兽企业重金招聘Python工程师标准>>> 菜单”—>Edit—>Setting...—>Behavior—>选择“Copy on select” “菜单”—>Edit—>Setting...—>Mouse—>Paste text—>Right 最后一个重点说明的问题是Console2对中文的支持问题。默认情…

dstat用法;利用awk求dstat所有列每列的和;linux系统监控

安装:yum install -y dstatdstat命令是一个用来替换vmstat、iostat、netstat、nfsstat和ifstat这些命令的工具,是一个全能系统信息统计工具。与sysstat相比,dstat拥有一个彩色的界面,在手动观察性能状况时,数据比较显眼…

PHP内核介绍及扩展开发指南—基础知识

一、 基础知识 本章简要介绍一些Zend引擎的内部机制,这些知识和Extensions密切相关,同时也可以帮助我们写出更加高效的PHP代码。 1.1 PHP变量的存储 1.1.1 zval结构 Zend使用zval结构来存储PHP变量的值,该结构如下所示: type…

腾讯汤道生:数实融合成为行业“必答题”,腾讯未来打造四大引擎

11月3日,腾讯高级执行副总裁、云与智慧产业事业群CEO汤道生在2021腾讯数字生态大会上表示,“数实融合”正在从“选答题”,变成每个行业都要面对的“必答题”,腾讯未来将打造用户、技术、安全和生态四大引擎,助力各行各…

shell编程基础(2)---与||

shell 编程重要的应用就是管理系统,对于管理系统中成千上万的程序而言,查询某个文件名是否存在,并且获取该文件名所指代文件基本信息是系统管理员的基本任务。shell命令可以很轻松的完成这项任务。 #program this is a example for #########…

基于qml创建最简单的图像处理程序(1)-基于qml创建界面

《基于qml创建最简单的图像处理程序》系列课程及配套代码基于qml创建最简单的图像处理程序(1)-基于qml创建界面http://www.cnblogs.com/jsxyhelu/p/8343310.html课程1附件https://files.cnblogs.com/files/jsxyhelu/%E9%98%B6%E6%AE%B5%E4%BB%A3%E7%A0%8…

存储方式与介质对性能的影响

摘要 数据的存储方式对应用程序的整体性能有着极大的影响。对数据的存取,是顺利读写还是随机读写?将数据放磁盘上还将数据放flash卡上?多线程读写对性能影响?面对着多种数据存储方式,我们如何选择?本文给大…

struts配置文件没有标签提示

2019独角兽企业重金招聘Python工程师标准>>> struts配置文件没有标签提示 原因:" http://struts.apache.org/dtds/struts-2.0.dtd"是通过网络的形式帮你下载对应的dtd文件, 如果机器没有联网,就不会有提示 解决办法&…

iPhone 隐私新规下的“大地震”:四大平台损失近百亿美元,“连用户是男是女都分不清……”

整理 | 郑丽媛 出品 | CSDN(ID:CSDNnews) 大家有这样的经历吗?前一秒刚在聊天软件上跟朋友分享了一款产品,下一秒就能在其他 App 中看到这款产品的广告推送,不了解内情的人说不定还会感慨一句:“…

Python 判断类型

类型判断:isinstance(obj, type) 方法 : isinstance(obj, type) print (isinstance(3, int)) # True print (isinstance(3, str)) # False print (isinstance(3, list)) # False print (isinstance([1,2,3], list)) …

php打印warning日志引发的core追查

内容 春节期间线上出了两个php-cgi的core,具体追查过程如下: 一、 Core信息 file core.xxx bug.php-cgi.3611.1296586902: ELF 64-bit LSB core file AMD x86-64, version 1 (SYSV), SVR4-style, from ‘php-cgi’ gdb ~/php5/bin/php-cgi core.xx…

BIZTALK项目中WEB引用WEBSERVICES服务时候报错

近期工作中须要完毕通过BIZTALK完毕调用WEBLOGIC公布的WebServices服务,环境搭建好后,打开VS开发工具新建一个BIZTALK项目,加入WEB引用将对方公布的地址拷贝上去,能够正常浏览到,然后点击加入引用button,这…

百度“知识增强的跨模态语义理解技术”获国家技术发明奖

11月3日,2020年度国家科学技术奖励大会在京举行,百度“知识增强的跨模态语义理解关键技术及应用”获国家技术发明二等奖。 该技术旨在通过构建大规模知识图谱,关联跨模态信息,通过知识增强的自然语言语义表示方法,解决…

Objective C浅拷贝和深拷贝

##浅拷贝 浅拷贝就是对内存地址的复制,让目标对象指针和源对象指向同一片内存空间。如: char* str (char*)malloc(100); char* str2 str; 复制代码浅拷贝只是对对象的简单拷贝,让几个对象共用一片内存,当内存销毁的时候&#xf…

我常用的那些linux命令

我常用的那些linux命令 用linux也有些年头了,说来也忏愧,说是有些年头了,其实也还是个不长进的主。记得第一次接触linux是boss跟我说的怎么操作,什么编辑模式,按i,a,o进入编辑模式。在一个黑乎乎…

2021腾讯数字生态大会:腾讯安全聚焦安全共建,护航数字经济发展

11月3日,以“数实融合 绽放新机”为主题的2021腾讯数字生态大会在武汉开幕。在首日的主峰会上,多位腾讯高管及行业领袖、企业家对数字时代如何建设安全底座,发表了看法。 腾讯高级执行副总裁、云与智慧产业事业群CEO汤道生指出,没…

Oauth认证协议

原文地址腾讯QQ第三方登录的实现原理? Oauth当中的角色: 1.Service Provider(服务提供方): 服务提供方通常是网站,在这些网站当中存储着一些受限制的资源,如照片、视频、联系人列表等。这些网站…

“分布式哈希”和“一致性哈希”的概念与算法实现

分布式哈希和一致性哈希是分布式存储和p2p网络中说的比较多的两个概念了。介绍的论文很多,这里做一个入门性质的介绍。 分布式哈希(DHT)   两个key point:每个节点只维护一部分路由;每个节点只存储一部分数据。从而实现整个网络中的寻址和存…

7000 字 23 张图,Pandas一键生成炫酷的动态交互式图表

作者 | 俊欣来源 | 关于数据分析与可视化今天小编来演示一下如何用pandas一行代码来绘制可以动态交互的图表,并且将绘制的图表组合到一起,组成可视化大屏,本次小编将要绘制的图表有折线图散点图直方图柱状图饼图面积图地图组合图准备工作我们…

手把手教你使用zabbix监控nginx

zabbix监控nginx,多亏了容哥(杨容)的帮忙,为了感谢容哥的帮助,写了这篇文章。环境介绍:服务器系统版本:CentOSrelease 6.6 (Final)内核版本:Linux hk_nginx2.6.32-504.3.3.el6.x86_64ZabbixServer版本&…

理解多线程设计模式

多线程设计模式:1.Single Threaded Execution Pattern [同一时刻只允许一个线程操作] 比喻:三个挑水的和尚,只能同一时间一个人过桥,不然都掉河里喂鱼了。 总结:在多个线程同时要访问的方法上加上synchronized关键…

Linux内核之旅

内核模块是Linux内核向外部提供的一个插口,其全称为动态可加载内核模块(Loadable Kernel Module,LKM),我们简称为模块。Linux内核之所以提供模块机制,是因为它本身是一个单内核(monolithic kern…

qq腾讯第三方登陆

html页面&#xff1a;<html> <head> <meta charset"utf-8" /> <title>第三方登录</title> <meta property"qc:admins" content"1541324001721762700063671645060454" /> </h…

如何利用 Python 爬取 LOL 高清精美壁纸?

作者 | 阿拉斯加 来源 | 杰哥的IT之旅 一、背景介绍 随着移动端的普及出现了很多的移动 APP&#xff0c;应用软件也随之流行起来。最近看到英雄联盟的手游上线了&#xff0c;感觉还行&#xff0c;PC 端英雄联盟可谓是爆火的游戏&#xff0c;不知道移动端的英雄联盟前途如何&…

生产环境主从数据同步不了?

生产环境主从数据同步不了&#xff1f;经历过程&#xff1a; 一般我们常常在做主从复制的时候&#xff0c;可能是很少遇到到错误&#xff0c;那都是因为&#xff0c;你做主从基本用的是&#xff0c;本地虚拟机做&#xff0c;或者一些测试环境做。但是当我们把主从复制部署…

用 YOLOv5模型识别出表情!

作者 | 闫永强来源 | Datawhale本文利用YOLOV5对手势进行训练识别&#xff0c;并识别显示出对应的emoji&#xff0c;如同下图&#xff1a;本文整体思路如下。提示&#xff1a;本文含完整实践代码&#xff0c;代码较长&#xff0c;建议先看文字部分的实践思路&#xff0c;代码先…

Linux操作系统中内存buffer和cache的区别

我们一开始&#xff0c;先从Free命令说起。 free 命令相对于top 提供了更简洁的查看系统内存使用情况&#xff1a; $ freetotal used free shared buffers cachedMem: 255268 238332 16936 0 85540 126384-/ buffers/cache: 26408 228860Swap: 265000 …

sort cut 命令的常用用法

sort命令介绍&#xff1a;sort是在Linux里非常常用的一个命令&#xff0c;管排序的&#xff0c;集中精力&#xff0c;五分钟搞定sort&#xff0c;现在开始&#xff01;1 sort的工作原理sort将文件的每一行作为一个单位&#xff0c;相互比较&#xff0c;比较原则是从首字符向后&…