【问题标题】:Struts 1 - struts-taglib.jar is not being found by my web applicationStruts 1 - 我的 Web 应用程序没有找到 struts-taglib.jar
【发布时间】:2011-01-27 07:53:23
【问题描述】:

我正在使用Struts-1。我开发了一个基于 struts 的 Web 应用程序。通过在 JSP 文件中插入以下行,我在 struts-taglib.jar 中提供的 JSP 页面中使用 struts 标记:

<%@ taglib prefix="html" uri="http://struts.apache.org/tags-html" %>
<%@ taglib prefix="logic" uri="http://struts.apache.org/tags-logic" %>
<%@ taglib prefix="bean" uri="http://struts.apache.org/tags-bean" %>

现在,当我在本地系统上运行该应用程序时,它运行良好,但是当我将它部署到服务器上时,它显示以下异常:

org.apache.jasper.JasperException: The absolute uri: http://struts.apache.org/tags-html cannot be resolved in either web.xml or the jar files deployed with this application

从上述异常看来,应用程序似乎没有找到struts-taglib.jar文件。

但我已将struts-taglib.jar 放在/WEB-INF/lib 目录中。那么问题出在哪里?

注意:您也可以查看Java - Problem in deploying Web Application了解更多信息

【问题讨论】:

  • 您到底下载了哪个struts-taglib.jar?您可以在此处发布其下载链接/说明吗?
  • @BalusC 我下载了Struts 1.3.10,taglib jar 文件名为struts-taglib-1.3.10.jar
  • 对不起,我忽略了它在@local 上有效,但在@prod 上失败的关键点。然后我不知道可能会在类路径中发生冲突,或者实际上是错误/错误的部署。
  • 我在war 文件的清单文件中没有任何类路径条目,因此没有明确定义类路径,所以我认为类路径中没有冲突......至于就部署而言,我在服务器上粘贴了相同的 war 文件,我粘贴在本地服务器上。那么问题出在哪里?
  • 你能把你的 taglib 条目的内容发布到 web.xml 中吗?

标签: java jsp struts struts-1


【解决方案1】:

确保您的 struts-taglib-1.3.10.jar 直接在 /WEB-INF/lib 下,而不是在 /WEB-INF/lib/struts 等任何子文件夹中

【讨论】:

    【解决方案2】:

    仔细检查您的 URI 和来自 struts-taglib.jar 的 TLD 文件中的 URI。

    请注意 URI 最近已更改:http://wiki.apache.org/struts/StrutsUpgradeNotes12to13

    【讨论】:

    • 请注意 URI 自 1.2 版以来已更改!
    【解决方案3】:

    您说 JAR 确实出现在 Web 应用程序的 WEB-INF/lib 中;我会相信你的话并相信你。

    我建议您打开 struts-taglib.jar,打开标签库的 .tld,并验证您在 根目录下找到的 值是否与您的给定前缀的 uri 匹配JSP。我猜测 URI 不匹配,这意味着即使 JAR 在 CLASSPATH 中,类加载器也无法找到标记库。

    它还可能指示版本更改是否使 JAR 和 JSP 中的 URI 不同步。

    我刚刚下载了 struts-1.3.10-all.zip 并查看了其中包含的 struts-logic.tld。 &lt;uri&gt; 标签的值是http://struts.apache.org/tags-logic,所以看起来你没问题。

    .tld 文件看起来像是从 JAR 外部化的。在 .\src\el\src\main\resources\META-INF\tld 下查找它们,将它们放在 /WEB-INF 中,并在 web.xml 中明确引用它们。那应该可以解决您的问题。

    我不再认为 web.xml 中的 .tld 是必要的,但如果 URI 的想法没有成功,您可以尝试将类似于此示例的内容从“JSTL In Action”添加到您的 web.xml(已修改相应地):

    <taglib>
        <taglib-uri>http://java.sun.com/jstl/core</taglib-uri>
        <taglib-location>/WEB-INF/c.tld</taglib-location>
    </taglib>
    

    这可能是因为此时 Struts 1.0 相当旧。在 Struts 1.0 开发后,将 .tld 打包到 taglib 的 JAR 中成为一种常见的做法。

    【讨论】:

    • 尽管存在 jar,但我收到了这个错误。然后根据您的答案进行修复,它已经修复了错误。
    【解决方案4】:

    部署后它实际上是在 /WEB-INF/lib 中的 jar 文件吗?如果没有,手动放置会解决问题吗?

    【讨论】:

      【解决方案5】:

      /WEB-INF/lib 在你的类路径中吗?

      【讨论】:

      • 我认为它是任何 Web 应用程序的默认类路径。是否应该有任何文件定义任何 Web 应用程序的类路径。我的应用程序没有任何此类文件。我在 Eclipse 中开发它,在 Eclipse 中是的 `/WEB-INF/lib 在我的类路径中。
      • 没错。您无需更改任何内容即可在 Web 应用程序 CLASSPATH 中获取 WEB-INF/lib 和 WEB-INF/classes。这是默认设置。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-24
      • 2020-12-07
      • 1970-01-01
      • 2012-03-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多