当前位置: 代码迷 >> Java Web开发 >> 刚学自定义标签,
  详细解决方案

刚学自定义标签,

热度:4394   发布时间:2016-04-10 23:24:07.0
刚学自定义标签,求救!
先发3个文件:
标签库定义:文件放在uri指的位置
<?xml version="1.0" encoding="GBK"?>

<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>mytaglib</short-name>
<!-- 定义该标签库的URI -->
<uri>D:\Tomcat\apache-tomcat-7.0.47\webapps\study\WEB-INF\classes\mytaglib</uri>

<!-- 定义第一个标签 -->
<tag>
<!-- 定义标签名 -->
<name>helloWorld</name>
<!-- 定义标签处理类 -->
<tag-class>HelloWorldTag</tag-class>
<!-- 定义标签体为空 -->
<body-content>empty</body-content>
</tag>

</taglib>


JSP页面:
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<%@page import="java.util.*" %>
<%@ taglib uri= "D:\Tomcat\apache-tomcat-7.0.47\webapps\study\WEB-INF\classes\mytaglib" prefix="mytag"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>a.jsp</title>
</head>
<body>

<mytag:helloWorld/>

</body>
</html>


自定义标签类:放在uri那个文件夹里
import javax.servlet.jsp.tagext.*;
import javax.servlet.jsp.*;
import java.io.*;

public class HelloWorldTag extends SimpleTagSupport{

public void doTag() throws JspExceptionIOException{
getJspContext().getOut().write("Hellow World" + new java.util.Date());
}

}



问题:
1.在浏览器中打开后,显示:HTTP Status 500 - The absolute uri: D:\Tomcat\apache-tomcat-7.0.47\webapps\study\WEB-INF\classes\mytaglib cannot be resolved in either web.xml or the jar files deployed with this application。。。。。。刷新几下又显示HTTP Status 500 - java.lang.ClassNotFoundException: org.apache.jsp.a_jsp。。。。为什么??
如果把jsp页面中的<%@ taglib 那段删掉(body也空),页面可以显示。

2.网上查的时候看到有用web.xml来配置标签,书上没用这种方法,都有什么区别?

弄了3个小时,还搞不好。求救!

------解决方案--------------------
首先你的<tag-class>HelloWorldTag</tag-class>配置的不对,这个应该是包名加类名的全路径,其次是uri没必要那么做,比如<uri>http://www.xxxooo.com/mytaglib</uri>,然后在页面上使用时候,<%@ taglib uri= "http://www.xxxooo.com/mytaglib" prefix="mytag"%>,这个uri其实不是很讲究,tag-class更为重要
  相关解决方案