(学习笔记) 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核心流程图及讲解
知识讲解: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