Spring MVC九大组件简介说明

下文笔者讲述Spring MVC九大组件简介说明,如下所示

HandlerMappings

HandlerMapping是用来查找Handler
也就是处理器
具体的表现形式可以是类也可以是方法
 如:
  标注了@RequestMapping每个method都可以看成是一个Handler
  由Handler来负责实际的请求处理
   HandlerMapping 在请求到达之后
   它的作用便是找到请求相应的处理器Handler和Interceptors 

HandlerAdapters

由于Servlet的方法结构都是如doService(HttpServletRequest req, HttpServletResponse resp)
,让固定的Servlet处理方法调用Handler来进行处理,这一步工作便是 HandlerAdapter要做的事。

HandlerExceptionResolvers

用来处理Handler过程中产生的异常情况的组件
此组件的作用是根据异常设置ModelAndView
之后再交给render方法进行渲染,而render便将ModelAndView渲染成页面
不过有一点
HandlerExceptionResolver只是用于解析对请求做处理阶段产生的异常而渲染阶段的异常
这也是Spring MVC组件设计的一大原则分工明确互不干涉。

ViewResolvers

 这个组件的主要作用,便是将String类型的视图名和Locale解析为View类型的视图
 这个接口只有一个resolveViewName()方法。
 从方法的定义就可以看出,Controller层返回的String类型的视图名viewName ,
 最终会在这里被解析成为View.View是用来渲染页面的
 它会将程序返回的参数和数据填入模板中,最终生成html文件
 ViewResolver在这个过程中,主要做两件大事
 即ViewResolver 会找到渲染所用的模板(使用什么模板来渲染?)
 和所用的技术(其实也就是视图的类型,如JSP啊还是其他什么Blabla的)填入参数
 默认情况下,Spring MVC会为我们自动配置一个InternalResourceViewResolver,这个是针对JSP类型视图的。

RequestToViewNameTranslator

从Request中获取viewName
  ViewResolver是根据ViewName查找View
  但有的 Handler处理完成之后
  没有设置View也没有设置ViewName
  便要通过这个组件来从Request中查找viewName。

LocaleResolver

LocaleResolver用于从request 中解析出Locale
在中国大陆地区
Locale当然就会是zh-CN之类
用来表示一个区域。这个类也是i18n的基础。

ThemeResolver

这个类是用来解析主题的
主题,就是样式,图片以及它们所形成的显示效果的集合
 Spring MVC中一套主题对应一个properties文件
里面存放着跟当前主题相关的所有资源
 如图片,css样式等。创建主题非常简单,只需准备好资源
 然后新建一个“主题名.properties”并将资源设置进去
 放在classpath下,便可以在页面中使用了
 Spring MVC中跟主题有关的类
 有ThemeResolver, ThemeSource和Theme。ThemeResolver负责
 从request中解析出主题名
 ThemeSource则根据主题名找到具体的主题
 其抽象也就是 Theme
 通过Theme来获取主题和具体的资源。

MultipartResolver

MultipartResolver用于处理上传请求
通过将普通的Request包装成MultipartHttpServletRequest来实现
MultipartHttpServletRequest
可以通过getFile(直接获得文件,如果是多个文件上传
还可以通过调用getFileMap得到Map
MultipartResolver的作用就是用来封装普通的request
使其拥有处理文件上传的功能

FlashMapManager

 
FlashMap用于重定向Redirect时的参数数据传递
 如,在处理用户订单提交时,为了避免重复提交,可以处理完post请求后redirect到一个get请求
 这个get请求可以用来显示订单详情之类的信息。这样做虽然可以规避用户刷新重新提交表单的问题
 但是在这个页面上要显示订单的信息,那这些数据从哪里去获取呢
 因为redirect重定向是没有传递参数这一功能的
 如果不想把参数写进url(其实也不推荐这么做,url有长度限制不说,
 把参数都直接暴露,感觉也不安全),那么就可以通过flashMap来传递。
 只需要在redirect 之前,将要传递的数据写入request( 
 可以通过ServletRequestAttributes.getRequest()获得)的属性
 OUTPUT_FLASH_MAP_ATTRIBUTE中
 在redirect之后的handler中 
 spring 就会自动将其设置到 Model中,在显示订单信息的页面上,
 就可以直接从 Model中取得数据了。而FlashMapManager就是用来管理FlashMap

你可能感兴趣的:(servlet,mvc,java)