本章详细介绍了 Spring 与第三方 Web 框架的集成。

Spring Framework 的核心价值主张之一是支持选择。从一般意义上讲,Spring 不会强迫您使用或购买任何 特定的架构、技术或方法(尽管它当然推荐 有些胜过其他)。这种自由选择架构、技术或 与开发人员及其开发团队最相关的方法是 可以说在 Web 领域最为明显,Spring 提供了自己的 Web 框架 (Spring MVCSpring WebFlux),同时, 支持与许多流行的第三方 Web 框架集成。

通用配置

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

Spring 轻量级所拥护的概念之一(因为想要一个更好的词) 应用程序模型是分层体系结构的模型。请记住,在“经典” 分层架构,Web 层只是众多层之一。它作为其中之一 服务器端应用程序的入口点,并将其委托给服务对象 (外设),在服务层中定义,以满足特定于业务(和 演示技术不可知)用例。在 Spring 中,这些服务对象、任何其他 特定于业务的对象、数据访问对象和其他对象存在于不同的“业务”中 context“,不包含 Web 或表示层对象(表示对象、 例如Spring MVC控制器,通常配置在不同的“演示文稿中 上下文“)。本节详细介绍了如何配置包含应用程序中所有“业务 Bean”的 Spring 容器 (a)。WebApplicationContext

接下来是细节,您需要做的就是在 Web 应用程序的标准 Jakarta EE servlet 文件中声明一个 ContextLoaderListener,并添加一个部分(在同一文件中)来定义哪个 要加载的 Spring XML 配置文件集。web.xmlcontextConfigLocation<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 中 应用。contextConfigLocationContextLoaderListener/WEB-INF/applicationContext.xmlServletContext

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

下面的示例演示如何获取:WebApplicationContext

WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(servletContext);

WebApplicationContextUtils 类为方便起见,因此无需记住属性的名称。它的方法返回一个对象 在密钥下不存在。与其冒险进入您的应用程序,不如说最好 以使用该方法。此方法引发异常 当缺少时。ServletContextgetWebApplicationContext()nullWebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTENullPointerExceptionsgetRequiredWebApplicationContext()ApplicationContext

一旦你有了对 的引用,你就可以通过它们的 名称或类型。大多数开发人员按名称检索 Bean,然后将它们投射到他们的 实现的接口。WebApplicationContext

幸运的是,本节中的大多数框架都有更简单的查找 Bean 的方法。 它们不仅使从 Spring 容器中获取豆子变得容易,而且还可以让您 在其控制器上使用依赖注入。每个 Web 框架部分都有更多详细信息 关于其具体的整合战略。

JSF公司

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

请注意,JSF 的最新版本与 CDI 基础架构密切相关 在应用程序服务器中,一些新的 JSF 功能仅在这样的 环境。Spring 的 JSF 支持不再积极发展,主要是 在对基于 JSF 的旧应用程序进行现代化改造时,出于迁移目的而存在。

Spring 的 JSF 集成中的关键元素是 JSF 机制。ELResolver

Spring Bean Solver

SpringBeanFacesELResolver是符合 JSF 的实现, 与 JSF 和 JSP 使用的标准 Unified EL 集成。它委托给 首先是春天的“商业语境”,然后是 底层 JSF 实现的缺省解析程序。ELResolverWebApplicationContext

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

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

FacesContextUtils

自定义在将属性映射到 bean 时效果很好,但有时可能需要显式抓取 bean。 FacesContextUtils 类使此操作变得简单。它类似于 ,只不过 它采用参数而不是参数。ELResolverfaces-config.xmlWebApplicationContextUtilsFacesContextServletContext

以下示例演示如何使用:FacesContextUtils

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

Apache 支柱

Struts 由 Craig McClanahan 发明,是一个开源项目 由 Apache 软件基金会主办。Struts 1.x 大大简化了 JSP/Servlet 编程范式,并赢得了许多使用专有软件的开发人员的青睐 框架。它简化了编程模型;它是开源的;它有一个大 社区,这让项目得以发展并在 Java Web 开发人员中流行起来。

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

Apache 挂毯

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

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

有关更多信息,请参阅 Tapestry 的 Spring 专用集成模块

更多资源

以下链接指向有关 本章。