2

我正在使用Struts-1. 我开发了一个基于 struts 的 Web 应用程序。我struts-taglib.jar通过在 JSP 文件中插入以下行来在提供的 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.jarin/WEB-INF/lib目录。那么问题出在哪里?

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

4

5 回答 5

4

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

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

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

我刚刚下载了 struts-1.3.10-all.zip 并查看了其中包含的 struts-logic.tld。<uri>标签的值为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 中成为一种常见的做法。

于 2010-03-23T01:42:51.150 回答
0

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

于 2010-12-11T15:29:54.450 回答
0

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

于 2010-03-14T04:59:02.807 回答
0

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

于 2010-03-18T10:01:01.853 回答
0

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

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

于 2010-12-08T07:59:22.170 回答