新版本为
<?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/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>html</short-name>
<uri>/html</uri>
<description>
    HTML examples for the Tag Patterns chapter.
  </description>
完整例子可以参看
http://expert.csdn.net/Expert/topic/2113/2113148.xml?temp=7.198513E-03

解决方案 »

  1.   

    第一、你要使用JSP1.2以上的版本,才能得到比较好的taglib的支持第二、tld文件要加上dtd声明
    <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
      "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
      

  2.   

    谢谢两位。
    不过我又试了,加了
    <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
      "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
    同时也作了相应修改。
    在web.xml中加入:
        <taglib>
            <taglib-uri>
       /mytestlib
            </taglib-uri>
            <taglib-location>
               /WEB-INF/tlds/test-taglib.tld
            </taglib-location>
        </taglib>    修改test.jsp:<%@ taglib prefix="test" uri="/mytestlib"%>仍然出错;
    tomcat端:
    Warning: validation was turned on but an org.xml.sax.ErrorHandler was not
    set, which is probably not what is desired.  Parser will use a default
    ErrorHandler to print the first 10 errors.  Please call
    the 'setErrorHandler' method to fix this.
    Error: URI=null Line=5: 组件“taglib”在此不允许“tlibversion”。
    Error: URI=null Line=5: 组件类型“tlibversion”未被声明。
    Error: URI=null Line=6: 组件“taglib”在此不允许“jspversion”。
    Error: URI=null Line=6: 组件类型“jspversion”未被声明。
    Error: URI=null Line=7: 组件“taglib”在此不允许“shortname”。
    Error: URI=null Line=7: 组件类型“shortname”未被声明。
    Error: URI=null Line=9: 组件“taglib”在此不允许“tag”。
    Error: URI=null Line=11: 组件“tag”在此不允许“tagclass”。
    Error: URI=null Line=11: 组件类型“tagclass”未被声明。
    Error: URI=null Line=12: 组件“tag”在此不允许“bodycontent”。ie端:
    Error: 500
    Location: /examples/test.jsp
    Internal Servlet Error:org.apache.jasper.compiler.ParseException: C:\tomcat\webapps\examples\test.jsp(9,19) Attribute value should be quoted
    at org.apache.jasper.compiler.JspReader.parseToken(Unknown Source)
    at org.apache.jasper.compiler.JspReader.parseAttributeValue(Unknown Source)
    at org.apache.jasper.compiler.JspReader.parseTagAttributes(Unknown Source)
    at org.apache.jasper.compiler.Parser$Tag.accept(Unknown Source)
    at org.apache.jasper.compiler.Parser.parse(Unknown Source)
    at org.apache.jasper.compiler.Parser.parse(Unknown Source)
    at org.apache.jasper.compiler.Parser.parse(Unknown Source)
    at org.apache.jasper.compiler.Compiler.compile(Unknown Source)
    at org.apache.tomcat.facade.JasperLiaison.jsp2java(Unknown Source)
    at org.apache.tomcat.facade.JasperLiaison.processJspFile(Unknown Source)
    at org.apache.tomcat.facade.JspInterceptor.requestMap(Unknown Source)
    at org.apache.tomcat.core.ContextManager.processRequest(Unknown Source)
    at org.apache.tomcat.core.ContextManager.internalService(Unknown Source)
    at org.apache.tomcat.core.ContextManager.service(Unknown Source)
    at org.apache.tomcat.modules.server.Http10Interceptor.processConnection(Unknown Source)
    at org.apache.tomcat.util.net.TcpWorkerThread.runIt(Unknown Source)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(Unknown Source)
    at java.lang.Thread.run(Thread.java:536)再求助!急...
      

  3.   

    问一个简单的问题你的机子能上网吗?如果不能上网,他就没有办法取得DTD,而导致错误
      

  4.   

    上网可以的。那些jspversion ,jsptaglibray 我都是随便写的,这会有问题吗?
      

  5.   

    新版本是tlib-version,而不是tlibversion了
      

  6.   

    我把test-taglib.tld中的标签都改成型版本了。
    <?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/dtd/web-jsptaglibrary_1_2.dtd">
    <taglib>
    <tlib-version>1.2</tlib-version>
    <jsp-version>1.2</jsp-version>
    <short-name>test</short-name> <tag>
    <name>switch</name>
    <tag-class>tld.SwitchTag</tag-class>
    <body-content>JSP</body-content>
    <attribute>
    <name>value</name>
    <required>true</required>
    <rtexprvalue>true</rtexprvalue>
    </attribute> </tag>
    <tag>
    <name>case</name>
    <tag-class>tld.CaseTag</tag-class>
    <body-content>JSP</body-content>
    <attribute>
    <name>value</name>
    <required>true</required>
    <rtexprvalue>true</rtexprvalue>
    </attribute>
    </tag>
    <tag>
    <name>default</name>
    <tag-class>tld.Default</tag-class>
    <body-content>JSP</body-content> </tag>
    </taglib>还是出错,不过tomcat不提示错误了
    ie:
    Error: 500
    Location: /examples/test.jsp
    Internal Servlet Error:org.apache.jasper.compiler.ParseException: C:\tomcat\webapps\examples\test.jsp(9,19) Attribute value should be quoted
    at org.apache.jasper.compiler.JspReader.parseToken(Unknown Source)
    at org.apache.jasper.compiler.JspReader.parseAttributeValue(Unknown Source)
    at org.apache.jasper.compiler.JspReader.parseTagAttributes(Unknown Source)
    at org.apache.jasper.compiler.Parser$Tag.accept(Unknown Source)
    at org.apache.jasper.compiler.Parser.parse(Unknown Source)
    at org.apache.jasper.compiler.Parser.parse(Unknown Source)
    at org.apache.jasper.compiler.Parser.parse(Unknown Source)
    at org.apache.jasper.compiler.Compiler.compile(Unknown Source)
    at org.apache.tomcat.facade.JasperLiaison.jsp2java(Unknown Source)
    at org.apache.tomcat.facade.JasperLiaison.processJspFile(Unknown Source)
    at org.apache.tomcat.facade.JspInterceptor.requestMap(Unknown Source)
    at org.apache.tomcat.core.ContextManager.processRequest(Unknown Source)
    at org.apache.tomcat.core.ContextManager.internalService(Unknown Source)
    at org.apache.tomcat.core.ContextManager.service(Unknown Source)
    at org.apache.tomcat.modules.server.Http10Interceptor.processConnection(Unknown Source)
    at org.apache.tomcat.util.net.TcpWorkerThread.runIt(Unknown Source)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(Unknown Source)
    at java.lang.Thread.run(Thread.java:536)
      

  7.   

    原文件如下:
    //test.jsp
    <%@ page session="false" %>
    <%@ taglib prefix="test" uri="/mytestlib"%>
    <%
    String value="a";
    if(request.getParameter("value")!=null){
    value=request.getParameter("value");
    }

    %>
    <test:switch value=<%=value%>>
    <test:case value="a">a</text:case>
    <test:case value="b">b</text:case>
    <test:case value="c">c</text:case>
    <test:defaule>others</text:default>
    </text:switch> //test-taglib.tld
    <?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/dtd/web-jsptaglibrary_1_2.dtd">
    <taglib>
    <tlib-version>1.2</tlib-version>
    <jsp-version>1.2</jsp-version>
    <short-name>test</short-name> <tag>
    <name>switch</name>
    <tag-class>tld.SwitchTag</tag-class>
    <body-content>JSP</body-content>
    <attribute>
    <name>value</name>
    <required>true</required>
    <rtexprvalue>true</rtexprvalue>
    </attribute> </tag>
    <tag>
    <name>case</name>
    <tag-class>tld.CaseTag</tag-class>
    <body-content>JSP</body-content>
    <attribute>
    <name>value</name>
    <required>true</required>
    <rtexprvalue>true</rtexprvalue>
    </attribute>
    </tag>
    <tag>
    <name>default</name>
    <tag-class>tld.Default</tag-class>
    <body-content>JSP</body-content> </tag>
    </taglib>
      

  8.   

    还有,
    //SwitchTag.java (编译好通过了)
    package tld;
    import javax.servlet.jsp.tagext.*;
    import javax.servlet.jsp.*;public class SwitchTag extends TagSupport {
    private String value=new String();
    private boolean complete;
    public int doStartTag()throws JspException{
    return EVAL_BODY_INCLUDE;
    }
    public void setValue(String value){
    this.value=value;
    }
    public String getValue(){
    return value;
    }
    public void setComplete(boolean b){
    complete=b;
    }
    public boolean getComplete(){
    return complete;
    }
    } //CaseTag.java
    package tld;import javax.servlet.jsp.tagext.*;
    import javax.servlet.jsp.*;public class CaseTag extends TagSupport {
    private String value=new String();

    public void setValue(String value){
    this.value=value;
    }
    public int doStartTag()throws JspException {
    SwitchTag switchtag=(SwitchTag)findAncestorWithClass(this,SwitchTag.class);
    if(switchtag.getComplete()){
    return SKIP_BODY;
    }

    if(value!=null){
    if(value.equals(switchtag.getValue())){
    switchtag.setComplete(true);
    return EVAL_BODY_INCLUDE;
    }
    return SKIP_BODY;
    }
    return SKIP_BODY;
    }
    } //DefaultTag.java
    package tld;
    import javax.servlet.jsp.*;
    import javax.servlet.jsp.tagext.*;public class DefaultTag extends TagSupport {
    public int doStartTag(){
    SwitchTag switchtag=(SwitchTag)findAncestorWithClass(this,SwitchTag.class);
    if(switchtag.getComplete()){
    return SKIP_BODY;
    }
    switchtag.setComplete(true);
    return EVAL_BODY_INCLUDE;
    }
    } 谢谢帮忙!
      

  9.   

    //test-taglib.tld
    <tag>
    <name>default</name>
    <tag-class>tld.DefaultTag</tag-class>
    <body-content>JSP</body-content> </tag>
    tld.Default=>tld.DefaultTag
      

  10.   

    <test:switch value="<%=value%>">
    <test:case value="a">a</text:case>
    <test:case value="b">b</text:case>
    <test:case value="c">c</text:case>
    <test:defaule>others</text:default>
    </text:switch>
    怎么一会是test,一会又是text,统一改为test
    defaule=>default
    乱七八糟的最后
    web.xml应为
    <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE web-app PUBLIC '-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN' 'http://java.sun.com/dtd/web-app_2_3.dtd'><web-app>
      <display-name>you are so careless</display-name>
       <taglib>
        <taglib-uri>/mytestlib</taglib-uri>
        <taglib-location>/WEB-INF/tlds/test-taglib.tld</taglib-location>
      </taglib>
    </web-app>
      

  11.   

    西西。粗心了点!给你无端添了很多麻烦。//bow
    不过web.xml不能像你那样写,否则tomcat启动时就出错:
    2003-09-13 23:20:46 - Ctx() : Validating web.xml
    XmlMapper: Can't find resource for entity: -//Sun Microsystems, Inc.//DTD Web Ap
    plication 2.3//EN --> http://java.sun.com/dtd/web-app_2_3.dtd "null"