ITKeyword,专注技术干货聚合推荐

注册 | 登录

SpringMVC 流程(5)-- 视图解析器

u014077165 分享于 2015-07-30

推荐:springMVC多视图解析器

  springMVC多视图解析器 CustomizeMultiViewResolver.java public class CustomizeMultiViewResolver implements ViewResolver {     private Map<String, View

2019阿里云全部产品优惠券(新购或升级都可以使用,强烈推荐)
领取地址https://promotion.aliyun.com/ntms/yunparter/invite.html



一. 视图解析器概念
          视图解析器主要是用来匹配名字和具体的视图资源。通俗的讲就是我们在控制层返回一个ModelAndView对象,然后我们会在这个对象中setViewName("xx");那么就是匹配这个ViewName和具体的视图。 当然,它也用了策略模式,这样我们也可以根据实际需求更换不同的视图解析器。          视图解析器在DispatcherServlet中会有默认的配置,如下代码:

   
    
     protected void initStrategies(ApplicationContext context) {
    
    
      initMultipartResolver(context);
    
    
      initLocaleResolver(context);
    
    
      initThemeResolver(context);
    
    
      initHandlerMappings(context);
    
    
      initHandlerAdapters(context);
    
    
      initHandlerExceptionResolvers(context);
    
    
      initRequestToViewNameTranslator(context);
    
    
      initViewResolvers(context);
    
    
      initFlashMapManager(context);
    
    
     }
    
   
再看具体的代码:
   
    
      private void initViewResolvers(ApplicationContext context) {
    
    
      this.viewResolvers = null;
    
    
      
    
    
      if (this.detectAllViewResolvers) {
    
    
      // Find all ViewResolvers in the ApplicationContext, including ancestor contexts.
    
    
      Map<String, ViewResolver> matchingBeans =
    
    
      BeanFactoryUtils.beansOfTypeIncludingAncestors(context, ViewResolver.class, true, false);
    
    
      if (!matchingBeans.isEmpty()) {
    
    
      this.viewResolvers = new ArrayList<ViewResolver>(matchingBeans.values());
    
    
      // We keep ViewResolvers in sorted order.
    
    
      OrderComparator.sort(this.viewResolvers);
    
    
      }
    
    
      }
    
    
      else {
    
    
      try {
    
    
      ViewResolver vr = context.getBean(VIEW_RESOLVER_BEAN_NAME, ViewResolver.class);
    
    
      this.viewResolvers = Collections.singletonList(vr);
    
    
      }
    
    
      catch (NoSuchBeanDefinitionException ex) {
    
    
      // Ignore, we'll add a default ViewResolver later.
    
    
      }
    
    
      }
    
    
      
    
    
      // Ensure we have at least one ViewResolver, by registering
    
    
      // a default ViewResolver if no other resolvers are found.
    
    
      if (this.viewResolvers == null) {
    
    
      this.viewResolvers = getDefaultStrategies(context, ViewResolver.class);
    
    
      if (logger.isDebugEnabled()) {
    
    
      logger.debug("No ViewResolvers found in servlet '" + getServletName() + "': using default");
    
    
      }
    
    
      }
    
    
      }
    
   

从上面的代码的第8到12行,

推荐:SpringMVC 多视图解析

虽然SpringMVC技术已经很成熟了,视图渲染技术相信大神们都熟透了,因为项目中使用到了多视图渲染,因此在这里记录一下。欢迎大家批评指点。 SpringMVC的视图和

可以知道,我们还可以配置多个视图解析器。
二. 视图解析器种类
如下为官网的介绍的视图解析器种类图:
像我们一般使用的是:
   
    
     <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    
    
         <property name="prefix" value="/WEB-INF/page/" /> 
    
    
      <property name="suffix" value=".jsp" /> 
    
    
     </bean>
    
   
也就是说适合普通的 jsp。 以后我们就可以根据需要比如说需要更换freemarker,或者是velocity,就在这里更换配置相对应的视图解析器。

最后:这里具体是怎么解析其实还没有分析到。只是个人觉得不是特别的重要,我们目前需要知道的是  1. 学习它的策略模式,怎么才可以在不改变源码的情况下更换我们自己的视图解析器。 2. 知道有哪些视图解析器,以方便我们以后更换。不然需要用到也不知道原来spring自己是有的。


参考: 1.  http://www.jpalace.org/document/34/spring-mvc-tutorial#section11

推荐:springmvc 视图和视图解析器相关类介绍

springmvc 通过@RequestMapping路由的方法进行业务处理之后,会有返回值,返回值经过视图解析器解析之后,生成一个view,然后再由view进行渲染成具体的jsp页面,

一. 视图解析器概念           视图解析器主要是用来匹配名字和具体的视图资源。通俗的讲就是我们在控制层返回一个ModelAndView对象,然后我们会在这个对象中setViewName("xx");那么就是匹配这

相关阅读排行


用户评论

游客

相关内容推荐

最新文章

×

×

请激活账号

为了能正常使用评论、编辑功能及以后陆续为用户提供的其他产品,请激活账号。

您的注册邮箱: 修改

重新发送激活邮件 进入我的邮箱

如果您没有收到激活邮件,请注意检查垃圾箱。