对于最新的稳定版本,请使用 Spring Framework 6.2.0spring-doc.cn

其他 Web 框架

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

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

通用配置

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

Spring 的轻量级 应用程序模型是分层体系结构的模型。请记住,在“经典” 分层架构,Web 层只是众多层之一。它充当 入口点,并委托给服务对象 (立面)来满足特定于业务的(以及 presentation-technology agnostic) 用例。在 Spring 中,这些服务对象、任何其他 特定于业务的对象、数据访问对象和其他对象存在于不同的“业务 context“,该对象不包含 Web 或表示层对象(表示对象、 ,通常在不同的“表示 context“)的本节详细介绍了如何配置包含应用程序中的所有“业务 bean”的 Spring 容器 (a)。WebApplicationContextspring-doc.cn

继续具体操作,您需要做的就是在 Web 应用程序的标准 Jakarta EE servlet 文件中声明一个 ContextLoaderListener,并添加一个部分(在同一文件中)来定义哪个 要加载的 Spring XML 配置文件集。web.xmlcontextConfigLocation<context-param/>spring-doc.cn

请考虑以下配置:<listener/>spring-doc.cn

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

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

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

如果未指定 context 参数,则会查找调用 负荷。一旦上下文文件被加载,Spring 就会根据 bean 定义创建一个 WebApplicationContext 对象,并将其存储在 Web 中 应用。contextConfigLocationContextLoaderListener/WEB-INF/applicationContext.xmlServletContextspring-doc.cn

所有 Java Web 框架都是在 Servlet API 之上构建的,因此您可以使用 以下代码片段来访问由 .ApplicationContextContextLoaderListenerspring-doc.cn

以下示例演示如何获取 :WebApplicationContextspring-doc.cn

WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(servletContext);

WebApplicationContextUtils 类是为了方便起见,因此您无需记住属性的名称。其方法返回 在 key 下不存在。与其冒险进入您的应用程序,不如 以使用该方法。此方法会引发异常 当 缺失。ServletContextgetWebApplicationContext()nullWebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTENullPointerExceptionsgetRequiredWebApplicationContext()ApplicationContextspring-doc.cn

一旦你有了对 的引用,就可以按它们的 bean 来检索 bean name 或 type。大多数开发人员按名称检索 bean,然后将它们强制转换为他们的 实现的接口。WebApplicationContextspring-doc.cn

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

JSF

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

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

Spring 的 JSF 集成中的关键元素是 JSF 机制。ELResolverspring-doc.cn

Spring Bean 解析程序

SpringBeanFacesELResolver是符合 JSF 的实现, 与 JSF 和 JSP 使用的标准统一 EL 集成。它委托给 Spring 的 “business context” (业务上下文),然后转到 基础 JSF 实现的 default 解析程序。ELResolverWebApplicationContextspring-doc.cn

在配置方面,您可以在 JSF 文件中定义,如下例所示:SpringBeanFacesELResolverfaces-context.xmlspring-doc.cn

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

FacesContextUtils

在将属性映射到 中的 bean 时,自定义效果很好,但有时可能需要显式获取 bean。 FacesContextUtils 类使此操作变得简单。它与 类似,只是 它需要一个参数而不是一个参数。ELResolverfaces-config.xmlWebApplicationContextUtilsFacesContextServletContextspring-doc.cn

以下示例演示如何使用:FacesContextUtilsspring-doc.cn

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

Apache 支柱

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

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

Apache Tapestry

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

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

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

更多资源

以下链接指向有关 本章。spring-doc.cn