是的,这个问题与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文件。
在愉快地调试代码之后,我尝试创建要部署到SIT的应用程序的WAR版本。尽管tags
下的WEB-INF
目录以及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"%>
我该如何解决这个问题?
答案 0 :(得分:0)
好的,我找到了部分解决方案(如果找到完整的答案,我会更新此答案)。
看起来如果我在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
的{{1}}条目,因为标记文件现在引用了META-INF/tags
文件夹。非常难看,但目前适合发展。
答案 1 :(得分:-1)
我有类似的经历。我的项目使用标签将导航菜单保存在一个地方,并在许多jsp页面上使用它们。我正在使用Tomcat 8.我一路上学到的一些东西是:
我的配置是Tomcat 8,Java 7,JEE 6,Servlet 3.1和JSP 2.2。我正在使用一个普通的eclipse jsp项目。 (没有maven)这是我的tld文件:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE xml>
<taglib version="2.0" xmlns="http://java.sun.com/xml/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<tlib-version>1.2.5</tlib-version>
<jsp-version>2.2</jsp-version>
<short-name>taglibs</short-name>
<description>jsp tag library for the navigation code</description>
<tag>
<name>navMenu</name>
<tag-class>ksServer.navTag</tag-class>
<body-content>tagdependent</body-content>
</tag>
</taglib>
典型的webapp jsp文件的起始行是
<%@ page language="java" contentType="text/html" pageEncoding="UTF-8" %>
<%@ page import="ksClasses.KsvrmSqlAgent" %>
<%@ page import="org.slf4j.Logger" %>
<%@ page import="org.slf4j.LoggerFactory" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="kr" tagdir="/WEB-INF/tags" %>