10 | MVC架构解析:控制器(Controller)篇
四火
该思维导图由 AI 生成,仅供参考
你好,我是四火。
今天我们继续学习 MVC 架构,主要内容就是 MVC 架构的第三部分——控制器(Controller)。
控制器用于接收请求,校验参数,调用 Model 层获取业务数据,构造和绑定上下文,并转给 View 层去渲染。也就是说,控制器是 MVC 的大脑,它知道接下去该让谁去做什么事。控制器层是大多数 MVC 框架特别愿意做文章的地方,我相信你可能耳闻、了解,甚至熟练使用过一些 MVC 框架了。
那么与其去抽象地学习这一层的重要概念、原理,或是单纯地学习这些框架在这一层略显乏味的具体配置,我想我们今天“不走寻常路”一次,把这两者结合起来——我们来比较 Servlet、Struts 和 Spring MVC 这三种常见的技术和 MVC 框架,在控制器层的工作路数,以及和业务代码整合配置的方式,看看任这些框架形式千变万化,到底有哪些其实是不变的“套路”呢?
随着请求到达控制器,让我们顺着接下去的请求处理流程,看看控制器会通过怎样的步骤,履行完它的职责,并最终转到相应的视图吧。
1. 路径映射和视图指向
我们不妨把 MVC 架构的控制器想象成一个黑盒。当 HTTP 请求从客户端送达的时候,这个黑盒要完成一系列使命,那么它就有一个入口路由和一个出口路由:
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文深入探讨了MVC架构中的控制器层在Servlet、Struts和Spring MVC三种常见技术和框架下的工作方式和配置方法。文章首先介绍了路径映射和视图指向的实现方法,包括在web.xml中配置路径映射、使用XML配置路径映射和视图指向、以及使用注解实现路径映射和视图指向。其次,文章讨论了请求参数绑定的实现方式,包括在Servlet中使用编程方式实现参数获取、Struts中通过属性设置实现参数自动注入、以及Spring MVC中使用注解处理参数绑定。通过比较不同框架的实现方式,读者可以了解到各种技术和框架在控制器层的工作方式和配置方法,以及它们的优缺点和适用场景。文章还提到了控制器层的两大绑定方式,即参数验证和视图上下文绑定,以及对MVC框架中两种常见的配置方式进行了讨论。最后,文章通过动手实现一个简单的MVC系统来巩固所学知识。整体而言,本文通过比较学习不同框架的“套路”,帮助读者深入理解MVC架构中控制器层的工作原理和实现方式,以及如何根据实际情况进行选择和权衡。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《全栈工程师修炼指南》,新⼈⾸单¥59
《全栈工程师修炼指南》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(7)
- 最新
- 精选
- pyhhou1. 更喜欢把配置放在单独一层,这么做的好处是部署的时候,更改配置比较方便而且基本不会有遗漏。这里不知道是不是可以使用二者结合的方式,对于那些经常变的配置,比如 IP 地址,端口号,token,数据库连接可以考虑放在单独一层,其他和具体业务逻辑相关的,不容易改变的配置,利用注解和实现逻辑放在一起 2. 控制层基本上就做数据验证、然后 mapping 到对应的业务处理函数,业务处理函数处理好请求后会将结果返回,控制层将业务处理函数返回的结果作为响应返回给前端页面 选修课堂的例子,web.xml 和 BookSevlet.java 所做的事情都属于 controller 层的范畴,book.jsp 里面对应的是 Model 层和 view 层,因为使用了 JavaBean 这里应该算是 View 去直接接触 Model?
作者回复: 👍
2019-10-094 - 鹏😎1. 配置方式,自己更喜欢通过注解的形式,之前实践过程中就是感觉比较简单,用时直接配置。但今天通过学习老师的课程感觉任何技术都与优势和劣势,对于配置方式,最大的缺点就是路径映射分散,难于统一管理,后期维护起来比较麻烦,以后项目要多注意这块。 2. 接口调用:controller收到请求,验参,将请求转化为内部服务调用,同步反馈处理结果或者异步回掉结果,视图请求:请求,验参,服务调用,返回视图。 四火老师后续的客户是否包含前后端分离技术?
作者回复: 前面说得挺好,最后的问题没有看懂。
2019-10-12 - Paradise丶朽木选修课堂补充我自己遇到的两个问题: 1. win10 环境下编辑java文件,环境变量那里替换成 $env:CATAIINA_HOME(powershell) 2. Tomcat启动之后页面报错500(javax.servlet.ServletException: Error instantiating servlet class [com.xxx.BookServlet]),配置web.xml时,servlet-class 只保留类名就可以了
作者回复: 👍
2019-10-10 - anginiit思考题: 1: 我更喜欢把配置和业务放到一起,因为这样更直接,我可以直接对应到控制层方法,查错也更直接一些,在工作中很少去查看所有路由的。 2:现在的项目都在使用springmvc,控制层很简单,只是去请求服务层,在一些特殊的情况下会有一些校验逻辑。
作者回复: 👍
2019-10-08 - 四喜Django使用配置文件,Flask使用装饰器。2019-10-033
- 不记年平时更多的是配置和注解混用的方式,配置多用于宏观一点的东西,例如控制器的注册。注解更偏向于微观一点,例如参数绑定2019-10-10
- leslieMVC这块知识对于早期做面向过程开发的而言只能慢慢的循环啃了、、、本来以为不用再碰这些,绕了一圈发现不懂还是不行,不过啃起来确实蛮辛苦2019-10-10
收起评论