You are viewing a plain text version of this content. The canonical link for it is here.
Posted to taglibs-user@tomcat.apache.org by Terry Hanks <th...@wt.net> on 2000/11/24 06:48:30 UTC

Unable to open taglibrary csajsp-taglib.tld : Parse Error in the tag library descriptor: Element "web-app" does not allow "servlet" here.

I am having trouble getting started with taglibs, and would appreciate any help if someone has seen this problem before.  
I am trying to use the first taglib example from chapter 14 of the book "Coreservelts and JSP" with Tomcat 3.1.  
I get the parse error shown below.  The example that I am trying to use consists of the following files in the following directories: 


SimpleExample.jsp in htdocs

csajsp-taglib.tld in htdocs

ExampleTag.class in htdocs/WEB-INF/classes/coreservlets/tags



I list the following information below:

- the error in the browser

- source for SimpleExample.jsp

- csajsp-taglib.tld in htdocs

- ExampleTag.java


Error: 500
Location: /SimpleExample.jsp
Internal Servlet Error:

org.apache.jasper.JasperException: Unable to open taglibrary csajsp-taglib.tld : Parse Error in the tag library descriptor: Element "web-app" does not allow "servlet" here.
	at org.apache.jasper.compiler.JspParseEventListener.handleDirective(JspParseEventListener.java:672)
	at org.apache.jasper.compiler.DelegatingListener.handleDirective(DelegatingListener.java:116)
	at org.apache.jasper.compiler.Parser$Directive.accept(Parser.java:215)
	at org.apache.jasper.compiler.Parser.parse(Parser.java:1073)
	at org.apache.jasper.compiler.Parser.parse(Parser.java:1038)
	at org.apache.jasper.compiler.Parser.parse(Parser.java:1034)
	at org.apache.jasper.compiler.Compiler.compile(Compiler.java:182)
	at org.apache.jasper.runtime.JspServlet.loadJSP(JspServlet.java:413)
	at org.apache.jasper.runtime.JspServlet$JspServletWrapper.loadIfNecessary(JspServlet.java:149)
	at org.apache.jasper.runtime.JspServlet$JspServletWrapper.service(JspServlet.java:161)
	at org.apache.jasper.runtime.JspServlet.serviceJspFile(JspServlet.java:261)
	at org.apache.jasper.runtime.JspServlet.service(JspServlet.java:369)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
	at org.apache.tomcat.core.ServletWrapper.handleRequest(ServletWrapper.java:503)
	at org.apache.tomcat.core.ContextManager.service(ContextManager.java:559)
	at org.apache.tomcat.service.connector.Ajp12ConnectionHandler.processConnection(Ajp12ConnectionHandler.java:167)
	at org.apache.tomcat.service.TcpConnectionThread.run(SimpleTcpEndpoint.java:338)
	at java.lang.Thread.run(Thread.java:484)


Source for SimpleExample.jsp:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<!-- 

Illustration of very simple JSP custom tag. 


Taken from Core Servlets and JavaServer Pages

from Prentice Hall and Sun Microsystems Press,

http://www.coreservlets.com/.

&copy; 2000 Marty Hall; may be freely used or adapted.

-->

<HTML>

<HEAD>

<%@ taglib uri="csajsp-taglib.tld" prefix="csajsp" %>

<TITLE><csajsp:example /></TITLE>

<LINK REL=STYLESHEET

HREF="JSP-Styles.css"

TYPE="text/css">

</HEAD>

<BODY>

<H1><csajsp:example /></H1>

<csajsp:example />

</BODY>

</HTML>





csajsp-taglib.tld

<?xml version="1.0" encoding="ISO-8859-1" ?>

<!DOCTYPE taglib

PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"

"http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">

<!-- a tag library descriptor -->

<taglib>

<!-- after this the default space is

"http://java.sun.com/j2ee/dtds/jsptaglibrary_1_2.dtd"

-->

<tlibversion>1.0</tlibversion>

<jspversion>1.1</jspversion>

<shortname>csajsp</shortname>

<!-- ** CHANGED FROM "urn" TO "uri" IN TOMCAT 3.1 ** -->

<uri></uri>

<info>

A tag library from Core Servlets and JavaServer Pages,

http://www.coreservlets.com/.

</info>

<!--

<tag>

The name (after prefix) tag will have in JSP code

<name>example</name>

The actual class implementing tag. In

Tomcat 3.1 beta, it MUST be in a package.

<tagclass>coreservlets.tags.ExampleTag</tagclass>

Descriptive information about tag.

<info>Simplest example: inserts one line of output</info>

One of three values describing what goes between

start and end tag. 

empty: no body 

JSP: body that is evaluated by container normally,

then possibly processed by tag

tagdependent: body is only processed by tag;

JSP in body is not evaluated. 

** NOTE: TOMCAT 3.1 FINAL DOES NOT SUPPORT BODYCONTENT **

** THE BETA SUPPORTED IT, AND IT IS PART OF SPEC, BUT... **

<bodycontent>empty</bodycontent>

</tag> 

-->

<tag>

<name>example</name>

<tagclass>coreservlets.tags.ExampleTag</tagclass>

<info>Simplest example: inserts one line of output</info>

<!-- TOMCAT 3.1 DOES NOT SUPPORT BODYCONTENT 

<bodycontent>empty</bodycontent> -->

</tag> 

<tag>

<name>simplePrime</name>

<tagclass>coreservlets.tags.SimplePrimeTag</tagclass>

<info>Outputs a random 50-digit prime.</info>

<!-- TOMCAT 3.1 DOES NOT SUPPORT BODYCONTENT 

<bodycontent>empty</bodycontent> -->

</tag>

<tag>

<name>prime</name>

<tagclass>coreservlets.tags.PrimeTag</tagclass>

<info>Outputs a random N-digit prime.</info>

<!-- TOMCAT 3.1 DOES NOT SUPPORT BODYCONTENT

<bodycontent>empty</bodycontent> -->

<attribute>

<name>length</name>

<required>false</required>

</attribute>

</tag>

<tag>

<name>heading</name>

<tagclass>coreservlets.tags.HeadingTag</tagclass>

<info>Outputs a 1-cell table used as a heading.</info>

<!-- TOMCAT 3.1 DOES NOT SUPPORT BODYCONTENT 

<bodycontent>JSP</bodycontent> -->

<attribute>

<name>bgColor</name>

<required>true</required> <!-- bgColor is required -->

</attribute>

<attribute>

<name>color</name>

<required>false</required>

</attribute>

<attribute>

<name>align</name>

<required>false</required>

</attribute>

<attribute>

<name>fontSize</name>

<required>false</required>

</attribute>

<attribute>

<name>fontList</name>

<required>false</required>

</attribute>

<attribute>

<name>border</name>

<required>false</required>

</attribute>

<attribute>

<name>width</name>

<required>false</required>

</attribute>

</tag>

<tag>

<name>debug</name>

<tagclass>coreservlets.tags.DebugTag</tagclass>

<info>Includes body only if debug param is set.</info>

<!-- TOMCAT 3.1 DOES NOT SUPPORT BODYCONTENT 

<bodycontent>JSP</bodycontent> -->

</tag>

<tag>

<name>filter</name>

<tagclass>coreservlets.tags.FilterTag</tagclass>

<info>Replaces HTML-specific characters in body.</info>

<!-- TOMCAT 3.1 DOES NOT SUPPORT BODYCONTENT 

<bodycontent>JSP</bodycontent> -->

</tag>

<tag>

<name>repeat</name>

<tagclass>coreservlets.tags.RepeatTag</tagclass>

<info>Repeats body the specified number of times.</info>

<!-- TOMCAT 3.1 DOES NOT SUPPORT BODYCONTENT 

<bodycontent>JSP</bodycontent> -->

<attribute>

<name>reps</name>

<required>true</required>

<!-- rtexprvalue indicates whether attribute

can be a JSP expression. -->

<rtexprvalue>true</rtexprvalue>

</attribute>

</tag>

<tag>

<name>if</name>

<tagclass>coreservlets.tags.IfTag</tagclass>

<info>if/condition/then/else tag.</info>

<!-- TOMCAT 3.1 DOES NOT SUPPORT BODYCONTENT 

<bodycontent>JSP</bodycontent> -->

</tag>

<tag>

<name>condition</name>

<tagclass>coreservlets.tags.IfConditionTag</tagclass>

<info>condition part of if/condition/then/else tag.</info>

<!-- TOMCAT 3.1 DOES NOT SUPPORT BODYCONTENT 

<bodycontent>JSP</bodycontent> -->

</tag>

<tag>

<name>then</name>

<tagclass>coreservlets.tags.IfThenTag</tagclass>

<info>then part of if/condition/then/else tag.</info>

<!-- TOMCAT 3.1 DOES NOT SUPPORT BODYCONTENT 

<bodycontent>JSP</bodycontent> -->

</tag>

<tag>

<name>else</name>

<tagclass>coreservlets.tags.IfElseTag</tagclass>

<info>else part of if/condition/then/else tag.</info>

<!-- TOMCAT 3.1 DOES NOT SUPPORT BODYCONTENT 

<bodycontent>JSP</bodycontent> -->

</tag>

</taglib>



ExampleTag.java
package coreservlets.tags;

import javax.servlet.jsp.*;

import javax.servlet.jsp.tagext.*;

import java.io.*;

/** Very simple JSP tag that just inserts a string

* ("Custom tag example...") into the output.

* The actual name of the tag is not defined here;

* that is given by the Tag Library Descriptor (TLD)

* file that is referenced by the taglib directive

* in the JSP file.

* <P>

* Taken from Core Servlets and JavaServer Pages

* from Prentice Hall and Sun Microsystems Press,

* http://www.coreservlets.com/.

* &copy; 2000 Marty Hall; may be freely used or adapted.

*/

public class ExampleTag extends TagSupport {

public int doStartTag() {

try {

JspWriter out = pageContext.getOut();

out.print("Custom tag example " +

"(coreservlets.tags.ExampleTag)");

} catch(IOException ioe) {

System.out.println("Error in ExampleTag: " + ioe);

}

return(SKIP_BODY);

}

}


Re: Unable to open taglibrary csajsp-taglib.tld : Parse Error in the tag library descriptor: Element "web-app" does not allow "servlet" here.

Posted by Pierre Delisle <pi...@sun.com>.
Terry,

You get this error because the "servlet" tag in your web.xml is not properly
positioned.

If using servlet 2.2, you must obey the following order:
[from the web.xml DTD]

<!ELEMENT web-app (icon?, display-name?, description?, distributable?,
context-param*, servlet*, servlet-mapping*, session-config?,
mime-mapping*, welcome-file-list?, error-page*, taglib*,
resource-ref*, security-constraint*, login-config?, security-role*,
env-entry*, ejb-ref*)>

This was "ignored" in older releases of tomcat.

    -- Pierre


> Terry Hanks wrote:
> 
> I am having trouble getting started with taglibs, and would appreciate any help if someone has seen this problem before.
> 
> I am trying to use the first taglib example from chapter 14 of the book "Coreservelts and JSP" with Tomcat 3.1.
> 
> I get the parse error shown below.  The example that I am trying to use consists of the following files in the following directories:
> 
> 
> 
> SimpleExample.jsp in htdocs
> 
> csajsp-taglib.tld in htdocs
> 
> ExampleTag.class in htdocs/WEB-INF/classes/coreservlets/tags
> 
> 
> 
> I list the following information below:
> 
> - the error in the browser
> 
> - source for SimpleExample.jsp
> 
> - csajsp-taglib.tld in htdocs
> 
> - ExampleTag.java
> 
> Error: 500
> 
> Location: /SimpleExample.jsp
> 
> Internal Servlet Error:
> 
> org.apache.jasper.JasperException: Unable to open taglibrary csajsp-taglib.tld : Parse Error in the tag library descriptor: Element "web-app" does not allow "servlet" here.
>         at org.apache.jasper.compiler.JspParseEventListener.handleDirective(JspParseEventListener.java:672)
>         at org.apache.jasper.compiler.DelegatingListener.handleDirective(DelegatingListener.java:116)
>         at org.apache.jasper.compiler.Parser$Directive.accept(Parser.java:215)
>         at org.apache.jasper.compiler.Parser.parse(Parser.java:1073)
>         at org.apache.jasper.compiler.Parser.parse(Parser.java:1038)
>         at org.apache.jasper.compiler.Parser.parse(Parser.java:1034)
>         at org.apache.jasper.compiler.Compiler.compile(Compiler.java:182)
>         at org.apache.jasper.runtime.JspServlet.loadJSP(JspServlet.java:413)
>         at org.apache.jasper.runtime.JspServlet$JspServletWrapper.loadIfNecessary(JspServlet.java:149)
>         at org.apache.jasper.runtime.JspServlet$JspServletWrapper.service(JspServlet.java:161)
>         at org.apache.jasper.runtime.JspServlet.serviceJspFile(JspServlet.java:261)
>         at org.apache.jasper.runtime.JspServlet.service(JspServlet.java:369)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
>         at org.apache.tomcat.core.ServletWrapper.handleRequest(ServletWrapper.java:503)
>         at org.apache.tomcat.core.ContextManager.service(ContextManager.java:559)
>         at org.apache.tomcat.service.connector.Ajp12ConnectionHandler.processConnection(Ajp12ConnectionHandler.java:167)
>         at org.apache.tomcat.service.TcpConnectionThread.run(SimpleTcpEndpoint.java:338)
>         at java.lang.Thread.run(Thread.java:484)
> 
> 
> 
> Source for SimpleExample.jsp:
> 
> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
> 
> <!--
> 
> Illustration of very simple JSP custom tag.
> 
> Taken from Core Servlets and JavaServer Pages
> 
> from Prentice Hall and Sun Microsystems Press,
> 
> http://www.coreservlets.com/.
> 
> &copy; 2000 Marty Hall; may be freely used or adapted.
> 
> -->
> 
> <HTML>
> 
> <HEAD>
> 
> <%@ taglib uri="csajsp-taglib.tld" prefix="csajsp" %>
> 
> <TITLE><csajsp:example /></TITLE>
> 
> <LINK REL=STYLESHEET
> 
> HREF="JSP-Styles.css"
> 
> TYPE="text/css">
> 
> </HEAD>
> 
> <BODY>
> 
> <H1><csajsp:example /></H1>
> 
> <csajsp:example />
> 
> </BODY>
> 
> </HTML>
> 
> 
> 
> 
> 
> csajsp-taglib.tld
> 
> <?xml version="1.0" encoding="ISO-8859-1" ?>
> 
> <!DOCTYPE taglib
> 
> PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"
> 
> "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
> 
> <!-- a tag library descriptor -->
> 
> <taglib>
> 
> <!-- after this the default space is
> 
> "http://java.sun.com/j2ee/dtds/jsptaglibrary_1_2.dtd"
> 
> -->
> 
> <tlibversion>1.0</tlibversion>
> 
> <jspversion>1.1</jspversion>
> 
> <shortname>csajsp</shortname>
> 
> <!-- ** CHANGED FROM "urn" TO "uri" IN TOMCAT 3.1 ** -->
> 
> <uri></uri>
> 
> <info>
> 
> A tag library from Core Servlets and JavaServer Pages,
> 
> http://www.coreservlets.com/.
> 
> </info>
> 
> <!--
> 
> <tag>
> 
> The name (after prefix) tag will have in JSP code
> 
> <name>example</name>
> 
> The actual class implementing tag. In
> 
> Tomcat 3.1 beta, it MUST be in a package.
> 
> <tagclass>coreservlets.tags.ExampleTag</tagclass>
> 
> Descriptive information about tag.
> 
> <info>Simplest example: inserts one line of output</info>
> 
> One of three values describing what goes between
> 
> start and end tag.
> 
> empty: no body
> 
> JSP: body that is evaluated by container normally,
> 
> then possibly processed by tag
> 
> tagdependent: body is only processed by tag;
> 
> JSP in body is not evaluated.
> 
> ** NOTE: TOMCAT 3.1 FINAL DOES NOT SUPPORT BODYCONTENT **
> 
> ** THE BETA SUPPORTED IT, AND IT IS PART OF SPEC, BUT... **
> 
> <bodycontent>empty</bodycontent>
> 
> </tag>
> 
> -->
> 
> <tag>
> 
> <name>example</name>
> 
> <tagclass>coreservlets.tags.ExampleTag</tagclass>
> 
> <info>Simplest example: inserts one line of output</info>
> 
> <!-- TOMCAT 3.1 DOES NOT SUPPORT BODYCONTENT
> 
> <bodycontent>empty</bodycontent> -->
> 
> </tag>
> 
> <tag>
> 
> <name>simplePrime</name>
> 
> <tagclass>coreservlets.tags.SimplePrimeTag</tagclass>
> 
> <info>Outputs a random 50-digit prime.</info>
> 
> <!-- TOMCAT 3.1 DOES NOT SUPPORT BODYCONTENT
> 
> <bodycontent>empty</bodycontent> -->
> 
> </tag>
> 
> <tag>
> 
> <name>prime</name>
> 
> <tagclass>coreservlets.tags.PrimeTag</tagclass>
> 
> <info>Outputs a random N-digit prime.</info>
> 
> <!-- TOMCAT 3.1 DOES NOT SUPPORT BODYCONTENT
> 
> <bodycontent>empty</bodycontent> -->
> 
> <attribute>
> 
> <name>length</name>
> 
> <required>false</required>
> 
> </attribute>
> 
> </tag>
> 
> <tag>
> 
> <name>heading</name>
> 
> <tagclass>coreservlets.tags.HeadingTag</tagclass>
> 
> <info>Outputs a 1-cell table used as a heading.</info>
> 
> <!-- TOMCAT 3.1 DOES NOT SUPPORT BODYCONTENT
> 
> <bodycontent>JSP</bodycontent> -->
> 
> <attribute>
> 
> <name>bgColor</name>
> 
> <required>true</required> <!-- bgColor is required -->
> 
> </attribute>
> 
> <attribute>
> 
> <name>color</name>
> 
> <required>false</required>
> 
> </attribute>
> 
> <attribute>
> 
> <name>align</name>
> 
> <required>false</required>
> 
> </attribute>
> 
> <attribute>
> 
> <name>fontSize</name>
> 
> <required>false</required>
> 
> </attribute>
> 
> <attribute>
> 
> <name>fontList</name>
> 
> <required>false</required>
> 
> </attribute>
> 
> <attribute>
> 
> <name>border</name>
> 
> <required>false</required>
> 
> </attribute>
> 
> <attribute>
> 
> <name>width</name>
> 
> <required>false</required>
> 
> </attribute>
> 
> </tag>
> 
> <tag>
> 
> <name>debug</name>
> 
> <tagclass>coreservlets.tags.DebugTag</tagclass>
> 
> <info>Includes body only if debug param is set.</info>
> 
> <!-- TOMCAT 3.1 DOES NOT SUPPORT BODYCONTENT
> 
> <bodycontent>JSP</bodycontent> -->
> 
> </tag>
> 
> <tag>
> 
> <name>filter</name>
> 
> <tagclass>coreservlets.tags.FilterTag</tagclass>
> 
> <info>Replaces HTML-specific characters in body.</info>
> 
> <!-- TOMCAT 3.1 DOES NOT SUPPORT BODYCONTENT
> 
> <bodycontent>JSP</bodycontent> -->
> 
> </tag>
> 
> <tag>
> 
> <name>repeat</name>
> 
> <tagclass>coreservlets.tags.RepeatTag</tagclass>
> 
> <info>Repeats body the specified number of times.</info>
> 
> <!-- TOMCAT 3.1 DOES NOT SUPPORT BODYCONTENT
> 
> <bodycontent>JSP</bodycontent> -->
> 
> <attribute>
> 
> <name>reps</name>
> 
> <required>true</required>
> 
> <!-- rtexprvalue indicates whether attribute
> 
> can be a JSP expression. -->
> 
> <rtexprvalue>true</rtexprvalue>
> 
> </attribute>
> 
> </tag>
> 
> <tag>
> 
> <name>if</name>
> 
> <tagclass>coreservlets.tags.IfTag</tagclass>
> 
> <info>if/condition/then/else tag.</info>
> 
> <!-- TOMCAT 3.1 DOES NOT SUPPORT BODYCONTENT
> 
> <bodycontent>JSP</bodycontent> -->
> 
> </tag>
> 
> <tag>
> 
> <name>condition</name>
> 
> <tagclass>coreservlets.tags.IfConditionTag</tagclass>
> 
> <info>condition part of if/condition/then/else tag.</info>
> 
> <!-- TOMCAT 3.1 DOES NOT SUPPORT BODYCONTENT
> 
> <bodycontent>JSP</bodycontent> -->
> 
> </tag>
> 
> <tag>
> 
> <name>then</name>
> 
> <tagclass>coreservlets.tags.IfThenTag</tagclass>
> 
> <info>then part of if/condition/then/else tag.</info>
> 
> <!-- TOMCAT 3.1 DOES NOT SUPPORT BODYCONTENT
> 
> <bodycontent>JSP</bodycontent> -->
> 
> </tag>
> 
> <tag>
> 
> <name>else</name>
> 
> <tagclass>coreservlets.tags.IfElseTag</tagclass>
> 
> <info>else part of if/condition/then/else tag.</info>
> 
> <!-- TOMCAT 3.1 DOES NOT SUPPORT BODYCONTENT
> 
> <bodycontent>JSP</bodycontent> -->
> 
> </tag>
> 
> </taglib>
> 
> 
> 
> ExampleTag.java
> 
> package coreservlets.tags;
> 
> import javax.servlet.jsp.*;
> 
> import javax.servlet.jsp.tagext.*;
> 
> import java.io.*;
> 
> /** Very simple JSP tag that just inserts a string
> 
> * ("Custom tag example...") into the output.
> 
> * The actual name of the tag is not defined here;
> 
> * that is given by the Tag Library Descriptor (TLD)
> 
> * file that is referenced by the taglib directive
> 
> * in the JSP file.
> 
> * <P>
> 
> * Taken from Core Servlets and JavaServer Pages
> 
> * from Prentice Hall and Sun Microsystems Press,
> 
> * http://www.coreservlets.com/.
> 
> * &copy; 2000 Marty Hall; may be freely used or adapted.
> 
> */
> 
> public class ExampleTag extends TagSupport {
> 
> public int doStartTag() {
> 
> try {
> 
> JspWriter out = pageContext.getOut();
> 
> out.print("Custom tag example " +
> 
> "(coreservlets.tags.ExampleTag)");
> 
> } catch(IOException ioe) {
> 
> System.out.println("Error in ExampleTag: " + ioe);
> 
> }
> 
> return(SKIP_BODY);
> 
> }
> 
> }