20220507 5. Web Servlet - Other Web Frameworks

前言

文档地址

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

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

通用配置

首先看一下常见的 Spring 配置,它并不特定于任何一个 web 框架。(同样适用于 Spring 自己的 web 框架变体)

Spring 的轻量级应用程序模型支持的一个概念是分层体系结构。请记住,在一个“经典”的分层架构中,web 层只是许多层中的一个。它充当服务器端应用程序的入口点之一,它委托服务层中定义的服务对象 (外观) 来满足业务特定 (和表示技术无关) 用例。在 Spring 中,这些服务对象、任何其他特定于业务的对象、数据访问对象以及其他对象存在于一个不同的“业务上下文”中,这个“业务上下文”不包含 web 或表示层对象 (表示对象,例如 Spring MVC 控制器,通常配置在一个不同的 “表示上下文” 中) 。本节详细说明如何配置应用程序中包含所有 “业务 bean” 的 Spring 容器 ( WebApplicationContext )

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

考虑下面的 <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>

如果不指定 contextConfigLocation 上下文参数,ContextLoaderListener 将查找要加载的名为 /WEB-INF/applicationContext.xml 的文件。一旦上下文文件被加载,Spring 将基于 bean 定义创建一个 WebApplicationContext 对象,并将其存储在 web 应用程序的 ServletContext 中。

所有 Java web 框架都构建在 Servlet API 之上,因此您可以使用下面的代码片段访问由 ContextLoaderListener 创建的这个 “业务上下文” ApplicationContext

如何获取 WebApplicationContext :

WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(servletContext);

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

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

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

JSF

Apache Struts 2.x

Apache Tapestry 5.x

进一步资源

posted @ 2022-06-09 21:29  流星<。)#)))≦  阅读(23)  评论(0编辑  收藏  举报