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

时间:2016-08-22 14:30:10

标签: 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-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"%>

我该如何解决这个问题?

2 个答案:

答案 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 assemblysrc/META-INF/tags的{​​{1}}条目,因为标记文件现在引用了META-INF/tags文件夹。非常难看,但目前适合发展。

答案 1 :(得分:-1)

我有类似的经历。我的项目使用标签将导航菜单保存在一个地方,并在许多jsp页面上使用它们。我正在使用Tomcat 8.我一路上学到的一些东西是:

  • tags目录包含您正在创建的* .tld和* .tag文件。

我的配置是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" %>