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上进行依赖注入。

原文地址:https://www.cnblogs.com/bigbigbigo/p/10159751.html

时间: 2024-11-13 00:55:51

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

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

问题1 如何让web容器加载你的web MVC框架 对于基于servlet的web容器来说,遵循的是servlet规范,入口配置文件是web.xml.这类web容器会在启动的时候会而且仅会加载如下三种类型的对象: servlet context listener filter 而且有一定的加载和销毁顺序! Loading Servlets, Context Listeners, and Filters Servlets, Context Listeners, and Filters are lo

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

现在许许多多的初学者和程序员,都在趋之若鹜地学习Web开发的宝典级框架:Struts2,Spring,Hibernate.似乎这些框架成为了一个人是否精通Java,是否会写J2EE程序的唯一事实标准和找工作的必备基础. 然而,如果在面试的时候问这些程序员,你们为什么要学习这些框架?这些框架的本质到底是什么?似乎很少很少有人能够给我非常满意的答复.因为他们都在为了学习而学习,为了工作而学习,而不是在真正去深入了解一个框架.其实所有的人都应该思考这样的问题:为什么要学习框架?框架到底给我带来了什么?

spring in action 4 5.1 Getting started with Spring MVC

5.1.1 Following the life of a request Every time a user clicks a link or submits a form in their web browser, a request goes towork. A request's job description is that of a courier. Just like a postal carrier or aFedEx delivery person, a request liv

MVC模式和Spring MVC初识

概述 传统的Model1和Model2 在Model1的模式下,整个Web应用几乎全部是由JSP页面组成,接受和处理用户请求,并对请求处理后直接做出响应:JSP身兼View和Controller两个角色,将控制逻辑和表现逻辑糅合在一起. 缺点: 1.代码的复用性低. 2.增加了应用扩展和维护的难度. Model2是基于MVC架构的设计模式,具体实现如下如: MVC的思想是将一个应用分成三个基本部分,模型(Model).视图(View).控制器(Controller),这三个部分以最少的耦合协同工

Spring系列【12】简单MVC应用

User.java 1 package com.user; 2 3 public class User { 4 private String username; 5 private String password; 6 public String getUsername() { 7 return username; 8 } 9 public void setUsername(String username) { 10 this.username = username; 11 } 12 publi

Spring MVC 学习笔记 spring mvc Schema-based configuration

Spring mvc 目前支持5个tag,分别是 mvc:annotation-driven,mvc:interceptors,mvc:view-controller, mvc:resources和mvc:default-servlet-handlermvc:annotation-driven   注册 DefaultAnnotationHandlerMapping 和AnnotationMethodHandlerAdapter两个bean,及一系列缺省的messageconverter(需要c

SSH三大框架的搭建整合(struts2+spring+hibernate)(转)

原文地址:http://blog.csdn.net/kyle0349/article/details/51751913  尊重原创,请访问原文地址 SSH说的上是javaweb经典框架,不能说100%要会SSH框架,但是大部分公司都在用,说到框架,都会提到ssh吧,这次就以很简单的注册例子来整合SSH框架.整合框架要注意的是先每个框架单独测通后再整合,不然整合后出现问题比较难排查. 环境:windows + MyEclipse + JDK1.7 + Tomcat7 + MySQL 代码已经测通,

spring security 一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架

Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架.它提供了一组可以在Spring应用上下文中 配置的Bean,充分利用了Spring IoC,DI(控制反转Inversion of Control ,DI:Dependency Injection 依赖注入)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作. Spring Security 的前身是 Acegi S

Struts2+Spring+Hibernate实现员工管理增删改查功能(一)之ssh框架整合

前言        转载请标明出处:http://www.cnblogs.com/smfx1314/p/7795837.html 本项目是我写的一个练习,目的是回顾ssh框架的整合以及使用.项目介绍:此项目主要有前台管理员通过登录进入员工管理系统页面,之后可以对员工列表进行常规的增删改查.以及部门列表的增删改查.IDE使用的是eclipse,个人感觉比较好用,不过最近我正在研究idea,数据库是mysql,前台主要以bootstrap为主. 这点是直接摘抄的 struts 控制用的 hibern

【spring mvc】后台spring mvc接收List参数报错如下:org.springframework.beans.BeanInstantiationException: Failed to instantiate [java.util.List]: Specified class is an interface

后台spring mvc接收List参数报错如下:org.springframework.beans.BeanInstantiationException: Failed to instantiate [java.util.List]: Specified class is an interface org.springframework.beans.BeanInstantiationException: Failed to instantiate [java.util.List]: Speci