在看Spring MVC的官方文档时,最后一章是关于Spring对于其它Web框架的支持(如JSF,Apache Struts 2.x,Tapestry 5.x),当然Spring自己的MVC框架Spring MVC就不用多说了。

  这里并不想讨论其它的Web框架,而是记录下这章开头提到的关于Spring为何还要支持其它Web框架。

  Spring Framwork的一个核心价值观是:允许开发者自由选择。

  一般而言,Spring并不会强迫你使用或者购买某些特别的架构、技术或者方案,尽管它们肯定会特别推荐一些。

  尽管Spring自己也提供了一个Web框架,即Spring MVC,但是选择这些技术方案的自由取决于开发者以及他们的团队。

  所以Spring仍然提供了对多个其它Web框架的集成与支持。

  不论是选择什么样的Web框架,都需要对Spring进行通用的配置。

  Spring的轻量级应用模型所信奉的理念是:软件架构需要分层。

  而在“经典”分层体系结构中,web层只是众多层中的一个。它作为服务端程序的一个入口点,将处理委托给业务逻辑层中的对象(Service objects),进行特定的业务处理。

  在Spring中, service objects,或者business-specific objects、data-access objects或其它,这些都存在与不同的业务上下文中(business context,不包含web或者表示层对象。表示层对象,例如Spring MVC controllers,通常在不同的“表示上下文(presentation context)”中配置)。

  这一章的目的,就是详细介绍如何配置一个Spring容器(一个WebApplicationContext),然后在这个容器中包含你的应用中所有的business beans。

  你所需要做得是,在Web项目的web.xml中声明一个ContextLoaderListener的<listen/>元素,并为它添加<context-param/> 元素,以指定Spring的XML配置文件的加载位置,如下:

<listener>
<listenerclass>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener> <context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext*.xml</param-value>
</context-param>

  如果没有指定XML配置文件,ContextLoaderListener会自动寻找“/WEB-INF/applicationContext.xml”来加载。

  一旦加载完成,Spring便创造了一个基于applicationContext.xml中相关bean定义的WebApplicationContext 对象实例,并把这个实例存储在Web应用的ServletContext中。(一个Web应用只有一个ServletContext)。

  所有的Java Web框架都基于 Servlet API,所以都可以通过以下方式访问这个由ContextLoaderListener创建的,包含“business context”的ApplicationContext:

WebApplicationContext ctx =  WebApplicationContextUtils.getWebApplicationContext(servletContext);    

  WebApplicationContextUtils类是为了方便起见,以便不需要记住ServletContext中对应的属性名。而如果WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE键下不存在对象,则其getWebApplicationContext()方法返回null。

  为了免去在应用程序中获取NullPointerExceptions的风险,最好使用getRequiredWebApplicationContext()方法。 当ApplicationContext丢失时,此方法抛出异常。

  一旦你有了对WebApplicationContext对象的引用,你就可以根据bean的名称或类型检索它们。大多数开发人员按名称检索bean,然后将它们转换为一个其实现的接口。

  而且Web框架都提供了简易的方式查找bean,他们不仅可以方便地从Spring的容器中获取bean,还允许你在它们的Controller上进行依赖注入。

Spring与Web框架(例如Spring MVC)漫谈——关于Spring对于多个Web框架的支持的更多相关文章

  1. Intellij IDEA采用Maven+Spring MVC+Hibernate的架构搭建一个java web项目

    原文:Java web 项目搭建 Java web 项目搭建 简介 在上一节java web环境搭建中,我们配置了开发java web项目最基本的环境,现在我们将采用Spring MVC+Spring ...

  2. asp.net mvc 简单项目框架的搭建(二)—— Spring.Net在Mvc中的简单应用

    摘要:上篇写了如何搭建一个简单项目框架的上部分,讲了关于Dal和Bll之间解耦的相关知识,这篇来把后i面的部分说一说. 上篇讲到DbSession,现在接着往下讲. 首先,还是把一些类似的操作完善一下 ...

  3. 深入浅出的理解框架(Struts2、Hibernate、Spring)与 MVC 设计模式

    现在许许多多的初学者和程序员,都在趋之若鹜地学习Web开发的宝典级框架:Struts2,Spring,Hibernate.似乎这些框架成为了一个人是否精通Java,是否会写J2EE程序的唯一事实标准和 ...

  4. spring boot 1.x完整学习指南(含各种常见问题servlet、web.xml、maven打包,spring mvc差别及解决方法)

    spring boot 入门 关于版本的选择,spring boot 2.0开始依赖于 Spring Framework 5.1.0,而spring 5.x和之前的版本差距比较大,而且应该来说还没有广 ...

  5. Spring与web MVC的整合——Spring的应用上下文管理

    问题1 如何让web容器加载你的web MVC框架 对于基于servlet的web容器来说,遵循的是servlet规范,入口配置文件是web.xml.这类web容器会在启动的时候会而且仅会加载如下三种 ...

  6. [置顶] Java Web学习总结(24)——SSM(Spring+SpringMVC+MyBatis)框架快速整合入门教程

    1.基本概念 1.1.Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One  ...

  7. 精尽Spring MVC源码分析 - 寻找遗失的 web.xml

    该系列文档是本人在学习 Spring MVC 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释 Spring MVC 源码分析 GitHub 地址 进行阅读 Spring 版本:5.2. ...

  8. Spring学习之旅(二)极速创建Spring框架java Web工程项目

    编译工具:eclipse 1)创建Web工程:spring_web_helloworld 2)导入所需jar包: 3)创建实体类:同上篇博文 4)创建配置文件hellobean.xml.同上篇博文 不 ...

  9. 请问实现MVC的框架有哪些,实现持久化操作的框架有哪些,还有类似于spring整合的框架又有哪些

    2011-04-10 我知道MVC框架有struts.webWork; 持久化的有hibernate.ibatis,而进行整合的我只知道spring了 ------------------- 表示层框 ...

  10. 自己动手写Spring框架--IOC、MVC

    对于一名Java开发人员,我相信没有人不知道 Spring 框架,而且也能够轻松就说出 Spring 的特性-- IOC.MVC.AOP.ORM(batis). 下面我想简单介绍一下我写的轻量级的 S ...

随机推荐

  1. WEB-INF目录下登录表单提交的重定向

    问题描述 登陆表单提交跳转后刷新会重新提交表单,但是使用重定向时不走视图解析器,不能访问WEB-INF下的资源 解决方法 原方法 @RequestMapping(value = "/logi ...

  2. 设置django 时间

    使用Django的DateTimeField(auro_now_add=True)设置当前时间为创建时间时,时间往往与当前时间对应不上,这是由于Django默认使用的是[UTC](世界标准时间)时区, ...

  3. PCA人脸识别学习笔记---原理篇

     前言 在PCA人脸识别中我们把一个人脸图片看做一个特征向量,PCA做的事情就是:找到这样一组基向量来表示已有的数据点,不仅仅是将高维度数据变成低维度数据,更能够找到最关键信息. 假设已有数据{xi} ...

  4. WPF清爽酷炫的界面Mahapps.metro

    最近WPF项目中要求软件的风格要传统化一点,查阅了下资料发现了Mahapps.metro. 官网 http://mahapps.com/ 下面是官方的DOME,https://github.com/M ...

  5. 07-08 Flutter仿京东商城项目 商品分类页面布局:Flutter仿京东商城项目 商品分类页面数据渲染

    Flutter实战(交流群:452892873) 本项目是一个实战项目,根据目录建文件,并复制从第一节到最新更新的文章,可以构成完整的一个请求后台数据的项目: CateModel.dart class ...

  6. k8s install kubeadm网络原因访问不了谷哥and gpg: no valid OpenPGP data found. 解决办法

    gpg: no valid OpenPGP data found. 解决办法 待做.................................... 卡助在这curl -s https://pa ...

  7. Spring Aop(十二)——编程式的创建Aop代理之AspectjProxyFactory

    转发地址:https://www.iteye.com/blog/elim-2397922 编程式的创建Aop代理之AspectjProxyFactory 之前已经介绍了一款编程式的创建Aop代理的工厂 ...

  8. GBDT详解例子

    https://blog.csdn.net/zpalyq110/article/details/79527653

  9. 【ABAP系列】ABAP CL_ABAP_CONV_IN_CE

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]ABAP CL_ABAP_CON ...

  10. 学习SpringBoot整合SSM三大框架源码之SpringBoot

    Spring Boot源码剖析 一.Spring Boot 项目的启动入口流程分析 Spring Boot项目的启动入口main线程上有一个@SpringBootApplication( @Confi ...