十八、多视图控制器
当有jsp,flt (模板)等多种页面生成展示方式时,spring默认使用的是“视图解析器链”。 真是一个链,所以性能不好,spring会在“视图解析器链”中顺序的查找,直到找到对应的 “视图解析器” 。jsp视图解析器一定要写在最后面,因为一旦调用jsp,就向浏览器发出数据了,Spring就没有机会再尝试下一个了。
所以自己写一个\多视图解析器\,依靠扩展名来区分,可一次准确的选中一个 视图解析器,提高性能(会有多少提高呢?没测试过).
下面的例子支持jsp,flt (模板)两种页面生成展示方式,你中以自己添加,支持更多。
Xml代码
1. 2. 3. 4. 5. 6.
7. ringframework.web.servlet.view.JstlView\>
9. 10.
11.
12. view.freemarker.FreeMarkerViewResolver\> 13. /html;charset=UTF-8\> 15. 16. \ value=\/> 17. ringframework.web.servlet.view.freemarker.FreeMarkerView\/> 18. \ value=\> 19.
25.
26. k.web.servlet.view.freemarker.FreeMarkerConfigurer\> 27. tl/\ /> 28. 30.
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
15. public void setResolvers(Map
vers) {
16. this.resolvers = resolvers; 17. } 18.
19. public View resolveViewName(String viewName,Locale local
e) 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(\
r for \+suffix);
28. }
29. return resolver.resolveViewName(viewName, local
e);
30. }else{
31. ViewResolver resolver=resolvers.get(\); 32. return resolver.resolveViewName(viewName, local
e);
33. } 34. } 35. }
转载请注明出处:原文地址:http://elf8848.iteye.com/blog/875830
十九、
一句
我们了解这些之后,对Spring3 MVC的控制力就更强大了,想改哪就改哪里。
Xml代码
1.
2. on.DefaultAnnotationHandlerMapping\> 3. 26. ter.StringHttpMessageConverter\ /> 27. erter.ResourceHttpMessageConverter\ /> 28. ter.xml.SourceHttpMessageConverter\ /> 29. converter.xml.XmlAwareFormHttpMessageConverter\ /> 30. ttp.converter.xml.Jaxb2RootElementHttpMessageConverter\ /> -- 处理.. --> 31. rter.json.MappingJacksonHttpMessageConverter\ />