【tomact8.5】カスタムJSPタグでtldが読み込まれない

症状

カスタムタグを使おうとすると以下のようなエラーが出力される。

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"%>

コメント

タイトルとURLをコピーしました