javascript
Spring MVC 教程,快速入门,深入分析——多视图控制器
十八、多視圖控制器
?
當有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>???
??
?
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);??
????????}??
????}??
}??
轉載于:https://blog.51cto.com/lidonglong/1703588
總結
以上是生活随笔為你收集整理的Spring MVC 教程,快速入门,深入分析——多视图控制器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 获取服务器配置信息的方法
- 下一篇: 使用Firebug或chrome-dev