症状
カスタムタグを使おうとすると以下のようなエラーが出力される。
org.apache.jasper.JasperException: URI [/sample.tld]のtaglib [s]が見つかりません
ファイルの配置等を変えてみたが変化が無いのでtldファイルが読み込まれていないようだ。
環境
- tomcat8.5
- jdk11.0.17
ファイル構成
│ tag_test.jsp
│
└─WEB-INF
│ sample.tld
│ web.xml
│
└─classes
├─taglibs
│ HelloTag.class
│ HelloTag.java
ソースコード
package taglibs;
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;
public class HelloTag extends TagSupport{
public int doStartTag() throws JspException{
try{
pageContext.getOut().println("<p>Hello</p>");
JspWriter w = pageContext.getOut();
pageContext.getOut().println("クラス名:"+w.getClass().getName());
}catch(IOException e){
throw new JspException(e);
}
return SKIP_BODY;
}
}
<%@ page contentType="text/html; charset=Windows-31J"
pageEncoding="Windows-31J" %>
<%@ taglib prefix="s" uri="/sample.tld"%>
<html>
<head>カスタムタグのテスト</head>
<body>
<h1><s:hello /></h1>
</body>
</html>
<?xml version="1.0" encoding="UTF-8"?>
<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.1</tlib-version>
<tag>
<name>hello</name>
<tag-class>taglibs.HelloTag</tag-class>
<body-content>empty</body-content>
</tag>
</taglib>
解決方法
jspに適切なuriを記入することで解決した。
変更点
jspの3行目のtaglibディレクティブを以下のように書き換えた
<%@ taglib prefix="s" uri="/WEB-INF/sample.tld"%>
コメント