Spring MVC 源码阅读笔记
2016-06-08 16:38
495 查看
一、功能
视图解析器ViewResolver用于返回页面或者数据给前端请求。二、接口及实现类
顶层接口: ViewResolver
定义了最核心的 View resolverViewName方法, 根据视图名返回真实的视图对象
实现类:
BeanNameViewResolver: 将controller中返回的逻辑视图名做为beanID去applicationContext中获取View对象, 如果没有找到会报错。 ContentNegotiatingViewResolver: 本身不负责解析视图, 它根据请求content-type选择与之相匹配的视图解析器来完成实际的视图解析工作。 属性: viewResolvers: 指定视图解析器列表, 如果没配置此属性, Spring会自动从ApplicationContext中查找ViewResolver类型的Bean defaultViews: 配置默认视图列表, 默认视图的作用是所有ViewResolver都没有找到合适视图时, 会从默认视图中查看是否有匹配的。 AbstractCachingViewResolver: UrlBasedViewResolver: InternalResourceViewResolver:通过RequestDispatcher完成内部跳转, 主要用于在JSP和Servlet之间跳转
三、视图
1、两个特殊的视图:RedirectView、ForwardView
RedirectView用于给客户端发送重定向响应(302), 如想从一个Controller跳转到加一个Controller, 可以return “redirect: xxx.action”, 客户收到响应后就会自动请求xxx.action这个RequestMapping, 间接实现了从一个Controller跳转到另一个Controller.
ForwardView, 基于RequestDispatch, 在服务端实现跳转, 同时将reqeust参数带入请求中, 这种跳转同样可以实现Controller -> Controller, 而且对客户端无感(不会改变客户端URL).
2、Controller中的方法无返回值时
这时Spring会用当前请求地址作为逻辑视图名调用众多视图解析器去解析视图。
四、Spring怎么决定用哪个视图解析器
如果配置的有多个视图解析器, Spring按照配order属性决定优先级, 1为优先级最高。如果配置了ContentNegotiatingViewResolver视图解析器, 并且已经进入ContentNegotiatingViewResolver解析器, ContentNegotiatingViewResolver会查找内部配置的viewResolvers或者ApplicationContext中配置的其它视图解析器, 按请求类型和解析器响应类型, 选择合适的视图解析器。
相关文章推荐
- SpringMVC整合mybatis实例代码
- Spring MVC--拦截器实现和用户登陆例子
- SpringMVC源码解读之HandlerMapping - AbstractUrlHandlerMapping系列request分发
- 使用jQuery.form.js/springmvc框架实现文件上传功能
- jquery.form.js框架实现文件上传功能案例解析(springmvc)
- Java简单实现SpringMVC+MyBatis分页插件
- SpringMVC文件上传 多文件上传实例
- SpringMVC restful 注解之@RequestBody进行json与object转换
- SpringMVC源码解读之HandlerMapping
- spring mvc4的日期/数字格式化、枚举转换示例
- SpringMVC源码解读之 HandlerMapping - AbstractDetectingUrlHandlerMapping系列初始化
- 解决springmvc+mybatis+mysql中文乱码问题
- SpringMVC上传图片与访问
- SpringMVC文件上传的配置实例详解
- springMVC配置环境实现文件上传和下载
- SpringMVC入门小程序 -- Myeclipse 9.1下
- SpringMVC+Spring3+Hibernate4
- SpringMVC+MyBatis项目总结(一)
- SpringMVC+MyBatis项目总结(三)
- SpringMVC+MyBatis项目总结(四)