封装在EAR文件中的JAR文件中的JSP taglib

时间:2011-05-19 09:39:47

标签: java jsp taglib ear jboss-4.2.x

我有以下情况:

  • taglib.jar:打包为JAR文件的自定义JSP taglib。 TLD文件为/META-INF/taglib.tld
  • webapp.war:包含使用taglib.jar提供的标记的JSP文件的Web应用程序。
  • app.ear:包含webapp.war和其他WAR文件的J2EE应用程序。

我想在taglib.jar中打包一个app.ear,因此webapp.war中的JSP文件和其他WAR文件都可以使用其标记。我在JSP文件中尝试了以下指令,但没有成功:

  • <%@ taglib uri="/taglib.jar" prefix="xxx" %>
  • <%@ taglib uri="taglib.jar" prefix="xxx" %>

是否可以将JSP taglib JAR文件打包到EAR文件中?如果是,我应该在uri指令的taglib属性中指定哪个值?

注意:我当然可以在每个WAR文件的taglib.jar中打包/WEB-INF/lib,但这正是我试图避免的。

上下文:我在JBoss 4.2.3上部署EAR文件。

编辑:我担心这是不可能的,特别是因为我从the section about skinny WARs阅读了Maven WAR plugin documentation

  

有时,必须将JAR列表打包到WAR(...)中才能使其正常工作,就像使用标记库一样。

3 个答案:

答案 0 :(得分:1)

jar标签库只能出现在WEB-INF / lib下。容器可能提供一些自定义方式来配置常用的tld。要在JBOSS中实现相同的目标,这就是

JspServlet支持新的engineOptionsClass,允许替换选项实现。默认设置现在使用特定于jboss的JspServletOptions:

engineOptionsClass org.jboss.web.tomcat.tc5.jasper.JspServletOptions

反过来使用自定义标记lib描述符缓存org.jboss.web.tomcat.tc5.jasper.TagLibCache从tomcat sar conf / tlds中的jar加载标记库。

答案 1 :(得分:0)

这是不可能的。我能做的最好的事情是将taglib.jar打包到EAR文件中,并在每个WAR文件的/WEB-INF目录中复制TLD文件。

答案 2 :(得分:0)

这是一个老话题,但我想分享我的解决方案: 在eclipse上用鼠标右键单击项目,导出为带有“导出生成的类文件和资源”选项的jar并为其命名(ex.customtags.jar)。 用7Zip打开打包的.jar,我们应该看到类似于以下的结构:

  • 玉米
  • META-INF
  • web应用
  • 的.classpath

将所有taglib复制到.jar文件(不是任何其他位置)的根的META-INF文件夹

更改此jar后,将其添加到要使用taglib的项目的webapp \ WEB-INF \ lib文件夹中。 在jsp文件中输入以下内容:

这应该可以正常工作!

此致 MS