Java 在JSP中添加自定义标记库时出现NullPointerException

Java 在JSP中添加自定义标记库时出现NullPointerException,java,jsp,tomcat,jsp-tags,Java,Jsp,Tomcat,Jsp Tags,我需要为JSP页面实现一些自定义函数,为此我需要创建自定义taglib。这应该是一个简单的操作,但我在第一步添加空的taglib时遇到了一个问题。我有一个例外: java.lang.NullPointerException at org.apache.tomcat.util.descriptor.tld.TldResourcePath.hashCode(TldResourcePath.java:156) at java.util.HashMap.hash(HashMap.java

我需要为JSP页面实现一些自定义函数,为此我需要创建自定义taglib。这应该是一个简单的操作,但我在第一步添加空的taglib时遇到了一个问题。我有一个例外:

java.lang.NullPointerException
    at org.apache.tomcat.util.descriptor.tld.TldResourcePath.hashCode(TldResourcePath.java:156)
    at java.util.HashMap.hash(HashMap.java:338)
    at java.util.HashMap.get(HashMap.java:556)
    at org.apache.jasper.compiler.TldCache.getTaglibXml(TldCache.java:95)
    at org.apache.jasper.compiler.TagLibraryInfoImpl.<init>(TagLibraryInfoImpl.java:179)
    at org.apache.jasper.compiler.Parser.parseTaglibDirective(Parser.java:411)
    at org.apache.jasper.compiler.Parser.parseDirective(Parser.java:469)
    at org.apache.jasper.compiler.Parser.parseElements(Parser.java:1428)
    at org.apache.jasper.compiler.Parser.parse(Parser.java:139)
    at org.apache.jasper.compiler.ParserController.doParse(ParserController.java:227)
    at org.apache.jasper.compiler.ParserController.parse(ParserController.java:100)
    at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:199)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:356)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:336)
    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:323)
    ...
java.lang.NullPointerException
位于org.apache.tomcat.util.descriptor.tld.TldResourcePath.hashCode(TldResourcePath.java:156)
位于java.util.HashMap.hash(HashMap.java:338)
获取(HashMap.java:556)
位于org.apache.jasper.compiler.TldCache.getTaglibXml(TldCache.java:95)
位于org.apache.jasper.compiler.TagLibraryInfoImpl.(TagLibraryInfoImpl.java:179)
位于org.apache.jasper.compiler.Parser.parseTaglibDirective(Parser.java:411)
位于org.apache.jasper.compiler.Parser.parseDirective(Parser.java:469)
位于org.apache.jasper.compiler.Parser.parseElements(Parser.java:1428)
位于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:336)
位于org.apache.jasper.compiler.compiler.compile(compiler.java:323)
...
我的自定义tld(放置在webapp/custom.tld中):


1
我的图书馆
myTagLib
JSP:


另外,我尝试在custom.tld中添加一些函数,但没有任何更改


有人能帮我吗?我做错了什么?

您需要将
custom.tld
文件移动到
/WEB-INF
目录中的某个位置,以便容器查找并将其映射到
/
中提供的值

如果由于某种原因不能,您应该向web.xml文件添加一个
映射


myTagLib
/webportal/custom.tld

是相对于web应用程序根目录指定的。如果需要,请进行修改。

我花了4个小时来修复此问题。我已经从Tomcat 6切换到Tomcat 8,并开始获得相同的NPE。我最终发现问题出在导入我的taglib上

<%@ taglib uri="/includes/tt.tld" prefix="tt" %>

TldResourcePath.156中的NullPointerException指向RldResourcePath对象中缺少的URL对象。您的URI定义可能有问题。我在问题中发现一个小错误,我的tld放在webapp/custom.tld(而不是webportal)中。但无论如何,当我在WEB-INF中替换它并更改uri时,它开始工作了!我肯定我以前试过,但我想我没有做一些重要的事情(可能是我没有改变uri…)。所以,谢谢你的帮助!感谢您在Tomcat8中的工作,因为Tomcat8希望自定义tldsChanging的条目名在jar或web.xml中,根据您所说的相对路径,为我解决这个问题。
<%@ taglib prefix="myTag" uri="myTagLib" %>
<%@ taglib uri="/includes/tt.tld" prefix="tt" %>
<%@ taglib uri="myTagLib" prefix="tt" %>
<jsp-config>
    <taglib>
        <taglib-uri>myTagLib</taglib-uri>
        <taglib-location>/includes/tt.tld</taglib-location>
    </taglib>
</jsp-config>