Spring MVC九大组件简介说明

书欣 SpringMVC 发布时间:2022-08-02 23:14:52 阅读数:9632 1
下文笔者讲述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<FileName, File>
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
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaFramework/SpringMVC/202208/4125.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者