此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Framework 6.2.10spring-doc.cadn.net.cn

其他 Web 框架

本章详细介绍了 Spring 与第三方 Web 框架的集成。spring-doc.cadn.net.cn

Spring 框架的核心价值主张之一是支持选择。从一般意义上讲,Spring 不会强迫您使用或购买任何 特定的架构、技术或方法(尽管它肯定建议 有些高于其他)。这种自由选择架构、技术或 与开发人员及其开发团队最相关的方法是 可以说,在 Web 领域最为明显,Spring 提供了自己的 Web 框架 (Spring MVCSpring WebFlux) 同时,支持与多家热门第三方集成 Web 框架。spring-doc.cadn.net.cn

通用配置

在深入了解每个受支持的 Web 框架的集成细节之前,让我们 首先看一下不特定于任何一个 Web 的常见 Spring 配置 框架。(本节同样适用于 Spring 自己的 Web 框架变体。spring-doc.cadn.net.cn

Spring 的轻量级所拥护的概念之一(因为缺乏更好的词) 应用程序模型是分层架构的模型。记住,在一个“经典” 分层架构,Web 层只是众多层之一。它作为 入口点到服务器端应用程序,它委托给服务对象 (门面),以满足特定于业务的(和 与演示技术无关)用例。在 Spring 中,这些服务对象,任何其他 特定于业务的对象、数据访问对象和其他对象存在于一个不同的“业务”中 context“,其中不包含 Web 或表示层对象(表示对象、 例如 Spring MVC 控制器,通常配置在一个不同的“表示 上下文“)。本节详细介绍了如何配置 Spring 容器(WebApplicationContext),其中包含应用程序中的所有“business bean”。spring-doc.cadn.net.cn

继续细节,您需要做的就是声明一个ContextLoaderListener在标准 Jakarta EE servlet 中web.xml文件,并添加contextConfigLocation <context-param/>部分(在同一文件中)定义了哪个 要加载的 Spring XML 配置文件集。spring-doc.cadn.net.cn

考虑以下几点<listener/>配置:spring-doc.cadn.net.cn

<listener>
	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

进一步考虑以下事项<context-param/>配置:spring-doc.cadn.net.cn

<context-param>
	<param-name>contextConfigLocation</param-name>
	<param-value>/WEB-INF/applicationContext*.xml</param-value>
</context-param>

如果未指定contextConfigLocationcontext 参数,则ContextLoaderListener查找名为/WEB-INF/applicationContext.xml自 负荷。加载上下文文件后,Spring 会创建一个WebApplicationContext对象,并将其存储在ServletContext网络的 应用。spring-doc.cadn.net.cn

所有 Java Web 框架都构建在 Servlet API 之上,因此您可以使用 以下代码片段以访问此“业务上下文”ApplicationContextContextLoaderListener.spring-doc.cadn.net.cn

以下示例显示了如何获取WebApplicationContext:spring-doc.cadn.net.cn

WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(servletContext);

WebApplicationContextUtils类是为了方便起见,所以你不需要记住ServletContext属性。其getWebApplicationContext()方法返回null如果对象 在WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE钥匙。而不是冒险获得NullPointerExceptions在您的应用中,它更好 使用getRequiredWebApplicationContext()方法。此方法抛出异常 当ApplicationContext不见了。spring-doc.cadn.net.cn

一旦你引用了WebApplicationContext,您可以通过其 名称或类型。大多数开发人员按名称检索 bean,然后将它们转换为其中一个 实现的接口。spring-doc.cadn.net.cn

幸运的是,本节中的大多数框架都有更简单的查找 Bean 的方法。 它们不仅可以轻松地从 Spring 容器中获取豆子,而且还可以让您 在其控制器上使用依赖注入。每个 Web 框架部分都有更多详细信息 关于其具体的整合策略。spring-doc.cadn.net.cn

JSF

JavaServer Faces (JSF) 是 JCP 的标准基于组件的事件驱动 Web 用户界面框架。它是雅加达 EE 保护伞的官方组成部分,也是 可单独使用,例如,通过在 Tomcat 中嵌入 Mojarra 或 MyFaces。spring-doc.cadn.net.cn

请注意,JSF 的最新版本与 CDI 基础设施紧密相连 在应用程序服务器中,一些新的 JSF 功能只能在这样的 环境。Spring 的 JSF 支持不再积极发展,主要是 在对基于 JSF 的旧应用程序进行现代化改造时,出于迁移目的而存在。spring-doc.cadn.net.cn

Spring 的 JSF 集成中的关键元素是 JSFELResolver机制。spring-doc.cadn.net.cn

Spring Bean 解析器

SpringBeanFacesELResolver符合 JSF 标准ELResolver实现 与 JSF 和 JSP 使用的标准 Unified EL 集成。它委托给 Spring 的“业务上下文”WebApplicationContext首先,然后到 底层 JSF 实现的默认解析器。spring-doc.cadn.net.cn

在配置方面,您可以定义SpringBeanFacesELResolver在您的 JSF 中faces-context.xml文件,如以下示例所示:spring-doc.cadn.net.cn

<faces-config>
	<application>
		<el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver>
		...
	</application>
</faces-config>

FacesContextUtils

一个定制ELResolver将属性映射到faces-config.xml,但是,有时,您可能需要显式地抓取一个 bean。 这FacesContextUtils班级让这一切变得容易。它类似于WebApplicationContextUtils,除了 它需要一个FacesContext参数而不是ServletContext参数。spring-doc.cadn.net.cn

以下示例演示如何使用FacesContextUtils:spring-doc.cadn.net.cn

ApplicationContext ctx = FacesContextUtils.getWebApplicationContext(FacesContext.getCurrentInstance());

Apache Struts

Struts 由 Craig McClanahan 发明,是一个开源项目 由 Apache 软件基金会托管。Struts 1.x 大大简化了 JSP/Servlet 编程范式,并赢得了许多使用专有 框架。它简化了编程模型;它是开源的;它有一个很大的 社区,这让项目在 Java Web 开发人员中发展并流行起来。spring-doc.cadn.net.cn

作为原始 Struts 1.x 的继任者,请查看 Struts 2.x 或更新版本以及 Struts 提供的用于内置 Spring 集成的 Spring 插件spring-doc.cadn.net.cn

Apache Tapestry

Tapestry 是一个“面向组件的框架,用于创建动态、健壮、高度可扩展的 Java Web 应用程序。spring-doc.cadn.net.cn

虽然 Spring 拥有自己强大的 Web 层,但有许多独特的通过组合使用 Tapestry 构建企业 Java 应用程序的优势用于 Web 用户界面和用于较低层的 Spring 容器。spring-doc.cadn.net.cn

有关更多信息,请参阅 Tapestry 的 Spring 专用集成模块spring-doc.cadn.net.cn

更多资源

以下链接可转到有关本章中描述的各种 Web 框架的更多资源。spring-doc.cadn.net.cn