当前位置: 首页 > 面试题库 >

模块化网络应用

彭鹭洋
2023-03-14
问题内容

我最近一直在研究OSGi,认为对于模块化Java应用程序来说,这似乎是一个非常不错的主意。

但是,我想知道OSGi如何在Web应用程序中工作,而您不仅仅需要担心代码-HTML,图像,CSS之类的事情。

在工作中,我们正在构建一个具有多个“标签”的应用程序,每个标签都是应用程序的一部分。我认为这可以从采用OSGi的方法中真正受益-
但是我真的不确定什么是处理所有常规Web应用程序资源的最佳方法。

我不确定是否会有所不同,但是我们正在使用JSF和IceFaces(这又增加了另一层问题,因为您具有导航规则,并且必须在web.xml中指定所有faces配置文件…哎呀!

编辑:根据此线程,可以从JAR文件中加载faces-
config.xml文件-因此,如果您分成了JAR文件,则实际上可以包含多个faces-config.xml文件而无需修改web.xml。

任何建议将不胜感激 :-)


问题答案:

您非常认为这里有协同作用,我们有一个模块化的Web应用程序,该应用程序本身是由独立组件(OSGi捆绑软件)自动组装而成的,每个捆绑软件都贡献自己的页面,资源,css和可选的javascript。

我们不使用JSF(此处为Spring MVC),因此我无法评论OSGi上下文中该框架增加的复杂性。

那里的大多数框架或方法仍然遵循“旧的”思维方式:一个代表您的Web应用程序的WAR文件,然后是许多OSGi捆绑软件和服务,但几乎没有人关心GUI本身的模块化。

设计先决条件

使用OSGi,要解决的第一个问题是:您的部署方案是什么,谁是主要容器?我的意思是,您可以在OSGi运行时上部署应用程序,并将其基础结构用于所有内容。另外,您可以将OSGi运行时嵌入到传统的应用服务器中,然后需要重新使用某些基础结构,特别是要使用AppServer的servlet引擎。

当前,我们的设计基于OSGi作为容器,并且我们使用OSGi提供的HTTPService作为我们的servlet容器。我们正在寻求在外部servlet容器和OSGi
HTTPService之间提供某种透明的桥梁,但是这项工作仍在进行中。

Spring MVC + OSGi模块化Webapp的架构图

因此,目标不仅是通过OSGi服务Web应用程序,而且还将OSGi的组件模型应用于Web UI本身,以使其可组合,可重用,动态。

这些是系统中的组件:

  • 1个中央软件包,负责将Spring MVC与OSGi桥接,特别是它使用Bernd Kolb的代码来允许您将OSGi的Spring DispatcherServlet注册为Servlet。
  • 1个自定义URL映射器,已注入DispatcherServlet中,并提供将传入的HTTP请求映射到正确的控制器。
  • 1个基于Sitemesh的中央装饰器JSP,它定义了站点的全局布局,以及我们要提供的默认CSS和Javascript库。
  • 每个要向我们的Web UI贡献页面的包都必须发布1个或多个Controller作为OSGi服务,并确保向OSGi HTTPService 注册其自己的servlet和其自己的资源(CSS,JSP,图像等) 。注册使用HTTPService完成,主要方法为:

httpService.registerResources()和httpService.registerServlet()

当一个Web ui贡献捆绑包激活并发布其控制器时,它们将由我们的中央Web
ui捆绑包自动拾取,并且上述自定义URL映射器将收集这些Controller服务并保持URL到Controller实例的最新映射。

然后,当针对某个URL的HTTP请求进入时,它将找到关联的控制器并将请求分派到该控制器。

Controller开展业务,然后返回所有应呈现的数据
视图名称(在本例中为JSP)。该JSP位于Controller的捆绑包中,并且可以由中央Web
ui捆绑包访问和呈现此JSP,这恰恰是因为我们通过HTTPService注册了资源位置。然后,我们的中央视图解析器将此JSP与我们的中央Sitemesh装饰器合并,并将生成的HTML吐出到客户端

众所周知,这是一个很高的层次,但是如果不提供完整的实现,则很难完全解释。

我们对此的主要学习点是看Bernd
Kolb在他的示例JPetstore转换为OSGi方面所做的工作,并使用该信息来设计我们自己的体系结构。

恕我直言,目前有太多的炒作,并且专注于以某种方式将OSGi嵌入到基于Java
EE的传统应用程序中,几乎没有考虑过实际使用OSGi习惯用法及其出色的组件模型来真正允许设计组件化Web应用程序。



 类似资料:
  • 问题内容: 有没有办法让python从网络读取模块? 我们有很多机器,每次更换模块时都要手动更新每台机器,这太费力了,因此我希望python从网络上的某个位置获取模块。 有任何想法吗? 问题答案: 将网络位置挂载到文件系统中,然后将该路径添加到PYTHONPATH。这样,本地计算机上的Python将能够查看远程位置中存在的模块。您 不能 直接从模块直接远程导入,例如在html中指定js文件。

  • go在编写web应用方面非常得力。因为目前它还没有GUI(Graphic User Interface 即图形化用户界面)的框架,通过文本或者模板展现的html界面是目前go编写应用程序的唯一方式。(**译者注:实际上在翻译的时候,已经有了一些不太成熟的GUI库例如:go ui。)

  • 我正在尝试使用 来为我的 react 应用程序的一小部分提供服务。我有两个部分(和),但我只对部分有顾虑。 我尝试了以下方法: > 在根目录下创建文件 我添加了来忽略babel,因为我无法使它导入文件,它不断抛出: 。 但是,每次我运行webpack时,它都会抛出诸如以下的错误: 位于这个根文件夹中。

  • HTTP 分布式系统

  • HTTP 超文本传输协议 (HTTP) 是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP 是万维网的数据通信的基础。 Requests Python 基本的 urllib2 模块提供了大部分你所需要的 HTTP 功能,但它的 API 彻底被打乱了。它是在一个和现今完全不同的时期 --- 以及一个不一样的网络被构建的。一个简单的任务便需要耗费他大量的工作 (即使重写函数没用)。 Req

  • 主要内容:矢量,标量,矩阵数学在任何机器学习算法中都是至关重要的,并且包括各种核心数学概念,以便以特定方式设计正确的算法。 下面提到了数学对机器学习和数据科学的重要性 - 现在,让我们来看看机器学习中的主要数学概念,从自然语言处理的角度来看这数学概念很重要 - 矢量 向量(Vector)是连续或离散的数字数组,由向量组成的空间称为向量空间。向量的空间维度可以是有限的也可以是无限的,但机器学习和数据科学问题涉及固定长度向量。