史上最强最通俗易懂SpringMVC流程讲解

springmvc执行流程
角色:

  • MVC公司 —— springmvc
  • 客户1 —— 小RB
  • 客户2 —— 小明
  • 前台小妹 —— 中央处理器(DispatchServlet)
  • HR —— 处理器映射器(HandlerMapping)
  • 研发部门 —— 处理器适配器(HandlerAdapter)
  • 翻译官 —— 视图解析器(ViewResolver)
  • 人工智能小卫 —— 过滤器(Filter)
  • 钥匙 —— 处理器(Handler)
  • 小c —— 控制层(Controller)
  • 小s —— 业务层(Service)
  • 大D —— 数据访问层(Dao)
  • 阿宾 —— 数据模型(JavaBean)

故事1 —— 过滤器篇

  在一个阳光明媚的下午,小RB来到MVC公司附近,他来这里的目的很明确,就是通过伪装,混入公司内部,夺走其公司的核心机密文件。他往手上唾了一口唾沫,抹了抹头发,整理了一下发型,迈着步子向着公司走去。刚到门口,头顶便传来:“小RB与狗不得入内!”小RB感觉自己伪装的很好,就打算直接进入,奈何躲不过小卫Filter)的火眼金睛,直接紧闭大门,将其拒之门外。

故事2 —— 拦截器篇

  又是一个阳光明媚的下午,小明来到MVC公司门口,他来这里的目的很明确,就是想查询自己这一个月在MCV公司的日总消费记录。小明来到门口,头顶传来小卫Filter)具有磁性的声音”欢迎光临!“

  小明来到前台,找到前台小妹DispatchServlet),递上了自己的需求,前台小妹接过需求,看也不看就连忙答应了下来。

  可小妹哪懂这些,所以她去向HRHandlerMapping)寻求帮助,HR接过需求,一看发现这分明是查在MCV公司的消费记录,根本不是自己公司的业务,所以劈头盖脸的训了小妹一顿。小妹回到前台,委屈巴巴的送走了小明。

故事3 —— 完整篇

  又是一个阳光明媚的下午,小明来到MVC公司门口,他来这里的目的很明确,就是想查询自己这个月在MVC公司的日总消费额。小明来到门口,头顶传来小卫Filter)具有磁性的声音”欢迎光临!“

  小明来到前台,找到前台小妹DispatchServlet),递上了自己的需求,前台小妹接过需求,看也不看就连忙答应了下来。

  可小妹哪懂这些,所以去向HRHandlerMapping)寻求帮助,HR接过需求,大概看了看,对小妹说:“嗯,是本公司的业务,这事归研发部门HandlerAdapter)管,你去研发部问问。”随后给了小妹研发部的坐标和钥匙Handler)。

  小妹皮跌皮跌的来到研发部,把钥匙给了研发部门,研发部长拿着钥匙打开了办公室的门,把需求给了小cController),小c接到需求,立马找来自己的小弟小sService),说:“去,给我把这事办了,办漂亮点!”

  小s接到需求,一脸迷茫,自己又没有数据库的钥匙,不能直接取数据,但管理数据库的大DDao)脾气是出了名的差,可为了完成上级指派的任务,只能硬着头皮去找大D。

  大D不屑的看了一眼小s,一把抓起阿宾javabean)就去数据库取数据了。漫长的等待中,小s越想越气,大D每次给自己的数据根本不满足要求,自己辛辛苦苦调整半天,上交后,奖金却都让小c和大D分了。自己真是脏活累活都干了,却总是被忽略的那个,甚至有人说自己没用,存不存在都一样(某些同学说不知道service层存在的意义)。

  大D一脚把一箩筐装满着数据的阿宾踢到小s面前,就又回到床上躺着刷抖音了。小s看着那些乱糟糟的数据,叹了一口气,道了声谢后,回到了自己的办公室。

  客户需要的是这个月的日总消费记录,也就是对每天的消费记录进行求总汇合,但大D给的数据是每次的消费记录。小s熟练的对指定日期范围内(如1月1日 00:00:00 到 1月1日 23:59:59 时间段内)的金额进行求和,然后全部汇总。完事后,小s脸上露出了满意的笑容,心想着“不愧是我啊!哼,交给他们,谁也办不了!”

  小s将处理好的数据交给小c,小c接过数据后,内心乐开了花,心想又可以和上级邀功大赚一笔了!

  小c把数据简单的封装ModelAndView)了一下,交给部长,部长又把数据交给小妹。

  小妹拿到数据,但是看不懂啊,就连忙去找翻译官ViewResolver)帮忙,翻译官拿到数据,熟练的将数据进行解析,把解析后的数据Model)和表格View)交给小妹。

  小妹拿着数据,开始在表格内进行填充,最后把表格交给了小明。

总结:

  • 过滤器与拦截器的区别:
    • 过滤器发生在servlet启动之前,可以拦截任意请求,包括直接访问静态页面的请求
    • 拦截器发生在servlet启动之后,调用controller方法之前,所以只能拦截controller中的请求,对于直接访问jsp页面的请求无法拦截
  • 所有进入springmvc的请求都要经过DispatchServlet进行统一分发处理
  • 不要忽略service层!
    • 觉得service层没用,只是因为我们目前接触到的业务比较少,所以会有错觉,感觉service层就只是持有了dao层的引用,然后把从dao层拿到的数据返回给controller层一样,其实并不是这样,service层才是咱们以后开发的主战地,不要让小s伤心!
    • aop在service层就有很好的应用,把整个service层进行横切,然后在不改变原代码的情况下,通过切点进行注入日志等业务,完美的体现了高内聚低耦合的编程思想。

希望通过这篇文章,可以让大家对SpringMVC的执行流程有更加深刻的理解,有错误的地方也欢迎大家指出,积极讨论,共同进步!

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
在刚刚步入“多层结构”Web应用程序开发的时候,我阅读过几篇关于“asp.net三层结构开发”的文章。但其多半都是对PetShop3.0和Duwamish7的局部剖析或者是学习笔记。对“三层结构”通体分析的学术文章几乎没有。 2005年2月11日,Bincess BBS彬月论坛开始试运行。不久之后,我写了一篇题目为《浅谈“三层结构”原理与用意》的文章。旧版文章以彬月论坛程序中的部分代码举例,通过全局视角阐述了什么是“三层结构”的开发模式?为什么要这样做?怎样做?……而在这篇文章的新作中,配合这篇文章我写了7个程序实例(TraceLWord1~TraceLWord7留言板)以帮助读者理解“三层结构”应用程序。这些程序示例可以在随带的CodePackage目录中找到——   对于那些有丰富经验的Web应用程序开发人员,他们认为文章写的通俗易懂,很值得一读。可是对于asp.net初学者,特别是没有任何开发经验的人,文章阅读起来就感到非常困难,不知文章所云。甚至有些读者对“三层结构”的认识更模糊了……   关于“多层结构”开发模式,存在这样一种争议:一部分学者认为“多层结构”与“面向对象的程序设计思想”有着非常紧密的联系。而另外一部分学者却认为二者之间并无直接联系。写作这篇文章并不是要终结这种争议,其行文目的是希望读者能够明白:在使用asp.net进行Web应用程序开发时,实现“多层结构”开发模式的方法、原理及用意。要顺利的阅读这篇文章,希望读者能对“面向对象的程序设计思想”有一定深度的认识,最好能懂一些“设计模式”的知识。如果你并不了解前面这些,那么这篇文章可能并不适合你现在阅读。不过,无论这篇文章面对的读者是谁,我都会尽量将文章写好。我希望这篇文章能成为学习“三层结构”设计思想的经典文章!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值