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<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
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。