(学习笔记) Spring MVC的理解

什么是SpringMVC?

他是一个轻量级的开源框架,应用于表现层,基于MVC的设计模式.
SpringMVC 是spring 的一个模块 。spring mvc是一个基于mvc的web框架。SpringMVC和Spring无需进行中间的整合层进行整合。

MVC分别代表什么?

M:model (模型)
V:view(视图)
C:controller(控制器)

Springmvc工作原理简析

第一步:发起请求到前端控制器(DispatcherServlet)

第二步:前端控制器请求HandlerMapping查找Handler可以根据xml配置、注解进行查找

第三步:处理器映射器HandlerMapping向前端控制器返回Handler

第四步:前端控制器调用处理器适配器去执行Handler

第五步:处理器适配器去执行Handler

第六步:Handler执行完成给适配器返回ModelAndView

第七步:处理器适配器向前端控制器返回ModelAndView。ModelAndView是springmvc框架的一个底层对象,包括 Model和view

第八步:前端控制器请求视图解析器去进行视图解析,根据逻辑视图名解析成真正的视图(jsp)

第九步:视图解析器向前端控制器返回View

第十步:前端控制器进行视图渲染。视图渲染将模型数据(在ModelAndView对象中)填充到request域

第十一步:前端控制器向用户响应结果

springmvc核心流程图及讲解

(学习笔记) Spring MVC的理解

知识讲解:DispatcherServlet(前端控制器)
1.应用了“ Front Controller”模式 – 是所有 Spring MVC 请求的中枢。
2.继承了HttpServlet,是一个Servlet,由WebApplicationContext 加载
3.如果不作其它配置,会加载默认组件

HandlerMapping(映射处理器)
1.将web请求映射到正确的处理器(handler)上 , 通常是一个 Controller
2.不需用自定义处理器映射–已经内置了很多处理器映射策略
3.在处理器映射中通过配置拦截器(包括处理器执行前、执行后、或者执行前后运行拦截器)将使其功能更强大

Controller (后端控制器)
1.负责处理请求
2.内部参数继承 HttpServlet
handleRequest(HttpServletRequest, HttpServletResponse)
3.返回一个 ModelAndView对象
4.所有实现都是线程安全的
5.基本不用自己实现接口 – 已经提供了很多实用的实现类

ModelAndView 对象
1.封装了用来渲染页面的 model和view
2.Model 用 java.util.Map实现的
3.添加对象,可以不需用名字:
addObject(String, Object) – 用显式名字添加
addObject(Object) – 用默认名添加 (惯例优先)
4.View 用 String 或 View 对象表示
5.类似 Struts的 Action

Interceptors(拦截器)
1.在请求前后添加其它功能
2.包括拦截器方法 – preHandle and postHandle
3.包括回调方法 – afterCompletetion
4.可以通过 HandlerMapping 和一系列Controller关联上

ViewResolver(视图解析器)
1.从一个逻辑视图名映射到一个视图对象
2.可以排序, 所以能链在一起
3.对JSP用户, 通常实现
InternalResourceViewResolver:

<bean id="internalResourceViewResolver" …
      <property name="prefix" value="/WEB-INF/jsp/" />
      <property name="suffix" value=".jsp" />
</bean>

4.其它ViewResolver实现
(1)VelocityViewResolver – 针对Velocity templates设计的
(2)FreeMarkerViewResolver – 针对 FreeMarker templates设计的
(3)ResourceBundleViewResolver 映射关系在一个 properties 文件,支持国际化
(4)XmlViewResolver – 映射关系在XML文件

View(视图)
1.支持的几种视图模板技术:
InternalResourceView (JSP)
JstlView (JSP + JSTL)
VelocityView (Velocity)
FreeMarkerView (FreeMarker)
TilesView (Tiles)
TilesJstlView (Tiles + JSTL)
2.还支持渲染下列视图
Excel files
PDF files
XSLT results
Jasper Reports