此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Framework 6.2.10! |
其他 Web 框架
本章详细介绍了 Spring 与第三方 Web 框架的集成。
Spring 框架的核心价值主张之一是支持选择。从一般意义上讲,Spring 不会强迫您使用或购买任何 特定的架构、技术或方法(尽管它肯定建议 有些高于其他)。这种自由选择架构、技术或 与开发人员及其开发团队最相关的方法是 可以说,在 Web 领域最为明显,Spring 提供了自己的 Web 框架 (Spring MVC 和 Spring WebFlux) 同时,支持与多家热门第三方集成 Web 框架。
通用配置
在深入了解每个受支持的 Web 框架的集成细节之前,让我们 首先看一下不特定于任何一个 Web 的常见 Spring 配置 框架。(本节同样适用于 Spring 自己的 Web 框架变体。
Spring 的轻量级所拥护的概念之一(因为缺乏更好的词)
应用程序模型是分层架构的模型。记住,在一个“经典”
分层架构,Web 层只是众多层之一。它作为
入口点到服务器端应用程序,它委托给服务对象
(门面),以满足特定于业务的(和
与演示技术无关)用例。在 Spring 中,这些服务对象,任何其他
特定于业务的对象、数据访问对象和其他对象存在于一个不同的“业务”中
context“,其中不包含 Web 或表示层对象(表示对象、
例如 Spring MVC 控制器,通常配置在一个不同的“表示
上下文“)。本节详细介绍了如何配置 Spring 容器(WebApplicationContext
),其中包含应用程序中的所有“business bean”。
继续细节,您需要做的就是声明一个ContextLoaderListener
在标准 Jakarta EE servlet 中web.xml
文件,并添加contextConfigLocation
<context-param/>
部分(在同一文件中)定义了哪个
要加载的 Spring XML 配置文件集。
考虑以下几点<listener/>
配置:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
进一步考虑以下事项<context-param/>
配置:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext*.xml</param-value>
</context-param>
如果未指定contextConfigLocation
context 参数,则ContextLoaderListener
查找名为/WEB-INF/applicationContext.xml
自
负荷。加载上下文文件后,Spring 会创建一个WebApplicationContext
对象,并将其存储在ServletContext
网络的
应用。
所有 Java Web 框架都构建在 Servlet API 之上,因此您可以使用
以下代码片段以访问此“业务上下文”ApplicationContext
由ContextLoaderListener
.
以下示例显示了如何获取WebApplicationContext
:
WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(servletContext);
这WebApplicationContextUtils
类是为了方便起见,所以你不需要记住ServletContext
属性。其getWebApplicationContext()
方法返回null
如果对象
在WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE
钥匙。而不是冒险获得NullPointerExceptions
在您的应用中,它更好
使用getRequiredWebApplicationContext()
方法。此方法抛出异常
当ApplicationContext
不见了。
一旦你引用了WebApplicationContext
,您可以通过其
名称或类型。大多数开发人员按名称检索 bean,然后将它们转换为其中一个
实现的接口。
幸运的是,本节中的大多数框架都有更简单的查找 Bean 的方法。 它们不仅可以轻松地从 Spring 容器中获取豆子,而且还可以让您 在其控制器上使用依赖注入。每个 Web 框架部分都有更多详细信息 关于其具体的整合策略。
JSF
JavaServer Faces (JSF) 是 JCP 的标准基于组件的事件驱动 Web 用户界面框架。它是雅加达 EE 保护伞的官方组成部分,也是 可单独使用,例如,通过在 Tomcat 中嵌入 Mojarra 或 MyFaces。
请注意,JSF 的最新版本与 CDI 基础设施紧密相连 在应用程序服务器中,一些新的 JSF 功能只能在这样的 环境。Spring 的 JSF 支持不再积极发展,主要是 在对基于 JSF 的旧应用程序进行现代化改造时,出于迁移目的而存在。
Spring 的 JSF 集成中的关键元素是 JSFELResolver
机制。
Spring Bean 解析器
SpringBeanFacesELResolver
符合 JSF 标准ELResolver
实现
与 JSF 和 JSP 使用的标准 Unified EL 集成。它委托给
Spring 的“业务上下文”WebApplicationContext
首先,然后到
底层 JSF 实现的默认解析器。
在配置方面,您可以定义SpringBeanFacesELResolver
在您的 JSF 中faces-context.xml
文件,如以下示例所示:
<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
参数。
以下示例演示如何使用FacesContextUtils
:
ApplicationContext ctx = FacesContextUtils.getWebApplicationContext(FacesContext.getCurrentInstance());
Apache Tapestry
Tapestry 是一个“面向组件的框架,用于创建动态、健壮、高度可扩展的 Java Web 应用程序。
虽然 Spring 拥有自己强大的 Web 层,但有许多独特的通过组合使用 Tapestry 构建企业 Java 应用程序的优势用于 Web 用户界面和用于较低层的 Spring 容器。
有关更多信息,请参阅 Tapestry 的 Spring 专用集成模块。