Java 模块化web应用程序
我最近一直在研究模块化Java应用程序,并认为这是一个非常好的想法 然而,我想知道OSGi如何在web应用程序中工作,在web应用程序中,您不仅需要担心代码,还需要担心HTML、图像、CSS之类的东西 在工作中,我们正在构建一个具有多个“选项卡”的应用程序,每个选项卡都是应用程序的一部分。我认为,采用OSGi方法确实可以带来好处,但我真的不确定处理所有常见web应用资源的最佳方式是什么 我不确定这是否有什么不同,但我们使用的是JSF和(这又增加了一层问题,因为您有导航规则,必须在web.xml…doh!中指定所有面配置文件) 编辑:根据,faces-config.xml文件可以从JAR文件加载,因此实际上可以包含多个faces-config.xml文件,而无需修改web.xml,只要将其拆分为JAR文件Java 模块化web应用程序,java,web-applications,jsf,modularity,Java,Web Applications,Jsf,Modularity,我最近一直在研究模块化Java应用程序,并认为这是一个非常好的想法 然而,我想知道OSGi如何在web应用程序中工作,在web应用程序中,您不仅需要担心代码,还需要担心HTML、图像、CSS之类的东西 在工作中,我们正在构建一个具有多个“选项卡”的应用程序,每个选项卡都是应用程序的一部分。我认为,采用OSGi方法确实可以带来好处,但我真的不确定处理所有常见web应用资源的最佳方式是什么 我不确定这是否有什么不同,但我们使用的是JSF和(这又增加了一层问题,因为您有导航规则,必须在web.xml…
如果您有任何建议,我们将不胜感激:-)您认为这里有协同作用是非常正确的,我们有一个模块化的web应用程序,其中应用程序本身由独立组件(OSGi捆绑包)自动组装而成,每个捆绑包提供自己的页面、资源、css和可选的javascript 我们不使用JSF(这里是SpringMVC),所以我不能评论OSGi上下文中该框架增加的复杂性 大多数框架或方法仍然坚持“旧”的思维方式:一个WAR文件代表您的webapp,然后是许多OSGi捆绑包和服务,但几乎没有一个涉及GUI本身的模块化 设计的先决条件 对于OSGi,首先要解决的问题是:您的部署场景是什么,谁是主要容器?我的意思是,您可以在OSGi运行时上部署应用程序,并将其基础设施用于所有事情。或者,您可以在传统的应用程序服务器中嵌入OSGi运行时,然后需要重用一些基础设施,特别是您希望使用应用程序服务器的servlet引擎 我们的设计目前基于OSGi作为容器,我们使用OSGi提供的HTTPService作为servlet容器。我们正在考虑在外部servlet容器和OSGiHttpService之间提供某种透明的桥梁,但这项工作正在进行中 SpringMVC+OSGi模块化webapp的架构草图 因此,我们的目标不仅仅是通过OSGi为web应用程序提供服务,而是将OSGi的组件模型应用到web UI本身,使其具有可组合性、可重用性和动态性 这些是系统中的组件:
- 1个中央捆绑包,负责将Spring MVC与OSGi连接起来,特别是它用于允许您将Spring DispatcherServlet注册为一个servlet
- 1个自定义URL映射器,注入DispatcherServlet并提供传入HTTP请求到正确控制器的映射
- 1个基于Sitemesh的中心装饰JSP,用于定义站点的全局布局,以及我们希望作为默认值提供的中心CSS和Javascript库
- 每个希望为我们的web UI贡献页面的捆绑包必须将1个或多个控制器发布为OSGi服务,并确保向OSGi HTTPService注册自己的servlet和资源(CSS、JSP、图像等)。注册是通过HTTPService完成的,主要方法是: httpService.registerResources() 和 httpService.registerServlet()