24. 与其他Web框架集成

24.1 简介


Spring Web Flow

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

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

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

有关SWF的更多信息,请参阅 Spring Web Flow website


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

Spring框架的核心 Value 主张之一是实现选择。从一般意义上讲,Spring并没有强迫人们使用或购买任何特定的架构,技术或方法(尽管它肯定会推荐一些其他的)。这种选择与开发人员及其开发团队最相关的架构,技术或方法的自由在Web领域最为明显,Spring提供了自己的Web框架( Spring MVC ),同时提供与许多流行的第三方Web框架集成。这使得人们可以继续利用在特定Web框架(如JSF)中获得的任何和所有技能,同时能够享受Spring在其他领域(如数据访问,声明式事务)所提供的好处。管理,灵活的配置和应用程序组装。

放弃了羊毛销售模式(参见前一段),本章的其余部分将集中讨论将您喜爱的Web框架与Spring集成的丰富细节。从其他语言进入Java的开发人员经常评论的一件事是,Java中可用的Web框架看起来非常丰富。 Java空间确实有很多Web框架;事实上,有太多的东西要掩盖一章中的任何细节。因此,本章从Java中选择了四个比较流行的Web框架,从所有受支持的Web框架通用的Spring配置开始,然后详细说明每个支持的Web框架的特定集成选项。

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

24.2 常用配置

在深入研究每个支持的Web框架的集成细节之前,让我们先来看看不是特定于任何一个Web框架的Spring配置。 (本节同样适用于Spring自己的Web框架Spring MVC。)

(Spring的)轻量级应用程序模型支持的概念之一(想要更好的词)是分层架构的概念。请记住,在“经典”分层架构中,Web层只是众多层中的一个;它作为服务器端应用程序的入口点之一,它委托服务层中定义的服务对象(外观),以满足业务特定(和表示技术不可知)的用例。在Spring中,这些服务对象,任何其他特定于业务的对象,数据访问对象等存在于不同的“业务上下文”中,该业务上下文不包含Web或表示层对象(诸如Spring MVC控制器之类的表示对象通常在独特的“表述背景”)。本节详细介绍了如何在一个应用程序中配置包含所有“业务bean”的Spring容器( WebApplicationContext )。

具体问题:所有需要做的就是在一个Web应用程序的标准Java EE servlet web.xml 文件中声明 ContextLoaderListener ,并添加一个 contextConfigLocation 部分(在同一个文件中),定义哪一组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 context参数, 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 。不要冒险在应用程序中获取 NullPointerExceptions ,最好使用 getRequiredWebApplicationContext() 方法。当 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 project 。 MyFaces项目还提供了常见的JSF扩展,例如 MyFaces Orchestra :基于Spring的JSF扩展,提供了丰富的会话范围支持。

Spring Web Flow 2.0通过其新 Build 的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 ,然后委托给底层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

自定义 VariableResolver 有效当在faces-config.xml中将一个属性映射到bean时,有时可能需要明确地获取一个bean。 FacesContextUtils 类使这很容易。它与 WebApplicationContextUtils 类似,只是它采用 FacesContext 参数而不是 ServletContext 参数。

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

24.4 Apache Struts 2.x

由Craig McClanahan发明的 Struts 是由Apache Software Foundation主办的一个开源项目。当时,它大大简化了JSP / Servlet编程范例,并赢得了许多使用专有框架的开发人员。它简化了编程模型,它是开源的(因此在啤酒中是免费的),并且它有一个庞大的社区,它允许项目在Java Web开发人员中成长并变得流行。

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

24.5 Tapestry 5.x

来自 Tapestry homepage

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

虽然Spring有自己的 powerful web layer ,但是使用Tapestry用于Web用户界面和Spring容器用于较低层来构建企业Java应用程序有许多独特的优势。

有关更多信息,请查看Tapestry的专用 integration module for Spring

24.6 更多资源

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

Updated at: 5 months ago
23.14. XML映射视图Table of content25. Portlet MVC框架
Comment
You are not logged in.

There are no comments.