软件开发实训(720)科技--- 第六课 Spring mvc 框架-0518-v1.0王玉娟



多视图控制器

 

当有jsp,flt (模板)等多种页面生成展示方式时,spring默认使用的是“视图解析器链”。 真是一个链,所以性能不好,spring会在“视图解析器链”中顺序的查找,直到找到对应的 “视图解析器” 。jsp视图解析器一定要写在最后面,因为一旦调用jsp,就向浏览器发出数据了,Spring就没有机会再尝试下一个了。

所以自己写一个"多视图解析器",依靠扩展名来区分,可一次准确的选中一个 视图解析器,提高性能(会有多少提高呢?没测试过).

 

下面的例子支持jsp,flt (模板)两种页面生成展示方式,你中以自己添加,支持更多。

 

Xml代码  复制代码  收藏代码
  1.    <!-- 多视图处理器 -->  
  2.    <bean class="com.xxx.core.web.MixedViewResolver">  
  3.     <property name="resolvers">  
  4.         <map>  
  5.             <entry key="jsp">  
  6.                 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
  7.                     <property name="prefix" value="/WEB-INF/jsp/"/>  
  8.                     <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>  
  9.                 </bean>  
  10.             </entry>  
  11.             <entry key="ftl">  
  12.                 <bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">  
  13.                     <property name="cache" value="true"/>  
  14.                     <property name="contentType" value="text/html;charset=UTF-8"></property>  
  15.                     <!-- 宏命令的支持  -->     
  16.                     <property name="exposeSpringMacroHelpers" value="true"/>  
  17.                     <property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView"/>  
  18.                     <property name="requestContextAttribute" value="rc"></property>  
  19.                 </bean>  
  20.             </entry>  
  21.         </map>  
  22.     </property>  
  23. </bean>  
  24.   
  25. <!-- freemarker config -->  
  26.    <bean id="freeMarkerConfigurer" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">    
  27.        <property name="templateLoaderPath" value="/WEB-INF/ftl/" />    
  28.        <property name="freemarkerSettings">    
  29.            <props>    
  30.                <prop key="template_update_delay">5</prop>    
  31.                <prop key="default_encoding">UTF-8</prop>    
  32.                <prop key="locale">zh_CN</prop>    
  33.            </props>    
  34.        </property>    
  35.    </bean>   
[xml]  view plain copy
  1.    <!-- 多视图处理器 -->  
  2.    <bean class="com.xxx.core.web.MixedViewResolver">  
  3.     <property name="resolvers">  
  4.         <map>  
  5.             <entry key="jsp">  
  6.                 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
  7.                     <property name="prefix" value="/WEB-INF/jsp/"/>  
  8.                     <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>  
  9.                 </bean>  
  10.             </entry>  
  11.             <entry key="ftl">  
  12.                 <bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">  
  13.                     <property name="cache" value="true"/>  
  14.                     <property name="contentType" value="text/html;charset=UTF-8"></property>  
  15.                     <!-- 宏命令的支持  -->    
  16.                     <property name="exposeSpringMacroHelpers" value="true"/>  
  17.                     <property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView"/>  
  18.                     <property name="requestContextAttribute" value="rc"></property>  
  19.                 </bean>  
  20.             </entry>  
  21.         </map>  
  22.     </property>  
  23. </bean>  
  24.   
  25. <!-- freemarker config -->  
  26.    <bean id="freeMarkerConfigurer" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">   
  27.        <property name="templateLoaderPath" value="/WEB-INF/ftl/" />   
  28.        <property name="freemarkerSettings">   
  29.            <props>   
  30.                <prop key="template_update_delay">5</prop>   
  31.                <prop key="default_encoding">UTF-8</prop>   
  32.                <prop key="locale">zh_CN</prop>   
  33.            </props>   
  34.        </property>   
  35.    </bean>   
  

 

Java代码  复制代码  收藏代码
  1. import java.util.Locale;   
  2. import java.util.Map;   
  3. import org.springframework.web.servlet.View;   
  4. import org.springframework.web.servlet.ViewResolver;   
  5.   
  6. /**   
  7. * 说明: 多视图处理器  
  8. *   
  9. * @author  赵磊   
  10. * @version 创建时间:2011-8-19 上午09:41:09    
  11. */    
  12. public class MixedViewResolver implements ViewResolver{   
  13.     private Map<String,ViewResolver> resolvers;   
  14.   
  15.     public void setResolvers(Map<String, ViewResolver> resolvers) {   
  16.         this.resolvers = resolvers;   
  17.     }   
  18.        
  19.     public View resolveViewName(String viewName,Locale locale) throws Exception{   
  20.         int n=viewName.lastIndexOf(".");   
  21.         if(n!=-1){   
  22.             //取出扩展名   
  23.             String suffix=viewName.substring(n+1);   
  24.             //取出对应的ViewResolver   
  25.             ViewResolver resolver=resolvers.get(suffix);   
  26.             if(resolver==null){   
  27.                 throw new RuntimeException("No ViewResolver for "+suffix);   
  28.             }   
  29.             return  resolver.resolveViewName(viewName, locale);   
  30.         }else{   
  31.             ViewResolver resolver=resolvers.get("jsp");   
  32.             return  resolver.resolveViewName(viewName, locale);   
  33.         }   
  34.     }   
  35. }  
[java]  view plain copy
  1. import java.util.Locale;  
  2. import java.util.Map;  
  3. import org.springframework.web.servlet.View;  
  4. import org.springframework.web.servlet.ViewResolver;  
  5.   
  6. /**  
  7. * 说明: 多视图处理器 
  8.  
  9. * @author  赵磊  
  10. * @version 创建时间:2011-8-19 上午09:41:09   
  11. */   
  12. public class MixedViewResolver implements ViewResolver{  
  13.     private Map<String,ViewResolver> resolvers;  
  14.   
  15.     public void setResolvers(Map<String, ViewResolver> resolvers) {  
  16.         this.resolvers = resolvers;  
  17.     }  
  18.       
  19.     public View resolveViewName(String viewName,Locale locale) throws Exception{  
  20.         int n=viewName.lastIndexOf(".");  
  21.         if(n!=-1){  
  22.             //取出扩展名  
  23.             String suffix=viewName.substring(n+1);  
  24.             //取出对应的ViewResolver  
  25.             ViewResolver resolver=resolvers.get(suffix);  
  26.             if(resolver==null){  
  27.                 throw new RuntimeException("No ViewResolver for "+suffix);  
  28.             }  
  29.             return  resolver.resolveViewName(viewName, locale);  
  30.         }else{  
  31.             ViewResolver resolver=resolvers.get("jsp");  
  32.             return  resolver.resolveViewName(viewName, locale);  
  33.         }  
  34.     }  
  35. }  

猜你喜欢

转载自blog.csdn.net/qq_41965422/article/details/80362739