`
fortaotao
  • 浏览: 47647 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Spring多视图并存比较好的解决方案

阅读更多
网上搜了下资料,自己也实战了下。分享一下。
传统的web.xml写法不变,如下为相关配置信息:
<servlet>  
  <servlet-name>myportal</servlet-name>  
  <servlet-class>
org.springframework.web.servlet.DispatcherServlet
  </servlet-class>  
  <load-on-startup>1</load-on-startup>  
</servlet>  
<servlet-mapping>  
  <servlet-name>myportal</servlet-name>  
  <url-pattern>*.html</url-pattern>  
</servlet-mapping>

之所以将url-pattern配置成*.html,一是隐藏技术实现,二是增加搜索引擎的搜索概率。看个人爱好。
关键是对应的myportal-servlet.xml文件中的配置.
<bean id="viewResolver" class="com.myportal.web.core.MultipleViewResolver">
    <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/</value>  
			        </property>  
                </bean>
            </entry>
            
            <entry key="vm">
                <bean class="org.springframework.web.servlet.view.velocity.VelocityViewResolver">
                    <property name="contentType" value="text/html;charset=UTF-8" />
                </bean>
            </entry>
        </map>
    </property>
</bean>

然后大家在自己的Controller类里面必须返回如下视图:new ModelAndView("test.jsp");或者new ModelAndView("test.vm");
最后是自己写的ViewResolver,如下:
public class MultipleViewResolver implements ViewResolver
{
	private Map<String, ViewResolver> resolvers;
    public void setResolvers(Map<String, ViewResolver> resolvers) 
    {
        this.resolvers = resolvers;
    }

public View resolveViewName(String viewName, Locale locale)        throws Exception {
		 int n = viewName.lastIndexOf(".");

	        if(n==(-1)) return null;

	        // 获得扩展名:

	        String suffix = viewName.substring(n+1);

	        // 取出对应的ViewResolver:

	        ViewResolver resolver = resolvers.get(suffix);

	        if(resolver!=null)

	            return resolver.resolveViewName(viewName, locale);

	        // 没有找到对应的ViewResolver就抛异常:

	        return null;

	}

}

当然,大家可以对自己写的ViewResovler进行功能上的丰富,比如:设定默认的视图解析为jsp,那你的Controller的View就可以偷懒写成new ModelAndView("test")了。基本功能有了,完善慢慢来。
分享到:
评论
3 楼 Saro 2008-01-17  
为什么不用ResourceBundleViewResolver?
2 楼 fortaotao 2008-01-17  
这个主要是方便自己丰富视图文件的管理.如果自己安排得当,也可以使用SPRING默认的ViewResolver解析顺序来解决多视图.另外,还没有去研究下这些ViewResolver是不是通过扩展名来判断是否渲染当前文件.否则,自己指明ViewResolver应该能提高效率吧.回头看看源码再来回复.
1 楼 kj2ff 2008-01-15  
很不错的想法,不过这么写和分开写有什么区别呢,如果其中一个自定义的resolver逻辑比较复杂的话,整个MultipleViewResolver的逻辑看起来就乱了.

相关推荐

    java spring视频4

    总的来说,"java spring视频4"可能涵盖了一系列深度和广度并存的Spring框架主题,帮助观众深入理解Spring的各个方面,并具备使用Spring进行实际项目开发的能力。通过观看这个视频,学习者可以提升自己在Java Spring...

    Spring5框架学习code

    10. **Spring Batch**:针对批量处理和定时任务,Spring Batch提供了完整的解决方案,包括读取、处理和写入大量数据,以及错误处理和重启功能。 "code_Spring5"这个压缩包中的代码示例可能涵盖了以上提到的各个方面...

    Spring4.3.8官方jar包(包含文档) 下载

    WebFlux与SpringMVC并存,为开发者提供了更多选择。 6. **Spring Boot**:虽然不是Spring 4.3.8的核心部分,但Spring Boot简化了Spring应用的初始设置和配置。它通过预设默认值,使开发者能快速启动项目,而4.3.8的...

    spring-5.2.6.RELEASE-dist.7z

    Spring 5.2.6.RELEASE是Spring框架的一个稳定版本,发布于2020年,包含了多个方面的改进和增强。这个版本支持Java 8及以上版本,并且对Java新特性的利用更加充分。其中,Web模块是Spring框架的重要组成部分,它提供...

    spring3_MVC实战

    【Spring3_MVC实战】系列将引导初学者逐步掌握基于注解的Spring3 MVC框架,事务管理和与Hibernate的集成开发。...记住,动手实践是最好的学习方式,不断尝试和解决问题,你会在这个过程中体验到痛苦与成就并存的乐趣。

    struts2_spring_json.rar_liferay struts2 json_portlet json_spring

    Struts2和Spring框架在Java Web开发中是广泛使用的,它们提供了强大的MVC(Model-View-Controller)架构支持。Liferay是一个流行的开源企业级门户平台,它允许开发者创建和集成portlet来构建复杂的Web应用程序。在...

    spring-framework-5.0.7.RELEASE-dist

    此外,它还引入了WebFlux,这是一个全新的响应式Web框架,可以与传统的Spring MVC并存,提供非阻塞的服务器端和客户端编程模型。 Spring框架还包含一个强大的数据访问层,Spring Data项目简化了与数据库的交互。它...

    Maven项目ssh Struts2+hibernate+Spring+maven框架.zip

    - Spring MVC是Spring框架的一部分,可以替代Struts2作为MVC层,但在这个项目中,两者是并存的,协同工作。 4. **Maven**: - Maven是一个项目管理和综合工具,它管理项目的构建、报告和文档生成,以及依赖关系。...

    基于三个框架的代码

    Spring框架是一个全面的后端开发解决方案,它提供了依赖注入(DI)和面向切面编程(AOP)等核心特性,使得应用程序的组件化和解耦变得容易。在手机通信录项目中,Spring可以用于管理对象的生命周期和关系,例如处理...

    day01-SpringMVC入门.doc

    1. **配置文件**:SpringMVC 配置文件通常命名为`springmvc-servlet.xml`,并存放在`WEB-INF`目录下。有两种存放方式: - 直接放在`WEB-INF`下,需在`web.xml`中配置`DispatcherServlet`的`servlet-name`节点。 - ...

    基于SpringBoot后端实现连接MySQL数据库并存贮数据教程

    6. **丰富的功能**:MySQL提供诸多功能,包括事务支持、索引、触发器、存储过程、视图等,适用于多种应用场景。 7. **广泛应用**:MySQL广泛应用于Web应用、企业级应用、移动应用等领域,是最受欢迎的数据库管理系统...

    struts2springibaticdwr所需的继承架包

    Spring 框架是Java企业级应用的基石,它提供了一种依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)的解决方案,简化了应用的复杂性。Spring还包含了对数据库访问的支持,...

    SpringMVC&&GraphQL

    总结来说,SpringMVC与GraphQL的整合是现代Web开发中的一种创新实践,它结合了SpringMVC的强大后端处理能力和GraphQL的高效数据查询能力,为开发者提供了更灵活、高效的解决方案。在实际项目中,根据需求选择合适的...

    轻量级Java EE企业应用实战第4版

    Spring MVC是Spring框架的一部分,提供了Web层的解决方案,与Struts2类似,也是基于MVC模式,但更注重解耦和灵活性。 Hibernate是一个流行的ORM(对象关系映射)框架,它允许开发者用Java对象来操作数据库,而无需...

    struts2开发流程简图

    在使用Struts2进行开发时,遵循一定的流程可以帮助我们更好地组织代码和管理项目。以下是基于提供的部分内容详细描述的Struts2开发流程: 1. **引入Struts2的JAR包**: 开发Struts2应用的第一步是将Struts2的库...

    Java开发项目基于SSM框架的管理系统 + 数据库sql.zip

    Java开发项目基于SSM框架的管理系统是一个典型的Web应用程序开发实例,它涵盖了多个核心知识点,包括Spring、Spring MVC和MyBatis(SSM)这三大主流Java Web开发框架的集成与应用,以及数据库设计和管理。...

    晾晾多年珍藏 深入浅出Struts 2.pdf

    Struts 2是Apache软件基金会下的一个开源项目,它继承了Struts 1的优点,并且吸取了其他优秀框架如WebWork的精华,提供了一种更加灵活、高效和功能丰富的Web应用开发解决方案。 Struts 2的核心概念包括Action、...

    基于springboot固定设备资产管理系统源码.zip

    综上所述,这个基于SpringBoot的固定设备资产管理系统源码全面展示了SpringBoot在企业级应用中的实践,包括数据访问、业务逻辑、Web交互、安全控制等多个方面,对于学习SpringBoot和Java Web开发具有很高的参考价值...

    STRUTS 学习资料

    Struts 2作为Struts 1的升级版,引入了更多特性,如OGNL(Object-Graph Navigation Language)表达式语言,使得数据绑定更为方便;过滤器架构让Struts 2可以与其他MVC框架并存;Action与结果类型的概念使得业务逻辑...

    基于ssm+mysql线上会议管理系统源码数据库论文.docx

    然而,线上会议与实体会议室的需求并存,这催生了对高效管理系统的需要。本文将深入探讨基于SSM(Spring、SpringMVC、MyBatis)框架和MySQL数据库的线上会议管理系统的设计与实现。 1. 引言 线上会议管理系统旨在...

Global site tag (gtag.js) - Google Analytics