此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Framework 6.2.0! |
其他 Web 框架
本章详细介绍了 Spring 与第三方 Web 框架的集成。
Spring Framework 的核心价值主张之一是支持选择。一般来说,Spring 不会强迫您使用或购买任何 特定的架构、技术或方法(尽管它肯定建议 一些优于其他)。这种自由选择架构、技术或 与开发人员及其开发团队最相关的方法是 可以说在 Web 领域最为明显,Spring 提供了自己的 Web 框架 (Spring MVC 和 Spring WebFlux),同时, 支持与许多流行的第三方 Web 框架集成。
通用配置
在深入研究每个受支持的 Web 框架的集成细节之前,让我们 首先看一下不特定于任何一个 Web 的常见 Spring 配置 框架。(本节同样适用于 Spring 自己的 Web 框架变体.)
Spring 的轻量级
应用程序模型是分层体系结构的模型。请记住,在“经典”
分层架构,Web 层只是众多层之一。它充当
入口点,并委托给服务对象
(立面)来满足特定于业务的(以及
presentation-technology agnostic) 用例。在 Spring 中,这些服务对象、任何其他
特定于业务的对象、数据访问对象和其他对象存在于不同的“业务
context“,该对象不包含 Web 或表示层对象(表示对象、
,通常在不同的“表示
context“)的本节详细介绍了如何配置 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
class 是为了方便起见,所以你不需要记住ServletContext
属性。其getWebApplicationContext()
method 返回null
如果对象
在WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE
钥匙。与其冒险获得NullPointerExceptions
在您的应用程序中,它更好
要使用getRequiredWebApplicationContext()
方法。此方法引发异常
当ApplicationContext
缺失。
一旦您引用了WebApplicationContext
中,您可以通过 bean 的
name 或 type。大多数开发人员按名称检索 bean,然后将它们强制转换为他们的
实现的接口。
幸运的是,本节中的大多数框架都有更简单的方法来查找 bean。 它们不仅可以轻松地从 Spring 容器中获取 bean,而且还允许您 在他们的控制器上使用依赖注入。每个 Web 框架部分都有更多详细信息 关于其具体的整合策略。
JSF
JavaServer Faces (JSF) 是 JCP 的标准、基于组件、事件驱动的 Web 用户界面框架。它是 Jakarta EE 保护伞的官方部分,但也是 可单独使用,例如,通过在 Tomcat 中嵌入 Mojarra 或 MyFaces。
请注意,最新版本的 JSF 与 CDI 基础设施密切相关 在应用服务器中,一些新的 JSF 功能只能在这样的 环境。Spring 的 JSF 支持不再积极发展,主要是 存在是为了在对基于 JSF 的旧应用程序进行现代化改造时进行迁移。
Spring 的 JSF 集成中的关键元素是 JSFELResolver
机制。
Spring Bean 解析程序
SpringBeanFacesELResolver
符合 JSFELResolver
实现
与 JSF 和 JSP 使用的标准统一 EL 集成。它委托给
Spring 的 “商业环境”WebApplicationContext
首先,然后到
基础 JSF 实现的 default 解析程序。
在配置方面,您可以定义SpringBeanFacesELResolver
在 JSF 中faces-context.xml
文件,如下例所示:
<faces-config>
<application>
<el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver>
...
</application>
</faces-config>
用FacesContextUtils
自定义ELResolver
将 property 映射到 中的 bean 时效果很好faces-config.xml
,但有时,您可能需要显式地获取 Bean。
这FacesContextUtils
Class 让这一切变得简单。它类似于WebApplicationContextUtils
,除了
它需要一个FacesContext
参数而不是ServletContext
参数。
以下示例演示如何使用FacesContextUtils
:
ApplicationContext ctx = FacesContextUtils.getWebApplicationContext(FacesContext.getCurrentInstance());
Apache 支柱
Struts 由 Craig McClanahan 发明,是一个开源项目 由 Apache Software Foundation 托管。Struts 1.x 大大简化了 JSP/Servlet 编程范式,并赢得了许多使用专有 框架。它简化了编程模型;它是开源的;而且它有一个很大的 社区,这让项目发展壮大并在 Java Web 开发人员中流行起来。
作为原始 Struts 1.x 的继任者,请查看 Struts 2.x 或更新的版本 以及 Struts 提供的 Spring Plugin,用于内置 Spring 集成。
Apache Tapestry
Tapestry 是一个“面向组件的框架,用于创建 Java 中动态、健壮、高度可扩展的 Web 应用程序。
虽然 Spring 有自己强大的 Web 层,但还有许多独特的 使用 Tapestry 组合构建企业 Java 应用程序的优势 用于 Web 用户界面,Spring 容器用于较低层。
有关更多信息,请参阅 Tapestry 的 Spring 专用集成模块。