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

xiaoxiao2021-02-28  37



多视图控制器

 

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

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

 

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

 

Xml代码       <!-- 多视图处理器 -->     <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>    [xml]  view plain copy    <!-- 多视图处理器 -->     <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>      

 

Java代码    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);           }       }   }   [java]  view plain copy 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);          }      }  }  
转载请注明原文地址: https://www.6miu.com/read-2630585.html

最新回复(0)