在 JSP 中添加自定义标签库时出现 NullPointerException
NullPointerException when add custom taglib in JSP
我需要为 JSP 页面实现一些自定义函数,为此我需要创建自定义标签库。这应该是简单的操作,但是当我只添加空的标签库时,第一步就遇到了问题。我有一个例外:
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)
...
我的自定义顶级域名(放在webapp/custom.tld):
<?xml version="1.0">
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<tlib-version>1.0</tlib-version>
<short-name>MyLibrary</short-name>
<uri>myTagLib</uri>
</taglib>
JSP:
<%@ taglib prefix="myTag" uri="myTagLib" %>
此外,我尝试在 custom.tld 中添加一些功能,但没有任何更改。
有人可以帮助我吗?我做错了什么?
您需要将 custom.tld
文件移动到 /WEB-INF
目录中的某处,以便容器查找并将其映射到 /<taglib>/<uri>
.
中提供的值
如果由于某种原因你不能,你应该添加一个 <taglib>
映射到你的 web.xml 文件。
<jsp-config>
<taglib>
<taglib-uri>myTagLib<taglib-uri>
<taglib-location>/webportal/custom.tld<taglib-location>
</taglib>
</jsp-config>
<taglib-location>
是相对于您的 Web 应用程序根目录指定的。如果需要,请修改。
我花了 4 个小时来解决这个问题。我已从 Tomcat 6 切换到 Tomcat 8 并开始获得相同的 NPE。我最终发现问题出在导入我的 taglib
<%@ taglib uri="/includes/tt.tld" prefix="tt" %>
原来 Tomcat 8 Jasper 无法通过相对路径导入。我改成了
<%@ taglib uri="myTagLib" prefix="tt" %>
并在我的 web.xml
中将 taglib 定义为
<jsp-config>
<taglib>
<taglib-uri>myTagLib</taglib-uri>
<taglib-location>/includes/tt.tld</taglib-location>
</taglib>
</jsp-config>
我需要为 JSP 页面实现一些自定义函数,为此我需要创建自定义标签库。这应该是简单的操作,但是当我只添加空的标签库时,第一步就遇到了问题。我有一个例外:
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)
...
我的自定义顶级域名(放在webapp/custom.tld):
<?xml version="1.0">
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<tlib-version>1.0</tlib-version>
<short-name>MyLibrary</short-name>
<uri>myTagLib</uri>
</taglib>
JSP:
<%@ taglib prefix="myTag" uri="myTagLib" %>
此外,我尝试在 custom.tld 中添加一些功能,但没有任何更改。
有人可以帮助我吗?我做错了什么?
您需要将 custom.tld
文件移动到 /WEB-INF
目录中的某处,以便容器查找并将其映射到 /<taglib>/<uri>
.
如果由于某种原因你不能,你应该添加一个 <taglib>
映射到你的 web.xml 文件。
<jsp-config>
<taglib>
<taglib-uri>myTagLib<taglib-uri>
<taglib-location>/webportal/custom.tld<taglib-location>
</taglib>
</jsp-config>
<taglib-location>
是相对于您的 Web 应用程序根目录指定的。如果需要,请修改。
我花了 4 个小时来解决这个问题。我已从 Tomcat 6 切换到 Tomcat 8 并开始获得相同的 NPE。我最终发现问题出在导入我的 taglib
<%@ taglib uri="/includes/tt.tld" prefix="tt" %>
原来 Tomcat 8 Jasper 无法通过相对路径导入。我改成了
<%@ taglib uri="myTagLib" prefix="tt" %>
并在我的 web.xml
中将 taglib 定义为
<jsp-config>
<taglib>
<taglib-uri>myTagLib</taglib-uri>
<taglib-location>/includes/tt.tld</taglib-location>
</taglib>
</jsp-config>