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”呢?
如果可以确定,那又是如何配置呢?
使用视图链 首先会去找 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强大之一!
最近开始学习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强大之一!