我是谁?

在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model 返回给对应的View 进行展示.SpringMVC 提供了一个非常简便的定义Controller 的方法,无需继承特定的类或实现特定的接口,只需使用@Controller 标记一个类是Controller. 另外,@RestController是一个组合注解,组合了@Controller和@ResponseBody.

@Controller返回视图和渲染视图的数据(ModelAndView)。

@RestController返回json或者xml格式的数据。

此时要注意的是@Controller注解和@RestController注解的使用场景的不同。

如果是前后端在一起的web应用,适合@Controller的牛刀。

如果是前后端分离的web应用,适合@RestController的牛刀。

我从哪里来? 为了详细追踪或者演示一下controller到底从哪里来的,我们在上文<我是spring mvc:“hello world!”>的基础上做个实验吧!

修改Controller,抛出异常调用链

此时控制台打印日志,图中分了三部分: 1.tomcat应用服务器调用servlet链 2.到spring web应用的前端服务器FrameworkServlet,真实的实现为DispatcherServlet 3.通过反射的方式调用控制器Controller的相应方法执行 从中,我们可以看出一个http请求的处理过程,是从tomcat-->spring mvc的过程 javax.servlet.http.HttpServlet来自Servlet标准定义 此时确认DispatcherServlet是一个标准的Servlet

我要到哪里去?

MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。

  • Model(模型) - 模型代表一个存取数据的对象或 JAVA POJO。它也可以带有逻辑,在数据变化时更新控制器。
  • View(视图) - 视图代表模型包含的数据的可视化。
  • Controller(控制器) - 控制器作用于模型和视图上。它控制数据流向模型对象,并在数据变化时更新视图。它使视图与模型分离开。 Controller最终返回ModelAndView,我们看看它的定义

包含了业务处理后的返回数据及要渲染的视图(如html,jsp等) 总结 本章节概述了spring 控制器的三个终极问题:我是谁?我来自哪里?我要到哪里去?下图给出了spring mvc的整个框架。后面的章节将针对每个环节以实例做分析,敬请订阅。

要注意的是@Controller注解和@RestController注解的使用场景的不同。

如果是前后端在一起的web应用,适合@Controller的牛刀。

如果是前后端分离的web应用,适合@RestController的牛刀。 对于1~8年工作经验的初中高级开发:

要么仅限于spring mvc(web)的使用,慢慢变成了所谓的CRUDer; 要么探究spring或者spring mvc源码本身,debug中慢慢迷失方向,忘记初心;

要么为了面试需要,艰难困苦的记忆着内部原理,不能消化吸收; 要不一页一页的翻着spring的官方文档,和英文做艰苦卓绝的对抗,最终从入门到放弃;

更多内容可以参看我的专栏

http://learning.snssdk.com/feoffline/toutiao_wallet_bundles/toutiao _learning_wap/online/article.html? item_id=6810912980272677390