OSGi中的JSP:如何从bundle中加载TLD?
我们正在构建一个JSP Web应用程序,该应用程序在Apache Felix OSGi容器中运行(Web应用程序本身是一个OSGi包)。 现在,我们正面临以下问题:
根据JSP 2.0规范,TLD(taglib描述符)不再需要驻留在Web应用程序的WEB-INF文件夹内,而是直接从taglib的jar META-INF文件夹中加载。 这个taglib jar通常驻留在Web应用程序WEB-INF / lib文件夹中,但由于它们是OSGi包,它们由Felix加载。
在taglib的OSGi信息中,我们确实导入了所有需要的软件包。 任何人都知道如何告诉servlet,在加载的OSGi Bundle内搜索TLD?
谢谢你的帮助!
如果Pax与您的Web应用程序不同,它将无法找到您的顶级域名:
标签库
为了让您的自定义标签库工作,您的TLD文件必须在“特殊”位置的包中可以访问:
请注意,您的导入的软件包不会被搜索(可能会在稍后添加此支持)
我在一个基于Struts的系统中遇到了这个问题,在这个系统中,我在多个webapp捆绑包之间共享一个OSGi-fied Struts捆绑包。 Web应用程序具有需要Struts taglib的JSP。
一个有点冒失(因为它将TLD复制到所有地方)解决方法是将TLD放入您的webapp的META-INF
目录中,并使webapp bundle导入为必需的Struts包(或者,如果您不使用Struts,则无论哪个类处理标签)。 这可以通过Maven自动完成,如下所示:
<plugin>
<!--
Extract the TLD file from the Struts bundle you are using
and place it in src/main/resources/META-INF of your webapp's
project directory during generate-resources. This will make
the file end up in the appropriate place in the resulting WAR
-->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>extract-tld</id>
<phase>generate-resources</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>${struts.version}</version>
<outputDirectory>src/main/resources</outputDirectory>
<includes>META-INF/struts-tags.tld</includes>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<!--
Add the required Manifest headers using the maven-bundle-plugin
-->
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<configuration>
<!-- ... -->
<instructions>
<!-- ... -->
<Import-Package>[...],org.apache.struts2.views.jsp</Import-Package>
<!-- ... -->
</instructions>
</configuration>
</plugin>
一般来说,很难整合OSGi和Java EE库。 来自Nuxeo CMS的人员设法整合了Seam Framework和OSGi,所以我认为使用他们的想法,您可以更轻松地整合JSP TLD和OSGi。 只需下载Nuxeo并分析其源代码:http://www.nuxeo.org/xwiki/bin/view/Main/
但是,整合OSGi和Java EE通常很困难。 你真的需要OSGi运行时集成吗? 也许Maven编译时的集成对你来说就足够了? 许多人只看到Maven和类似的编译时OSGi工具。
链接地址: http://www.djcxy.com/p/2079.html