springmvc 多视图控制器

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

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

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

 <!-- 多视图处理器 -->  
   <bean class="com.xxx.core.web.MixedViewResolver">  
    <property name="resolvers">  
        <map>  
            <entry key="jsp">  
                <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
                    <property name="prefix" value="/WEB-INF/jsp/"/>  
                    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>  
                </bean>  
            </entry>  
            <entry key="ftl">  
                <bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">  
                    <property name="cache" value="true"/>  
                    <property name="contentType" value="text/html;charset=UTF-8"></property>  
                    <!-- 宏命令的支持  -->     
                    <property name="exposeSpringMacroHelpers" value="true"/>  
                    <property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView"/>  
                    <property name="requestContextAttribute" value="rc"></property>  
                </bean>  
            </entry>  
        </map>  
    </property>  
</bean>  
  
<!-- freemarker config -->  
   <bean id="freeMarkerConfigurer" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">    
       <property name="templateLoaderPath" value="/WEB-INF/ftl/" />    
       <property name="freemarkerSettings">    
           <props>    
               <prop key="template_update_delay">5</prop>    
               <prop key="default_encoding">UTF-8</prop>    
               <prop key="locale">zh_CN</prop>    
           </props>    
       </property>    
   </bean>   
import java.util.Locale;   
import java.util.Map;   
import org.springframework.web.servlet.View;   
import org.springframework.web.servlet.ViewResolver;   
  
/**   
* 说明: 多视图处理器  
*   
* @author  赵磊   
* @version 创建时间:2011-8-19 上午09:41:09    
*/    
public class MixedViewResolver implements ViewResolver{   
    private Map<String,ViewResolver> resolvers;   
  
    public void setResolvers(Map<String, ViewResolver> resolvers) {   
        this.resolvers = resolvers;   
    }   
       
    public View resolveViewName(String viewName,Locale locale) throws Exception{   
        int n=viewName.lastIndexOf(".");   
        if(n!=-1){   
            //取出扩展名   
            String suffix=viewName.substring(n+1);   
            //取出对应的ViewResolver   
            ViewResolver resolver=resolvers.get(suffix);   
            if(resolver==null){   
                throw new RuntimeException("No ViewResolver for "+suffix);   
            }   
            return  resolver.resolveViewName(viewName, locale);   
        }else{   
            ViewResolver resolver=resolvers.get("jsp");   
            return  resolver.resolveViewName(viewName, locale);   
        }   
    }   
}  

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值