24. 与其他 Web 框架集成

24.1 Introduction

Spring Web Flow

Spring Web Flow(SWF)旨在成为 ManagementWeb 应用程序页面流的最佳解决方案。

SWF 与 Servlet 和 Portlet 环境中的现有框架(如 Spring MVC 和 JSF)集成。如果您的业务流程(一个或多个流程)将从会话模型(而不是纯粹的请求模型)中受益,那么 SWF 可能是解决方案。

SWF 允许您将逻辑页面流捕获为可在不同情况下重用的自包含模块,因此非常适合构建 Web 应用程序模块,以通过驱动业务流程的受控导航来指导用户。

有关 SWF 的更多信息,请查阅Spring Web Flow 网站

本章详细介绍了 Spring 与第三方 Web 框架(例如JSF)的集成。

Spring Framework 的核心价值主张之一是启用* choice *。在一般意义上,Spring 不会强迫任何人使用或购买任何特定的体系结构,技术或方法(尽管它肯定比其他推荐)。可以自由选择与开发人员及其开发团队最相关的架构,技术或方法,这在 Web 领域最明显,在 Web 领域,Spring 提供了自己的 Web 框架(Spring MVC),而同时提供了与许多流行的第三方 Web 框架集成。这使人们可以 continue 利用在特定的 Web 框架(例如 JSF)中可能获得的任何和所有技能,同时能够享受 Spring 在其他领域(例如数据访问,声明式事务)所带来的好处。Management,灵活的配置和应用程序组装。

在消除了棘手的销售模式后(参见上一段),本章的其余部分将集中于将您喜欢的 Web 框架与 Spring 集成的具体细节。从其他语言进入 Java 的开发人员经常 Comment 的一件事是,Java 中似乎有丰富的 Web 框架。实际上,Java 领域中有许多 Web 框架。实际上,在单个章节中没有太多细节可以涵盖。因此,本章选择了 Java 中四个比较流行的 Web 框架,从所有受支持的 Web 框架通用的 Spring 配置开始,然后详细介绍每个受支持的 Web 框架的特定集成选项。

Note

请注意,本章并不试图解释如何使用任何受支持的 Web 框架。例如,如果您想将 JSF 用于 Web 应用程序的表示层,则假定您已经熟悉 JSF 本身。如果您需要有关任何受支持的 Web 框架本身的更多详细信息,请在本章末尾咨询第 24.6 节“其他资源”

24.2 通用配置

在深入探讨每个受支持的 Web 框架的集成细节之前,让我们首先看一下配置并非特定于任何一个 Web 框架的 Spring 配置。 (本节同样适用于 Spring 自己的 Web 框架 Spring MVC.)

(Spring 的)轻量级应用程序模型所拥护的一个概念(想要一个更好的词)是分层体系结构的概念。请记住,在“经典”分层体系结构中,Web 层不过是许多层之一。它充当服务器端应用程序的入口点之一,它委派给服务层中定义的服务对象(外观),以满足特定于业务(与表示技术无关)的用例。在 Spring 中,这些服务对象,任何其他特定于业务的对象,数据访问对象等都存在于不同的“业务上下文”中,其中不包含 Web 或表示层对象(通常配置表示对象,例如 Spring MVC 控制器)在不同的“展示环境”中)。本节详细介绍如何配置一个 Spring 容器(WebApplicationContext),该容器包含一个应用程序中的所有“ Business Bean”。

具体来说:要做的就是在一个 Web 应用程序的标准 Java EE servlet web.xml文件中声明一个ContextLoaderListener,并添加contextConfigLocation<context-param/>部分(在同一文件中),该部分定义了要设置的 Spring XML 配置文件集。加载。

在\ 配置下面找到:

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

在\ 配置下面找到:

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

如果未指定contextConfigLocation上下文参数,则ContextLoaderListener将查找名为/WEB-INF/applicationContext.xml的文件进行加载。加载上下文文件后,Spring 将根据 bean 定义创建一个WebApplicationContext对象,并将其存储在 Web 应用程序的ServletContext中。

所有 Java Web 框架都是基于 Servlet API 构建的,因此可以使用以下代码段来访问由ContextLoaderListener创建的“业务上下文” ApplicationContext

WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(servletContext);

WebApplicationContextUtils类是为了方便起见,因此您不必记住ServletContext属性的名称。如果WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE键下不存在对象,则其* getWebApplicationContext()*方法将返回null。最好不要使用getRequiredWebApplicationContext()方法,而不要冒在应用程序中使用NullPointerExceptions的风险。缺少ApplicationContext时,此方法将引发异常。

一旦有了对WebApplicationContext的引用,就可以按其名称或类型检索 bean。大多数开发人员都按名称检索 bean,然后将其转换为实现的接口之一。

幸运的是,本节中的大多数框架都具有更简单的查找 bean 的方法。它们不仅使从 Spring 容器中获取 bean 变得容易,而且还使您可以在其控制器上使用依赖项注入。每个 Web 框架部分都有其特定集成策略的更多详细信息。

24.3 JavaServer Faces 1.2

JavaServer Faces(JSF)是 JCP 的基于组件的标准,事件驱动的 Web 用户界面框架。从 Java EE 5 开始,它是 Java EE 总括的正式组成部分。

对于流行的 JSF 运行时以及流行的 JSF 组件库,请查看Apache MyFaces 项目。 MyFaces 项目还提供了常见的 JSF 扩展,例如MyFaces Orchestra:基于 Spring 的 JSF 扩展,提供了丰富的对话范围支持。

Note

Spring Web Flow 2.0 通过其新构建的 Spring Faces 模块提供了丰富的 JSF 支持,既可用于以 JSF 为中心的用法(如本节所述),又可用于以 Spring 为中心的用法(在 Spring MVC 调度程序中使用 JSF 视图)。查看Spring Web Flow 网站以获得详细信息!

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

24.3.1 SpringBeanFacesELResolver(JSF 1.2)

SpringBeanFacesELResolver是符合 JSF 1.2 的ELResolver实现,与 JSF 1.2 和 JSP 2.1 使用的标准 Unified EL 集成在一起。像SpringBeanVariableResolver一样,它委派给 Spring 的“业务上下文” WebApplicationContext * first *,然后委派给基础 JSF 实现的默认解析器。

在配置方面,只需在 JSF 1.2 * faces-context.xml *文件中定义SpringBeanFacesELResolver

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

24.3.2 FacesContextUtils

当将自己的属性 Map 到* faces-config.xml *中的 bean 时,自定义VariableResolver效果很好,但有时可能需要显式地获取 bean。 FacesContextUtils类使此操作变得容易。它与WebApplicationContextUtils类似,除了它采用FacesContext参数而不是ServletContext参数。

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

24.4 Apache Struts 2.x

Struts由 Craig McClanahan 发明,是由 Apache Software Foundation 托管的开源项目。当时,它极大地简化了 JSP/Servlet 编程范例,并赢得了许多使用专有框架的开发人员的青睐。它简化了编程模型,它是开源的(因此像啤酒一样免费),并且拥有庞大的社区,这使该项目得以 Developing 并在 Java Web 开发人员中广受欢迎。

查看 Struts Spring Plugin,了解 Struts 随附的内置 Spring 集成。

24.5 Tapestry 5.x

Tapestry homepage

Tapestry 是一个“面向组件的框架,用于在 Java 中创建动态,健壮,高度可伸缩的 Web 应用程序。”

尽管 Spring 具有自己的强大的网页层,但结合使用 Tapestry 用于 Web 用户界面和使用 Spring 容器用于较低层,构建企业 Java 应用程序具有许多独特的优势。

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

24.6 其他资源

在下面找到有关本章中介绍的各种 Web 框架的更多资源的链接。