java - 未找到 JSP 2 标记文件 “/WEB-INF/tags”

标签 java eclipse jsp tomcat

是的,这个问题与this one非常相似但最大的不同是我使用的是 TLD 文件而不是 taglib-to-folder 声明。

好的,我的设置如下:我正在将一个纯 Java 标签库迁移到几乎 JSP(一些标签仍将保留其 Java 形式)。我在 classpath:META-INF 文件夹下定义了一个 TLD。一些标签被定义为类,而其他标签现在被定义为 /WEB-INF/tags 下的 JSP 2 标签文件。给出的例子:

<tag-file>
    <name>navbar</name>
    <path>/WEB-INF/tags/navbar.tag</path>
    <display-name>Navbar</display-name>
</tag-file>

这一切在 Eclipse 下都很好用,尽管我必须手动设置 Web Deployment Assemblysrc/META-INFWEB-INF,否则 Tomcat 无法识别 TLD 文件。

在愉快地调试代码后,我尝试创建我的应用程序的 WAR 版本以部署到 SIT。尽管 WEB-INF 下存在 tags 目录以及 JSP 2 标记文件,但我仍然无法运行该应用程序。

错误 iiiiiiiiiiiiis:

org.apache.jasper.JasperException: /login.jsp (line: 3, column: 0) File [/WEB-INF/tags/navbar.tag] not found
    org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:41)
    org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:275)
    org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:91)
    org.apache.jasper.compiler.Parser.processIncludeDirective(Parser.java:335)
    org.apache.jasper.compiler.Parser.parseIncludeDirective(Parser.java:368)
    org.apache.jasper.compiler.Parser.parseDirective(Parser.java:471)
    org.apache.jasper.compiler.Parser.parseElements(Parser.java:1435)
    org.apache.jasper.compiler.Parser.parse(Parser.java:139)
    org.apache.jasper.compiler.ParserController.doParse(ParserController.java:227)
    org.apache.jasper.compiler.ParserController.parse(ParserController.java:100)
    org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:199)
    org.apache.jasper.compiler.Compiler.__compile(Compiler.java:356)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:336)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:323)
    org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:585)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:363)
    org.apache.jasper.servlet.JspServlet._serviceJspFile(JspServlet.java:396)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)

TLD 照常声明

<%@ taglib prefix="example" uri="http://www.example.org/example.tld"%>

我该如何解决这个问题?

最佳答案

好的,我找到了部分解决方案(如果找到完整的解决方案,我会更新此答案)。

看起来如果我在 classpath 下部署 TLD 文件,那么我应该相应地部署标签。

我不得不更换 <path>/WEB-INF/tags/navbar.tag</path><path>/META-INF/tags/navbar.tag</path>并将所有标签移动到classpath:META-INF/tags下.

这样,WAR 包就可以工作了。

不幸的是,我破坏了我的 Eclipse 设置,所以解决方法是手动设置一个 Deployment assembly来自 src/META-INF/tags 的条目至 META-INF/tags因为标记文件现在引用 META-INF文件夹。非常丑陋,但适合目前的开发。

关于java - 未找到 JSP 2 标记文件 “/WEB-INF/tags”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39082178/

相关文章:

java - 使用链表实现队列

java - 在 spring-data 中为 MongoDB 配置 GridFS 模板

java - 如何在不同的 Activity 中维护变量而不使用共享的首选项

android - 安装错误 : INSTALL_FAILED_UID_CHANGED Non-rooted Android Phone

android - 为什么我的 Eclipse 工作区是空的?

java - JSP 表达式语言中不明确( boolean/整数)访问器的优先级是什么?

java - jsp中为什么下划线是红色以及如何正确迭代列表

java - Android:如何暂停和恢复倒数计时器?

java - 如何添加glassfish工具来 eclipse 氧3a

java - session 已销毁;在 JSP 和 Servlet 中打印消息