Spring3 MVC 如何配置同时使用多视图

Spring3 MVC 怎么配置同时使用多视图
最近开始学习Spring3 MVC Restful,视图采用了jsp和freemarker,分别放在/WEB-INF/JSP和/WEB-INF/FTL文件夹下。使用spring MVC时之返回视图的字符串名称,怎么让它知道这个名称是对应jsp文件夹下还是ftl文件夹下的呢?
在Controller中进行转发时如何处理?
我用的是Spring3中的注解@Controller,然后在调用的方法中只返回字符串(如“success”),那么Spring3是如何确定是转到"/WEB-INF/JSP/success.jsp",还是“/WEB-INF/FTL/success.ftl”呢?
如果可以确定,那又是如何配置呢?
    <context:component-scan base-package="com.spring" />  
    <bean id="freemarkerViewResolver"  
            class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">  
            <property name="order" value="1" />  
            <property name="prefix" value="/freemarker/" />  
            <property name="suffix" value=".ftl" />  
            <property name="contentType" value="text/html;charset=utf-8" />  
            <property name="viewClass">  
                <value>org.springframework.web.servlet.view.freemarker.FreeMarkerView</value>  
            </property>  
        </bean>  
      
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">   
            <property name="order" value="2" />  
            <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />  
             <property name="prefix" value="/WEB-INF/jsp/" />   
             <property name="suffix" value=".jsp"></property>   
        </bean>  
      
    <bean  
            class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">  
            <property name="templateLoaderPath" value="/WEB-INF" />  
            <property name="defaultEncoding" value="UTF-8" />  
    </bean>  

    @RequestMapping(value="/student")  
        protected ModelAndView freemaker() {  
            Student stu1=new Student();  
            stu1.setName("gaoxiang1");  
            stu1.setSex("male1");  
            Student stu2=new Student();  
            stu2.setName("gaoxiang2");  
            stu2.setSex("male2");  
            List a=new ArrayList();  
            a.add(stu1);  
            a.add(stu2);   
            return new ModelAndView("user/student","studentList",a);  
       }  

使用视图链 首先会去找 user/student.ftl 如果找不到就会去找 user/student.jsp


1.首先在web.xml,配置多个Dispatcher,不同视图当然转发不一样!

web.xml
Java代码

   1. <servlet-name>fm</servlet-name>
   2.       <servlet-class>
   3.         org.springframework.web.servlet.DispatcherServlet
   4.       </servlet-class>
   5.       <load-on-startup>1</load-on-startup>
   6.     </servlet>       
   7.     <servlet-mapping>
   8.       <servlet-name>jstl</servlet-name>
   9.       <url-pattern>/*.do</url-pattern>
  10.     </servlet-mapping>       
  11.     <servlet-mapping>
  12.       <servlet-name>fm</servlet-name>
  13.       <url-pattern>/*.fm</url-pattern>
  14.     </servlet-mapping>
  15.     <servlet>

<servlet-name>fm</servlet-name>
  <servlet-class>
    org.springframework.web.servlet.DispatcherServlet
  </servlet-class>
  <load-on-startup>1</load-on-startup>
</servlet>  
<servlet-mapping>
  <servlet-name>jstl</servlet-name>
  <url-pattern>/*.do</url-pattern>
</servlet-mapping>  
<servlet-mapping>
  <servlet-name>fm</servlet-name>
  <url-pattern>/*.fm</url-pattern>
</servlet-mapping>
<servlet>



2.然后再配置*-servlet文件

jstl-servlet.xml
Java代码

   1. <?xml version="1.0" encoding="UTF-8"?>
   2. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
   3. <beans>
   4.     <bean id="simpleUrlHandlerMapping"  class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
   5.         <property name="mappings">
   6.             <props>
   7.                 <prop key="/hello.do">showCon</prop>
   8.            </props>
   9.        </property>
  10.     </bean>
  11.   <bean name="showCon"   class="test.mvc.web.ShowController"/> 
  12.   <bean id="viewResolver"
  13.     class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  14.     <property name="prefix"><value>/WEB-INF/template/jsp/</value></property>
  15.     <property name="suffix"><value>.jsp</value></property>
  16.     <property name="viewClass">
  17.       <value>org.springframework.web.servlet.view.JstlView</value>
  18.     </property>
  19.   </bean>  
  20. </beans>

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="simpleUrlHandlerMapping"  class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="/hello.do">showCon</prop>
           </props>
       </property>
    </bean>
  <bean name="showCon"   class="test.mvc.web.ShowController"/>
  <bean id="viewResolver"
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix"><value>/WEB-INF/template/jsp/</value></property>
    <property name="suffix"><value>.jsp</value></property>
    <property name="viewClass">
      <value>org.springframework.web.servlet.view.JstlView</value>
    </property>
  </bean>
</beans>



fm-servlet.xml
Java代码

   1. <?xml version="1.0" encoding="UTF-8"?>
   2. <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
   3. <beans>
   4.     <bean id="simpleUrlHandlerMapping"  class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
   5.         <property name="mappings">
   6.             <props>
   7.                 <prop key="/hello.fm">showCon</prop>
   8.            </props>
   9.        </property>
  10.     </bean>
  11.     <bean name="showCon"   class="test.mvc.web.ShowController"/>    
  12.     <bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
  13.      <property name="suffix"><value>.fm</value></property>
  14.       <property name="viewClass">
  15.        <value>org.springframework.web.servlet.view.freemarker.FreeMarkerView</value>
  16.       </property>
  17.       <property name="contentType"><value>text/html; charset=gb2312</value></property>
  18.     </bean>  
  19. </beans>

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="simpleUrlHandlerMapping"  class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="/hello.fm">showCon</prop>
           </props>
       </property>
    </bean>
<bean name="showCon"   class="test.mvc.web.ShowController"/>  
<bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="suffix"><value>.fm</value></property>
  <property name="viewClass">
   <value>org.springframework.web.servlet.view.freemarker.FreeMarkerView</value>
  </property>
  <property name="contentType"><value>text/html; charset=gb2312</value></property>
</bean>
</beans>


两个视图都调用test.mvc.web.ShowController,所以即使全部换了视图层,也不影响到控制层的东西,这就是spring MVC强大之一!