Spring与Web框架(例如Spring MVC)漫谈——关于Spring对于多个Web框架的支持
在看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框架的支持的更多相关文章
- Intellij IDEA采用Maven+Spring MVC+Hibernate的架构搭建一个java web项目
原文:Java web 项目搭建 Java web 项目搭建 简介 在上一节java web环境搭建中,我们配置了开发java web项目最基本的环境,现在我们将采用Spring MVC+Spring ...
- asp.net mvc 简单项目框架的搭建(二)—— Spring.Net在Mvc中的简单应用
摘要:上篇写了如何搭建一个简单项目框架的上部分,讲了关于Dal和Bll之间解耦的相关知识,这篇来把后i面的部分说一说. 上篇讲到DbSession,现在接着往下讲. 首先,还是把一些类似的操作完善一下 ...
- 深入浅出的理解框架(Struts2、Hibernate、Spring)与 MVC 设计模式
现在许许多多的初学者和程序员,都在趋之若鹜地学习Web开发的宝典级框架:Struts2,Spring,Hibernate.似乎这些框架成为了一个人是否精通Java,是否会写J2EE程序的唯一事实标准和 ...
- spring boot 1.x完整学习指南(含各种常见问题servlet、web.xml、maven打包,spring mvc差别及解决方法)
spring boot 入门 关于版本的选择,spring boot 2.0开始依赖于 Spring Framework 5.1.0,而spring 5.x和之前的版本差距比较大,而且应该来说还没有广 ...
- Spring与web MVC的整合——Spring的应用上下文管理
问题1 如何让web容器加载你的web MVC框架 对于基于servlet的web容器来说,遵循的是servlet规范,入口配置文件是web.xml.这类web容器会在启动的时候会而且仅会加载如下三种 ...
- [置顶]
Java Web学习总结(24)——SSM(Spring+SpringMVC+MyBatis)框架快速整合入门教程
1.基本概念 1.1.Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One ...
- 精尽Spring MVC源码分析 - 寻找遗失的 web.xml
该系列文档是本人在学习 Spring MVC 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释 Spring MVC 源码分析 GitHub 地址 进行阅读 Spring 版本:5.2. ...
- Spring学习之旅(二)极速创建Spring框架java Web工程项目
编译工具:eclipse 1)创建Web工程:spring_web_helloworld 2)导入所需jar包: 3)创建实体类:同上篇博文 4)创建配置文件hellobean.xml.同上篇博文 不 ...
- 请问实现MVC的框架有哪些,实现持久化操作的框架有哪些,还有类似于spring整合的框架又有哪些
2011-04-10 我知道MVC框架有struts.webWork; 持久化的有hibernate.ibatis,而进行整合的我只知道spring了 ------------------- 表示层框 ...
- 自己动手写Spring框架--IOC、MVC
对于一名Java开发人员,我相信没有人不知道 Spring 框架,而且也能够轻松就说出 Spring 的特性-- IOC.MVC.AOP.ORM(batis). 下面我想简单介绍一下我写的轻量级的 S ...
随机推荐
- Java ExecutorService四种线程池及自定义ThreadPoolExecutor机制
一.Java 线程池 Java通过Executors提供四种线程池,分别为:1.newCachedThreadPool:创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收 ...
- 快速上手系列-C语言之指针篇(一)
快速上手系列-C语言之指针篇(一) 浊酒敬风尘 发布时间:18-06-2108:29 指针的灵活运用使得c语言更加强大,指针是C语言中十分重要的部分,可以说指针是C语言的灵魂.当然指针不是万能的,但没 ...
- 如何隐藏EFI分区?
U盘制作PE 后多了个EFI分区, 傲梅分区助手,,里面可以进行隐藏分区 文章来源:刘俊涛的博客 欢迎关注,有问题一起学习欢迎留言.评论
- MongoDB作为windows服务来安装-2
首先区官网下载对应版本的安装文件,我本地的环境是win7 bit64 我下载的版本是:mongodb-win32-x86_64-2.4.6 ok, 文件下载后,开始安装,这里要说一下,如果直接启动Mo ...
- ndroid如何监听开机广播和关机广播
需求描述:有些时候,我们需要我们的程序在开机后能自动运行,在系统即将关闭时,能写入一些记录到指定的文件里. 一.开机广播监听: Android系统启动完成后会发出启动完成广播(android.inte ...
- CentOS下yum安装mysql
其实跟windows下安装过程差别不大,就是下载为了方便使用了yum的方式.安装前先确认下系统是否还安装mysql,卸载是否不完全,再去官网(http://dev.mysql.com/download ...
- C-Lodop提示Access violation at address ...in module 'CLodopPrint32.exe' write of address
C-Lodop提示 Access violation at address ……in module 'CLodopPrint32.exe' write of address ……最近遇到了个问题,上午 ...
- centos安装软件
rpm指令, 该指令安装文件后缀.rpm的可执行程序 yum指令 安装软件源代码,后缀为 .tar.gz(用gzip压缩过的tar包) rpm rpm软件包格式为 (一)查询系统装已经安装的软件信息 ...
- 用Python搞出自己的云词图 | 【带你装起来】
作者:AI算法与图像处理 参考:http://www.sohu.com/a/149657007_236714 云词图简介 什么词云 由词汇组成类似云的彩色图形.“词云”就是对网络文本中出现频率较高的“ ...
- Unstanding LSTM
1.RNNs 我们可以把RNNs看成一个普通网络做多次复制后叠加在一起组合起来,每一个网络都会把输出传递到下一个网络中. 把RNNs按时间步上展开,就得到了下图: 从RNNs链状结构可以容易理解到他是 ...