Spring MVC多视图配置

拜拜、爱过 提交于 2019-12-06 10:10:04

[java]
1.Spring配置的XML 
[html]
<?xml version="1.0" encoding="UTF-8"?> 
 
<beans xmlns="http://www.springframework.org/schema/beans" 
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 xmlns:p="http://www.springframework.org/schema/p" 
 xmlns:context="http://www.springframework.org/schema/context" 
 xsi:schemaLocation=" 
 http://www.springframework.org/schema/beans 
 http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
 http://www.springframework.org/schema/context 
 http://www.springframework.org/schema/context/spring-context-3.0.xsd "> 
    <context:component-scan 
     base-package="com.spring.action"/> 
    <!-- 
    org.springframework.web.servlet.view.ResourceBundleViewResolver 
    用于多个视图集成时,ResourceBundleViewResolver是通过解析资源文件来解析请求输出文件的。 
    <property name="basename" value="views"></property>,即表示在/WEB-INF/classes路径下有一个 
    views.properties文件,本例中views.properties的内容为 
    welcome.(class)=org.springframework.web.servlet.view.velocity.VelocityView 
    welcome.url=welcome.vm 
    freemarker.(class)=org.springframework.web.servlet.view.freemarker.FreeMarkerView 
    freemarker.url=freemarker.ftl 
    --> 
    <bean class="org.springframework.web.servlet.view.ResourceBundleViewResolver"> 
        <property name="basename" value="views"> 
        </property> 
        <!--
        <property name="order" value="0"></property>
        --> 
    </bean> 
    <!-- FreeMarker环境配置 --> 
    <bean id="freemarkerConfig" 
     
     class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> 
        <!-- freemarker模板位置 --> 
        <property name="templateLoaderPath" value="/WEB-INF/freemarker/"/> 
    </bean> 
    <!-- velocity环境配置 --> 
    <bean id="velocityConfig"  
 
     class="org.springframework.web.servlet.view.velocity.VelocityConfigurer"> 
        <!-- velocity配置文件路径 --> 
        <property name="configLocation" value="/WEB-INF/velocity.properties"/> 
        <!-- velocity模板路径 --> 
        <property name="resourceLoaderPath" value="/WEB-INF/velocity/"/> 
    </bean> 
    <bean id="viewResolver" 
     class="com.spring.action.MultiViewResover"> 
        <property name="resolvers"> 
            <map> 
                <entry key="jsp"> 
                    <bean 
                     class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
                        <property name="viewClass" 
                         value="org.springframework.web.servlet.view.JstlView"/> 
                        <property name="prefix" value="/WEB-INF/jsp/"/> 
                        <property name="suffix" value=".jsp"/> 
                    </bean> 
                </entry> 
                <entry key="ftl"> 
                    <bean 
                     class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"> 
                        <property name="cache" value="true"/> 
                        <property name="prefix" value="/"/> 
                        <property name="suffix" value=".ftl"/>   
                    </bean> 
                </entry> 
                <entry key="vm"> 
                    <bean 
                     class="org.springframework.web.servlet.view.velocity.VelocityViewResolver"> 
                        <property name="cache" value="true"/> 
                        <property name="prefix" value="/"/> 
                        <property name="suffix" value=".vm"/> 
                    </bean> 
                </entry> 
            </map> 
        </property> 
    </bean> 
     
</beans> 

2 解析多视图请求的类

 

[java]
package com.spring.action; 
 
import java.util.Locale; 
import java.util.Map; 
import org.springframework.web.servlet.View; 
import org.springframework.web.servlet.ViewResolver; 
 
/**
 * @author Jeson
 * @blog :http://www.gbsou.com
 * @date:Oct 20, 2009 8:39:27 AM
 * @version :1.0
 * 
 */ 
public class MultiViewResover implements ViewResolver { 
 
    private Map<String, ViewResolver> resolvers; 
 
    @Override 
    public View resolveViewName(String viewName, Locale locale) 
            throws Exception { 
        int n = viewName.lastIndexOf("_"); // 获取 
                                            // viewName(modelAndView中的名字)看其有没有下划线 
        if (n == (-1)) 
            return null; // 没有则直接返回空 
        // 有的话截取下划线后面的字符串 这里一般是jsp,ftl,vm与配置文件中的<entry key="ftl">的key匹配 
        String suffix = viewName.substring(n + 1); 
        // 根据下划线后面的字符串去获取托管的视图解析类对象 
        ViewResolver resolver = resolvers.get(suffix); 
 
        // 取下划线前面的部分 那时真正的资源名.比如我们要使用hello.jsp 那viewName就应该是hello_jsp 
        viewName = viewName.substring(0, n); 
        if (resolver != null) 
            return resolver.resolveViewName(viewName, locale); 
        return null; 
    } 
 
    public Map<String, ViewResolver> getResolvers() { 
        return resolvers; 
    } 
 
    public void setResolvers(Map<String, ViewResolver> resolvers) { 
        this.resolvers = resolvers; 
    } 

3. action

[java]
package com.spring.action; 
 
import java.util.HashMap; 
import java.util.Map; 
 
import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.servlet.ModelAndView; 
 
@Controller 
public class HelloWorldAction { 
 
    @RequestMapping(value = "/helloworld.do") 
    public ModelAndView hello() { 
        ModelAndView modelAndView = new ModelAndView(); 
        modelAndView.setViewName("hello_jsp"); 
        modelAndView.addObject("message", "Hello,SpringMvc"); 
        return modelAndView; 
    } 
 
    @RequestMapping(value = "/welcome.do") 
    public ModelAndView helloVm() { 
        // ModelAndView modelAndView=new ModelAndView(); 
        // modelAndView.setViewName("freemarker_ftl"); 
        // modelAndView.addObject("message", "Hello,Velocity"); 
        // return modelAndView; 
        Map map = new HashMap(); 
        return new ModelAndView("freemarker_ftl",  map); // 根据之前的解释这里就是去寻找 
                                                            // user.ftl资源 
 
    } 
 
    @RequestMapping(value = "/free.do") 
    public ModelAndView helloFreeMarker() { 
        ModelAndView modelAndView = new ModelAndView(); 
        modelAndView.setViewName("welcome"); 
        modelAndView.addObject("message", "Hello,Freemarker"); 
        return modelAndView; 
    } 
 

这样 在页面键入对应action就可以访问对应的视图实现了
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!