SpringMVC自定义多视图解析器

实现通过请求url后缀判断返回值类型, 例如 localhost:8080/list 返回JSP页面, localhost:8080/list.json返回json格式数据

1.创建一枚举返回值类型

public enum ResultType { REDIRECT, JSP, JSON, XML }

2.创建自定义的viewResolver

 1 public class JsonViewResolver implements ViewResolver {
 2
 3     private View view;
 4
 5     public View getView() {
 6         return view;
 7     }
 8
 9     public void setView(View view) {
10         this.view = view;
11     }
12
13     @Override
14     public View resolveViewName(String viewName, Locale locale)
15             throws Exception {
16         return this.view;
17     }
18
19 }

JsonViewResolver

 1 public class XmlViewResolver implements ViewResolver {
 2
 3     private View view;
 4
 5     public View getView() {
 6         return view;
 7     }
 8
 9     public void setView(View view) {
10         this.view = view;
11     }
12
13     @Override
14     public View resolveViewName(String viewName, Locale locale)
15             throws Exception {
16         return this.view;
17     }
18
19 }

XmlViewResolver

 1 public class MultipleViewResolver extends WebApplicationObjectSupport implements
 2         ViewResolver {
 3
 4     private Map<String, ViewResolver> resolvers;
 5     private String DefaultViewResolverName = null;
 6
 7     public Map<String, ViewResolver> getResolvers() {
 8         return resolvers;
 9     }
10
11     public void setResolvers(Map<String, ViewResolver> resolvers) {
12         this.resolvers = resolvers;
13     }
14
15     public String getDefaultViewResolverName() {
16         return DefaultViewResolverName;
17     }
18
19     public void setDefaultViewResolverName(String defaultViewResolverName) {
20         DefaultViewResolverName = defaultViewResolverName;
21     }
22
23     private ViewResolver getDefaultViewResolver() {
24         return this.resolvers.get(this.DefaultViewResolverName);
25     }
26
27     @Override
28     public View resolveViewName(String viewName, Locale locale)
29             throws Exception {
30         ViewResolver viewResolver = null;
31         if (viewName.equalsIgnoreCase("json") || viewName.equalsIgnoreCase("xml")) {
32             return this.resolvers.get(viewName).resolveViewName(viewName, locale);
33         }
34         int index = viewName.indexOf(":");
35         if (index == -1) {
36             viewResolver = this.getDefaultViewResolver();
37         } else {
38             if (viewName.substring(0, index).equalsIgnoreCase("redirect")) {
39                 viewResolver = this.getDefaultViewResolver();
40             } else {
41                 viewResolver = this.resolvers.get(viewName.substring(0, index));
42                 viewName = viewName.substring(index + 1);
43             }
44         }
45
46         if(viewResolver != null) {
47             return viewResolver.resolveViewName(viewName, locale);
48         }
49         return null;
50     }
51
52 }

MultipleViewResolver

3.创建MyBaseController, 使所有的Controller都对其继承

 1 public abstract class MyBaseController {
 2
 3     public final String JSON = "json";
 4     public final String XML = "xml";
 5
 6     protected String result(ResultType resultType, String url) {
 7
 8         resultType = resultType == null ? ResultType.JSP : resultType;
 9
10         String ext = RequestUtil.getLookupPathExtension(ThreadLocalUtil
11                 .getRequest());
12
13         if (ext == null) {
14             if (resultType.equals(ResultType.JSON)
15                     || resultType.equals(ResultType.XML)) {
16                 return resultType.name().toLowerCase();
17             }
18         } else if ("JSON".equalsIgnoreCase(ext) || "XML".equalsIgnoreCase(ext)) {
19             return ext;
20         }
21         if (resultType.equals(ResultType.REDIRECT)) {
22             ext = RequestUtil.getLookupPathFullExtension(ThreadLocalUtil
23                     .getRequest());
24             if (ext != null) {
25                 url += ext;
26             }
27         }
28
29         return resultType.name().toLowerCase() + ":" + url;
30     }
31 }

MyBaseController

4.SpringMVC配置

    <bean name="viewResolver"
        class="org.matrixframework.common.viewresolver.MultipleViewResolver">
        <property name="defaultViewResolverName" value="jsp" />
        <property name="resolvers">
            <map>
                <entry key="jsp">
                    <!-- JSP视图解析器 -->
                    <bean name="internalResourceViewResolver"
                        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
                        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
                        <property name="prefix" value="/WEB-INF/views/jsp" />
                        <property name="suffix" value=".jsp" />
                    </bean>
                </entry>
                <entry key="json">
                    <!-- JSON视图解析器 -->
                    <bean name="jsonViewResolver" class="com.framework.common.viewresolver.JsonViewResolver">
                        <property name="view">
                            <bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView">
                                <property name="contentType" value="text/html; charset=utf-8"/>
                            </bean>
                        </property>
                    </bean>
                </entry>
            </map>
        </property>
    </bean>
时间: 2024-10-04 09:25:24

SpringMVC自定义多视图解析器的相关文章

SpringMVC 配置多视图解析器(velocity,jsp)

1.自定义视图解析器 package com.zhaochao.controller; import java.util.HashMap; import java.util.Locale; import java.util.Map; import java.util.Set; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework

SpringMVC与Freemarker的集成以及多视图解析器配置

一.Spring MVC视图解析器 视图解析器的工作流程大致是这样的:Controller的某个方法执行完成以后,返回一个视图(比如:listUser),视图解析器要做的工作就是找到某个对象 来完成视图的渲染,或者跳转到其他的逻辑视图.这里的渲染对象通常就是我们的jsp文件或者我们下面用的Freemarker(例如listUser.jsp或者 listUser.ftl).渲染完成以后,将解析结果发送到客户端浏览器. 下面介绍一下本文需要用到的解析器(更多解析器资料,请参考 http://e-fr

SpringMvc:视图和视图解析器

请求处理方法执行完成后,最终返回一个ModelAndView对象,对于返回String,View或ModelMap等类型的处理方法,SpringMvc也会在内部将它们装配成一个ModelAndView对象的,它包含了逻辑名和模型对象的视图. SpringMvc借助视图解析器(ViewResolver)得到最终的视图对象(View),最终的视图可能是JSP,也可能是Excel等各种表现形式的视图.对于最终采取何种视图对象对模型数据进行渲染,处理器并不关心,处理器的工作重点聚焦在生产模型数据的工作上

[转载]开发 Spring 自定义视图和视图解析器

原文出处 http://www.ibm.com/developerworks/cn/java/j-lo-springview/ 概述 Spring 3.0 默认包含了多种视图和视图解析器,比如 JSP.Velocity 视图等,但在某些情况下,我们需要开发自定义的视图及其解析器,以便显示特殊文件格式的视图,我们也可以使用自定义视图及解析器,针对特定的视图做相应的处理.本文将通过一个示例来介绍如何开发 Spring 自定义视图和视图解析器,来显示后缀名为 SWF 的视图,并提供一个简单的注册机制,

SpringMVC——视图和视图解析器

请求处理方法执行完成后,最终返回一个 ModelAndView对象.对于那些返回 String,View 或 ModeMap 等类型的处理方法,Spring MVC 也会在内部将它们装配成一个ModelAndView 对象,它包含了逻辑名和模型对象的视图 Spring MVC 借助视图解析器(ViewResolver)得到最终的视图对象(View),最终的视图可以是 JSP ,也可能是Excel.JFreeChart 等各种表现形式的视图 对于最终究竟采取何种视图对象对模型数据进行渲染,处理器并

SpringMVC中用于绑定请求数据的注解以及配置视图解析器

SpringMVC中用于绑定请求数据的注解 在上一篇文章中我们简单介绍了@RequestMapping与@RequestParam注解,知道了如何去配置地址映射,本篇则介绍一些用于处理request数据的注解. [email protected]注解,该注解用于处理request中的header部分,也就是http请求头的部分,它可以把header部分的值绑定到方法的参数上,示例: package org.zero01.test; import org.springframework.stere

SpringMVC视图解析器

AbstractController 先创建一个MyAbstorctController类,并且让他继承AbstractController父类,并实现该父类中的方法. public class MyAbstorctController extends AbstractController{ protected ModelAndView handleRequestInternal(HttpServletRequest httpServletRequest, HttpServletResponse

SpringMVC 视图和视图解析器&amp;表单标签

视图和视图解析器 请求处理方法执行完成后,最终返回一个 ModelAndView 对象.对于那些返回 String,View 或 ModeMap 等类型的处理方法,Spring MVC 也会在内部将它们装配成一个ModelAndView 对象,它包含了逻辑名和模型对象的视图 Spring MVC 借助视图解析器(ViewResolver)得到最终的视图对象(View),最终的视图可以是 JSP ,也可能是Excel.JFreeChart 等各种表现形式的视图 视图 视图的作用是渲染模型数据,将模

BeanNameViewResolver自定义视图解析器

RedirectView:定义外部资源视图对象 JstlView:定义内部资源视图对象 使用自定义视图解析器 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"