我创建了一个标记库描述符 (tld) 并将它放在一个文件夹WEB-INF/tags/中。它看起来像这样:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE taglib
PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.com/j2ee/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>simple</short-name>
<uri>http://tomcat.apache.org/example-taglib</uri>
<description>A simple tab library for the examples</description>
<tag>
<name>printImageDirectory</name>
<tag-class>tag.ImageDirectoryTag</tag-class>
<attribute>
<name>dishId</name>
<required>true</required>
</attribute>
<attribute>
<name>imageFileName</name>
<required>true</required>
</attribute>
</tag>
</taglib>
但是当我尝试像这样将它与 JSP 绑定时,问题就出现了:
<%@ taglib uri="WEB-INF/tags/mytags.tld" prefix="m" %>
我有这个错误
找不到 URI 的 taglib [m]:[WEB-INF/tags/mytags.tld]
/我可以通过在开头添加一个额外的来轻松解决这个问题, 所以它看起来像这样
<%@ taglib uri="/WEB-INF/tags/mytags.tld" prefix="m" %>
所有编译错误都消失了,但是当我现在尝试转到该页面时 - 我发现了这个错误
org.apache.jasper.JasperException:无效的 tld 文件:[/WEB-INF/tags/mytags.tld],有关详细信息,请参阅 JSP 规范第 7.3.1 节
我究竟做错了什么?
PS 这可能无关紧要,但这是我在 tld 中使用的实际标签。
public class ImageDirectoryTag extends TagSupport {
private int dishId;
private String imageFileName;
@Override
public int doStartTag() {
String dir = String.format("/%s/%s/%s", IMAGES_DIR, dishId, imageFileName);
JspWriter out = pageContext.getOut();
try {
out.print(dir);
} catch (IOException e) {
e.printStackTrace();
}
return SKIP_BODY;
}
public void setDishId(int dishId) {
this.dishId = dishId;
}
public void setImageFileName(String imageFileName) {
this.imageFileName = imageFileName;
}
}

该规范声明
/WEB-INF/tags它不能包含.tld文件。更多细节可以在Java EE 教程中找到。
将文件夹重命名为其他名称,例如,
tlds或将 tld 文件传输到/WEB-INF/.