Spring3 MVC 怎么配置同时使用多视图

本文介绍在Spring MVC中如何配置和使用不同的视图技术,包括JSP和Freemarker。通过配置视图解析器,可以指定不同类型的视图文件路径和后缀,实现灵活的视图转发。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近开始学习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强大之一!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值