gpt4 book ai didi

java - OSGi 中的 JSP : How to load TLD from bundles?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:33:18 26 4
gpt4 key购买 nike

我们正在构建一个 JSP 网络应用程序,它在 Apache Felix OSGi 容器中运行(网络应用程序本身是一个 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 包中搜索 TLD?

感谢您的帮助!

最佳答案

Pax won't find your TLDs ,如果它们与您的网络应用程序不同:

Tag Libs

In order to get your custom tag libs working your TLD files will have to be reachable in your bundle in "special" places:

  • all tld files in any jar referenced by your Bundle-ClassPath manifest entry
  • all tld files in WEB-INF directory or sub-directory of WEB-INF in your bundle jar

Please note that your imported packages will not be searched (it may be that this support will be added later on)

我在基于 Struts 的系统中遇到了这个问题,在该系统中,我在多个 Web 应用程序包之间共享一个 OSGi 化的 Struts 包。 Web 应用程序具有需要 Struts 标签库的 JSP。

一个稍微有点老套(因为它到处复制 TLD)的解决方法是将 TLD 放在你的 webapp 的 META-INF 目录中,并使 webapp 捆绑导入所需的 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>

关于java - OSGi 中的 JSP : How to load TLD from bundles?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3265096/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com