我需要在不同的地方共享一些网络资源(jsp
,html
,js
,images
,css
等。基于Spring
的{{1}}个应用程序。似乎Struts 2
可以用来实现这个目标吗?
OSGi
如何实现这一点给出一些指示吗? OSGi
是否足够成熟,可以用于生产应用程序?提前致谢!
修改 我浏览了this帖子,似乎人们可以跨Web应用程序共享Web捆绑包。唯一的区别是他们用Spring MVC做到了。我想知道是否可以用Struts2应用程序实现这一点?
编辑2:我基本上不清楚以下内容:
答案 0 :(得分:7)
虽然OSGI可能是一个解决方案,但它可能有点矫枉过正(而且,正如Bozho指出的那样,你需要一个支持OSGI的容器)。或许可以查看How to share resources across projects in Maven其他选项:
- 剪切并粘贴它们。
- 使用Assembly和Dependency插件
- 使用maven-remote-resources-plugin
在这篇博客中,我将展示如何做到这一点 第二种选择,因为在我看来,它 目前是最稳定的 灵活。将来,我会试试 maven-remote-resources-plugin和 写一个教程。
编辑:回答OP的评论。 是,它的想法是创建可共享Web资源的程序集,并使用maven-dependency-plugin在“资源消费者”项目中提取和解压缩程序集。所有这些都在上面提到的博客文章中进行了解释和详述。如果有任何不清楚的地方,请告诉我。
答案 1 :(得分:6)
OSGi用于Eclipse,GlassFish,ServiceMix(以及其他),它们是成熟的软件产品。但是,它们本质上非常具体,我个人认为,OSGi不太适合普通类型的项目。据我所知(有人纠正我,如果这个领域有新闻),如果你想将OSGi用于Web应用程序,你将需要一个OSGi捆绑的servlet容器。另外,在OSGi包中放置资源(html,js,images)可能会很麻烦。
答案 2 :(得分:3)
OSGi是一种相当成熟的技术 - 这就是所有Eclipse插件的结构。但是,该技术尚未在Web应用程序领域获得关注,因为支持它的servlet容器非常少。
如果您想阅读它,您应该查看Craig Wells的Modular Java,因为它提供了与Spring Framework相关的OSGi的相当好的背景。
关于共享资源,您可能希望查看EAR包。我已成功使用它来部署多个具有一组公共资源的WAR文件(例如,Dojo的压缩版本)。
例如,EAR可能如下所示:
ear-file/proj1
ear-file/proj2
ear-file/config
ear-file/lib
ear-file/resources
ear-file/META-INF
ear-file/APP-INF
您可能还想阅读上一次stackoverflow帖子中的帖子.war vs .ear file。
答案 3 :(得分:1)
我对Struts(或Spring MVC)并不过分熟悉,但你可能会看SpringSource dm Server。它基于Equinox,Eclipse使用的OSGi容器,以及捆绑的Apache Tomcat(以及Spring框架的东西)。
使用SpringSource服务器,传统上或多或少地部署每个war文件,但可以通过正常的OSGi机制访问资源(类,服务等)。这些机制基于OSGi bundle的类加载器,这对于共享jsps,html,css等文件资源可能会有问题。如果你有类似于DefaultServlet的东西,它可以从类加载器而不是文件系统中呈现东西。 (或者,哎呀,我可能会把它变得比我需要的更复杂。)
另一方面,您可以将所有内容部署为独立的Web应用程序,并在客户端将它们拼接在一起。
the modular web apps问题的第一个答案看起来很有意思,虽然不能直接应用于SpringSource服务器,因为它不提供OSGi HttpService。我相信最近的OSGi 4.2企业规范工作也正朝着SpringSource服务器的deploy-war-files-as-OSGi-bundles方法发展。
在回答您的 EDIT 2 问题时,如果我理解正确,answer中的“网络上下文”将使用HttpService动态构建,HttpService是一个提供的界面
的方法在URL下注册servlet,
在网址下注册资源(文件等)。
由于这些操作是动态处理的,因此不需要明确合并Web上下文位。