是的,这个问题与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 Assembly
从 src/META-INF
到 WEB-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/