zoukankan      html  css  js  c++  java
  • Spring MVC多视图配置

    1.Spring配置的XML

    <?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>

    解析多视图请求的类

    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;
        }
    }

    action

    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就可以访问对应的视图实现了

  • 相关阅读:
    安装驱动后链接DB
    将man文件导出为文本的脚本
    mysql中的DELIMITER
    存储过程模版(mysql)
    struts学习总结
    Java 反射和内省实现spring的IOC和DI
    JDK动态代理
    js跨域
    mysql函数
    正则表达式
  • 原文地址:https://www.cnblogs.com/rongxiang/p/3598438.html
Copyright © 2011-2022 走看看