Spring MVC组件

DispatcherServlet初始化了9个组件

HandlerMapping

根据request找到相应的处理器Handler和Interceptors,HanddlerMaping接口只有一个方法,getHandler()

HandlerAdapter

一共三个方法, supports(),判断是否可以使用某个Handler。 handler方法是用来具体使用Handler干活。 getLastModified是获取资源的Last-Modified,Last-Modified是资源最后一次修改的时间。 选择哪个HandlerAdapter的过程在getHandlerAdapter方法中,它的逻辑是遍历所有的Adapter,然后检查哪个可以处理当前的Handler,找到第一个可以处理Handler的Adapter后就停止查找并将其返回。 HandlerAdapte需要注册到Spring MVC的容器中,注册方法和HandlerMapping一样,只要配置Bean就可以。Handler是从HandlerMapping返回的。

HandlerExceptionResolver

根据异常设置ModelAndView,之后再交给render方法进行渲染。render只负责将ModelAndView渲染成页面。 HandlerExceptionResolver只有一个方法,只需要从异常解析出ModelAndView就可以,具体实现可以维护一个异常为key,View为value的Map,解析时直接从Map里获取View,如果Map里没有相应的异常可以返回默认的View。

ViewResolver

ViewResolver用来将String类型的视图名和Locale解析为View类型的视图,ViewResolver接口也非常简单。只定义了: View resolveViewName(String viewName,Locale locale)throws Exception

RequestToViewNameTranslator

ViewResolver是根据ViewName查找View,但有的Handler处理完之后并没有设置View也没有设置viewName,这时就需要从request获取ViewName了,而如何从request获取view-Name就是RequestToViewNameTranslator要做的事情。 定义了一个getViewName方法,只要通过request获取到viewName就可以了。

LocaleResolver

解析视图需要两个参数:一个是视图名,另一个是Locale。 LocaleResolver用于从request解析出Locale。接口只定义两个方法: resolveLocale(HttpServletRequest request) 从request中解析出Locale和将特定的Locale设置给某个request。 setLocale(HttpServletRequest request,HttpServletResponse response,Locale locale)

ThemeResolver

解析主题用的。 Spring MVC中又一套主题对应一个properties文件,里面存放着跟当前主题相关的所有资源。

MultipartResolver

用于处理上传请求,处理方法是将普通的request包装成MultipartHttpServletrequest,MultipartHttpServletrequest可以直接调用getFile方法获取到File,如果上传多个文件,还可以调用getFileMap得到FileName-File结构的Map. 这个接口有三个方法, 1.判断是不是上传请求, 2.将request包装成MultipartHttpServlet,处理完后清理上传过程中产生的临时资源。

FlashMapManager

FlashMap主要用在redirect中传递参数,而FlashMapManager用来管理FlashMap的。 该接口有两个方法。

FlashMap retrieveAndUpdate(HttpServletRequest request,HttpServletResponse,response)
void saveOutputFlashMap(FlashMap flash,HttpServletRequest request,HttpServletResponse response)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏JackieZheng

探秘Tomcat——启动篇

tomcat作为一款web服务器本身很复杂,代码量也很大,但是模块化很强,最核心的模块还是连接器Connector和容器Container。具体请看下图: ? ...

50070
来自专栏Java 源码分析

SpringBoot 笔记 ( 五 ):缓存

43840
来自专栏Android 研究

Android系统启动——5 zyogte进程(Java篇)

上一篇文章,我们知道在AndroidRuntime.cpp的start()函数里面是调用的Zygoteinit类的main()函数,那我们就继续研究

28520
来自专栏JavaWeb

基于Spring自定义标签

37540
来自专栏腾讯Bugly的专栏

深入浅出 Retrofit,这么牛逼的框架你们还不来看看?

Android 开发中,从原生的 HttpUrlConnection 到经典的 Apache 的 HttpClient,再到对前面这些网络基础框架的封装,比如 ...

38960
来自专栏潇涧技术专栏

Android Heroes Reading Notes 4

《Android群英传》读书笔记 (4) 第八章 Activity和Activity调用栈分析 + 第九章 系统信息与安全机制 + 第十章 性能优化

8210
来自专栏Java技术分享圈

基于jsp+servlet的javaweb实现最基本的用户注册登陆注销功能

本案例的技术选型主要是jsp+servlet+JavaBean,采用三层架构的分层思想与MVC设计模式结合进行规范开发。

44720
来自专栏技术记录

前端插件——头像截图上传插件的使用(带后台)

效果图:实现上传头像,右边是预览,有三个大小,可以对头像进行裁剪 ? HTML: toParentData 和 img 返回的是图片裁剪后的base64编码。其...

1.1K50
来自专栏向治洪

Support Annotation Library使用详解

概述 Support Annotation Library是在Android Support Library19.1版本开始引入的一个全新的函数包,它包含了诸多...

20480
来自专栏Android研究院

Android组件化专题 - 路由框架原理

在路由框架之前,我们先了解什么是APT,并实践ButterKnife绑定findById的小功能。为什么先要讲解apt,因为路由的实现apt是核心的代码.看下面...

47410

扫码关注云+社区

领取腾讯云代金券