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