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

其他 Web 框架

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

Spring Framework 的核心价值主张之一是支持选择。一般来说,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 层只是众多层之一。它充当 入口点,并委托给服务对象 (立面)来满足特定于业务的(以及 presentation-technology agnostic) 用例。在 Spring 中,这些服务对象、任何其他 特定于业务的对象、数据访问对象和其他对象存在于不同的“业务 context“,该对象不包含 Web 或表示层对象(表示对象、 ,通常在不同的“表示 context“)的本节详细介绍了如何配置 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);

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

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

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

JSF

JavaServer Faces (JSF) 是 JCP 的标准、基于组件、事件驱动的 Web 用户界面框架。它是 Jakarta 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符合 JSFELResolver实现 与 JSF 和 JSP 使用的标准统一 EL 集成。它委托给 Spring 的 “商业环境”WebApplicationContext首先,然后到 基础 JSF 实现的 default 解析程序。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将 property 映射到 中的 bean 时效果很好faces-config.xml,但有时,您可能需要显式地获取 Bean。 这FacesContextUtilsClass 让这一切变得简单。它类似于WebApplicationContextUtils,除了 它需要一个FacesContext参数而不是ServletContext参数。spring-doc.cadn.net.cn

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

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

Apache 支柱

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

作为原始 Struts 1.x 的继任者,请查看 Struts 2.x 或更新的版本 以及 Struts 提供的 Spring Plugin,用于内置 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

更多资源


APP信息