Spring MVC多视图配置

原文地址:http://blog.csdn.net/rommel1/article/details/7673325

[java]  view plain copy
  1. 1.Spring配置的XML  
[html]  view plain copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2.   
  3. <beans xmlns="http://www.springframework.org/schema/beans"  
  4.  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  5.  xmlns:p="http://www.springframework.org/schema/p"  
  6.  xmlns:context="http://www.springframework.org/schema/context"  
  7.  xsi:schemaLocation="  
  8.  http://www.springframework.org/schema/beans  
  9.  http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
  10.  http://www.springframework.org/schema/context  
  11.  http://www.springframework.org/schema/context/spring-context-3.0.xsd ">  
  12.     <context:component-scan  
  13.      base-package="com.spring.action"/>  
  14.     <!--  
  15.     org.springframework.web.servlet.view.ResourceBundleViewResolver  
  16.     用于多个视图集成时,ResourceBundleViewResolver是通过解析资源文件来解析请求输出文件的。  
  17.     <property name="basename" value="views"></property>,即表示在/WEB-INF/classes路径下有一个  
  18.     views.properties文件,本例中views.properties的内容为  
  19.     welcome.(class)=org.springframework.web.servlet.view.velocity.VelocityView  
  20.     welcome.url=welcome.vm  
  21.     freemarker.(class)=org.springframework.web.servlet.view.freemarker.FreeMarkerView  
  22.     freemarker.url=freemarker.ftl  
  23.     -->  
  24.     <bean class="org.springframework.web.servlet.view.ResourceBundleViewResolver">  
  25.         <property name="basename" value="views">  
  26.         </property>  
  27.         <!-- 
  28.         <property name="order" value="0"></property> 
  29.         -->  
  30.     </bean>  
  31.     <!-- FreeMarker环境配置 -->  
  32.     <bean id="freemarkerConfig"  
  33.       
  34.      class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">  
  35.         <!-- freemarker模板位置 -->  
  36.         <property name="templateLoaderPath" value="/WEB-INF/freemarker/"/>  
  37.     </bean>  
  38.     <!-- velocity环境配置 -->  
  39.     <bean id="velocityConfig"   
  40.   
  41.      class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">  
  42.         <!-- velocity配置文件路径 -->  
  43.         <property name="configLocation" value="/WEB-INF/velocity.properties"/>  
  44.         <!-- velocity模板路径 -->  
  45.         <property name="resourceLoaderPath" value="/WEB-INF/velocity/"/>  
  46.     </bean>  
  47.     <bean id="viewResolver"  
  48.      class="com.spring.action.MultiViewResover">  
  49.         <property name="resolvers">  
  50.             <map>  
  51.                 <entry key="jsp">  
  52.                     <bean  
  53.                      class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
  54.                         <property name="viewClass"  
  55.                          value="org.springframework.web.servlet.view.JstlView"/>  
  56.                         <property name="prefix" value="/WEB-INF/jsp/"/>  
  57.                         <property name="suffix" value=".jsp"/>  
  58.                     </bean>  
  59.                 </entry>  
  60.                 <entry key="ftl">  
  61.                     <bean  
  62.                      class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">  
  63.                         <property name="cache" value="true"/>  
  64.                         <property name="prefix" value="/"/>  
  65.                         <property name="suffix" value=".ftl"/>    
  66.                     </bean>  
  67.                 </entry>  
  68.                 <entry key="vm">  
  69.                     <bean  
  70.                      class="org.springframework.web.servlet.view.velocity.VelocityViewResolver">  
  71.                         <property name="cache" value="true"/>  
  72.                         <property name="prefix" value="/"/>  
  73.                         <property name="suffix" value=".vm"/>  
  74.                     </bean>  
  75.                 </entry>  
  76.             </map>  
  77.         </property>  
  78.     </bean>  
  79.       
  80. </beans>  


2 解析多视图请求的类

 

[java]  view plain copy
  1. package com.spring.action;  
  2.   
  3. import java.util.Locale;  
  4. import java.util.Map;  
  5. import org.springframework.web.servlet.View;  
  6. import org.springframework.web.servlet.ViewResolver;  
  7.   
  8. /** 
  9.  * @author Jeson 
  10.  * @blog:http://www.gbsou.com 
  11.  * @date:Oct 20, 2009 8:39:27 AM 
  12.  * @version :1.0 
  13.  *  
  14.  */  
  15. public class MultiViewResover implements ViewResolver {  
  16.   
  17.     private Map<String, ViewResolver> resolvers;  
  18.   
  19.     @Override  
  20.     public View resolveViewName(String viewName, Locale locale)  
  21.             throws Exception {  
  22.         int n = viewName.lastIndexOf("_"); // 获取  
  23.                                             // viewName(modelAndView中的名字)看其有没有下划线  
  24.         if (n == (-1))  
  25.             return null// 没有则直接返回空  
  26.         // 有的话截取下划线后面的字符串 这里一般是jsp,ftl,vm与配置文件中的<entry key="ftl">的key匹配  
  27.         String suffix = viewName.substring(n + 1);  
  28.         // 根据下划线后面的字符串去获取托管的视图解析类对象  
  29.         ViewResolver resolver = resolvers.get(suffix);  
  30.   
  31.         // 取下划线前面的部分 那时真正的资源名.比如我们要使用hello.jsp 那viewName就应该是hello_jsp  
  32.         viewName = viewName.substring(0, n);  
  33.         if (resolver != null)  
  34.             return resolver.resolveViewName(viewName, locale);  
  35.         return null;  
  36.     }  
  37.   
  38.     public Map<String, ViewResolver> getResolvers() {  
  39.         return resolvers;  
  40.     }  
  41.   
  42.     public void setResolvers(Map<String, ViewResolver> resolvers) {  
  43.         this.resolvers = resolvers;  
  44.     }  
  45. }  


3. action

[java]  view plain copy
  1. package com.spring.action;  
  2.   
  3. import java.util.HashMap;  
  4. import java.util.Map;  
  5.   
  6. import org.springframework.stereotype.Controller;  
  7. import org.springframework.web.bind.annotation.RequestMapping;  
  8. import org.springframework.web.servlet.ModelAndView;  
  9.   
  10. @Controller  
  11. public class HelloWorldAction {  
  12.   
  13.     @RequestMapping(value = "/helloworld.do")  
  14.     public ModelAndView hello() {  
  15.         ModelAndView modelAndView = new ModelAndView();  
  16.         modelAndView.setViewName("hello_jsp");  
  17.         modelAndView.addObject("message""Hello,SpringMvc");  
  18.         return modelAndView;  
  19.     }  
  20.   
  21.     @RequestMapping(value = "/welcome.do")  
  22.     public ModelAndView helloVm() {  
  23.         // ModelAndView modelAndView=new ModelAndView();  
  24.         // modelAndView.setViewName("freemarker_ftl");  
  25.         // modelAndView.addObject("message", "Hello,Velocity");  
  26.         // return modelAndView;  
  27.         Map map = new HashMap();  
  28.         return new ModelAndView("freemarker_ftl",  map); // 根据之前的解释这里就是去寻找  
  29.                                                             // user.ftl资源  
  30.   
  31.     }  
  32.   
  33.     @RequestMapping(value = "/free.do")  
  34.     public ModelAndView helloFreeMarker() {  
  35.         ModelAndView modelAndView = new ModelAndView();  
  36.         modelAndView.setViewName("welcome");  
  37.         modelAndView.addObject("message""Hello,Freemarker");  
  38.         return modelAndView;  
  39.     }  
  40.   
  41. }  


这样 在页面键入对应action就可以访问对应的视图实现了


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值