You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by pi...@locus.apache.org on 2000/10/04 07:11:02 UTC
cvs commit: jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/resources web-jsptaglib_1_2.dtd web_22.dtd web_23.dtd messages.properties messages_es.properties
pierred 00/10/03 22:11:00
Modified: jasper/src/share/org/apache/jasper Constants.java
jasper/src/share/org/apache/jasper/compiler
JspParseEventListener.java JspUtil.java
TagLibraryInfoImpl.java
jasper/src/share/org/apache/jasper/resources
messages.properties messages_es.properties
Added: jasper/src/share/org/apache/jasper/resources
web-jsptaglib_1_2.dtd web_22.dtd web_23.dtd
Log:
Validation errors on TLDs and web.xml were ignored because an
ErrorHandler was not used. This came up when trying to use
JAXP1.1EA whose default behavior is to throw exceptions both
for fatal errors and errors (other parsers fail silently
on errors if no ErrorHandler is setup).
Took the opportunity to cleanup how we handle the cached
DTDs, as well as try to provide meaningful error messages
as much as possible when exceptions are thrown.
Constants
- All versions of DTD's for taglibs and web deployment descriptors
are now properly supported.
compiler.JspUtil
- An ErrorHandler is now associated with the validating parser
so that errors are properly handled (and not ignored as they
were before).
- Unique copy of entity resolver may now be shared for all calls
to parseXmlDoc().
- EntityResolver now handles all cached DTD's for the various
versions of the deployment descriptor and the taglib descriptor.
- Improved messages for exceptions thrown
- Commented out the FIXME part which said that it should be
removed...
compiler.TagLibraryInfoImpl
- JspUtil:parseXmlDoc() now called with its new signature
- Improved messages for exceptions thrown
compiler.JspParseEventListener
- Do not re-wrap the exception thrown at lower levels. We lose the
root cause of the exception by doing that.
resources.messages.properties
resources.messages_es.properties
- New messages:
jsp.error.parse.xml
jsp.error.parse.xml.line
jsp.error.internal.filenotfound
jsp.error.parse.xml.invalidPublicId
removed file
- resources/web.dtd
new files
- resources/web_22.dtd
- resources/web_23.dtd
- resources/web-jsptaglib_1_2.dtd
Revision Changes Path
1.4 +39 -10 jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/Constants.java
Index: Constants.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/Constants.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- Constants.java 2000/09/19 19:40:49 1.3
+++ Constants.java 2000/10/04 05:10:45 1.4
@@ -154,20 +154,49 @@
public static final String JSP_TOKEN = "_jsp_";
/**
- * ID and location of the DTD for tag library descriptors.
+ * Public Id and the Resource path (of the cached copy)
+ * of the DTDs for tag library descriptors.
*/
- public static final String
- TAGLIB_DTD_PUBLIC_ID = "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN";
- public static final String
- TAGLIB_DTD_RESOURCE = "/org/apache/jasper/resources/web-jsptaglib_1_1.dtd";
+ public static final String TAGLIB_DTD_PUBLIC_ID_11 =
+ "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN";
+ public static final String TAGLIB_DTD_RESOURCE_PATH_11 =
+ "/org/apache/jasper/resources/web-jsptaglib_1_1.dtd";
+ public static final String TAGLIB_DTD_PUBLIC_ID_12 =
+ "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN";
+ public static final String TAGLIB_DTD_RESOURCE_PATH_12 =
+ "/org/apache/jasper/resources/web-jsptaglib_1_2.dtd";
/**
- * ID and location of the DTD for web-app deployment descriptors.
+ * Public Id and the Resource path (of the cached copy)
+ * of the DTDs for web application deployment descriptors
*/
- public static final String
- WEBAPP_DTD_PUBLIC_ID = "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN";
- public static final String
- WEBAPP_DTD_RESOURCE = "/org/apache/jasper/resources/web.dtd";
+ public static final String WEBAPP_DTD_PUBLIC_ID_22 =
+ "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN";
+ public static final String WEBAPP_DTD_RESOURCE_PATH_22 =
+ "/org/apache/jasper/resources/web_22.dtd";
+ public static final String WEBAPP_DTD_PUBLIC_ID_23 =
+ "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN";
+ public static final String WEBAPP_DTD_RESOURCE_PATH_23 =
+ "/org/apache/jasper/resources/web_23.dtd";
+
+ /**
+ * List of the Public IDs that we cache, and their
+ * associated location. This is used by
+ * an EntityResolver to return the location of the
+ * cached copy of a DTD.
+ */
+ public static final String[] CACHED_DTD_PUBLIC_IDS = {
+ TAGLIB_DTD_PUBLIC_ID_11,
+ TAGLIB_DTD_PUBLIC_ID_12,
+ WEBAPP_DTD_PUBLIC_ID_22,
+ WEBAPP_DTD_PUBLIC_ID_23,
+ };
+ public static final String[] CACHED_DTD_RESOURCE_PATHS = {
+ TAGLIB_DTD_RESOURCE_PATH_11,
+ TAGLIB_DTD_RESOURCE_PATH_12,
+ WEBAPP_DTD_RESOURCE_PATH_22,
+ WEBAPP_DTD_RESOURCE_PATH_23,
+ };
/**
* Default URLs to download the pluging for Netscape and IE.
1.3 +6 -13 jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/JspParseEventListener.java
Index: JspParseEventListener.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/JspParseEventListener.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- JspParseEventListener.java 2000/09/19 19:26:03 1.2
+++ JspParseEventListener.java 2000/10/04 05:10:50 1.3
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/JspParseEventListener.java,v 1.2 2000/09/19 19:26:03 pierred Exp $
- * $Revision: 1.2 $
- * $Date: 2000/09/19 19:26:03 $
+ * $Header: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/JspParseEventListener.java,v 1.3 2000/10/04 05:10:50 pierred Exp $
+ * $Revision: 1.3 $
+ * $Date: 2000/10/04 05:10:50 $
*
* ====================================================================
*
@@ -713,16 +713,9 @@
if (directive.equals("taglib")) {
String uri = (String) attrs.get("uri");
String prefix = (String) attrs.get("prefix");
- try {
- TagLibraryInfo tl = new TagLibraryInfoImpl(ctxt,
- prefix,
- uri);
- libraries.addTagLibrary(prefix, tl);
- } catch (Exception ex) {
- Object[] args = new Object[] { uri, ex.getMessage() };
- throw new CompileException(start, Constants.getString("jsp.error.badtaglib",
- args));
- }
+ TagLibraryInfo tl =
+ new TagLibraryInfoImpl(ctxt, prefix, uri);
+ libraries.addTagLibrary(prefix, tl);
}
if (directive.equals("include")) {
1.4 +84 -63 jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/JspUtil.java
Index: JspUtil.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/JspUtil.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- JspUtil.java 2000/09/29 06:06:38 1.3
+++ JspUtil.java 2000/10/04 05:10:50 1.4
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/JspUtil.java,v 1.3 2000/09/29 06:06:38 shemnon Exp $
- * $Revision: 1.3 $
- * $Date: 2000/09/29 06:06:38 $
+ * $Header: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/JspUtil.java,v 1.4 2000/10/04 05:10:50 pierred Exp $
+ * $Revision: 1.4 $
+ * $Date: 2000/10/04 05:10:50 $
*
* ====================================================================
*
@@ -78,7 +78,9 @@
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.EntityResolver;
+import org.xml.sax.ErrorHandler;
import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
import org.xml.sax.InputSource;
/**
@@ -93,6 +95,9 @@
private static final String OPEN_EXPR = "<%=";
private static final String CLOSE_EXPR = "%>";
+ private static ErrorHandler errorHandler = new MyErrorHandler();
+ private static EntityResolver entityResolver = new MyEntityResolver();
+
public static char[] removeQuotes(char []chars) {
CharArrayWriter caw = new CharArrayWriter();
for (int i = 0; i < chars.length; i++) {
@@ -148,53 +153,53 @@
return returnString;
}
- // Parses the XML document contained in the InputStream.
- public static Document parseXMLDoc(InputStream in, String dtdResource,
- String dtdId) throws JasperException
+ /**
+ * Parses the XML document contained in the InputStream.
+ */
+ public static Document parseXMLDoc(String uri, InputStream in)
+ throws JasperException
{
- return parseXMLDocJaxp(in, dtdResource, dtdId );
+ return parseXMLDocJaxp(uri, in);
}
- // Parses the XML document contained in the InputStream.
- public static Document parseXMLDocJaxp(InputStream in, String dtdResource,
- String dtdId)
+ /**
+ * Parses the XML document contained in the InputStream.
+ * This XML document is either web.xml or a tld.
+ * [The TLD has to be cached internally (see MyEntityResolver)]
+ */
+ public static Document parseXMLDocJaxp(String uri, InputStream in)
throws JasperException
{
try {
- Document tld;
- DocumentBuilderFactory docFactory = DocumentBuilderFactory.
- newInstance();
+ Document doc;
+ DocumentBuilderFactory docFactory =
+ DocumentBuilderFactory.newInstance();
docFactory.setValidating(true);
docFactory.setNamespaceAware(true);
DocumentBuilder builder = docFactory.newDocumentBuilder();
-
- /***
- * These lines make sure that we have an internal catalog entry for
- * the taglib.dtdfile; this is so that jasper can run standalone
- * without running out to the net to pick up the taglib.dtd file.
- */
- MyEntityResolver resolver =
- new MyEntityResolver(dtdId, dtdResource);
- builder.setEntityResolver(resolver);
- tld = builder.parse(in);
- return tld;
- } catch( ParserConfigurationException ex ) {
- throw new JasperException(Constants.
- getString("jsp.error.parse.error.in.TLD",
- new Object[] {
- ex.getMessage()
- }));
- } catch ( SAXException sx ) {
- throw new JasperException(Constants.
- getString("jsp.error.parse.error.in.TLD",
- new Object[] {
- sx.getMessage()
- }));
+ builder.setEntityResolver(entityResolver);
+ builder.setErrorHandler(errorHandler);
+ doc = builder.parse(in);
+ return doc;
+ } catch (ParserConfigurationException ex) {
+ throw new JasperException(
+ Constants.getString("jsp.error.parse.xml",
+ new Object[]{uri, ex.getMessage()}));
+ } catch (SAXParseException ex) {
+ throw new JasperException(
+ Constants.getString("jsp.error.parse.xml.line",
+ new Object[]{uri,
+ new Integer(ex.getLineNumber()),
+ new Integer(ex.getColumnNumber()),
+ ex.getMessage()}));
+ } catch (SAXException sx) {
+ throw new JasperException(
+ Constants.getString("jsp.error.parse.xml",
+ new Object[]{uri, sx.getMessage()}));
} catch (IOException io) {
- throw new JasperException(Constants.
- getString("jsp.error.unable.to.open.TLD",
- new Object[] {
- io.getMessage() }));
+ throw new JasperException(
+ Constants.getString("jsp.error.parse.xml",
+ new Object[]{uri, io.toString()}));
}
}
@@ -322,32 +327,48 @@
}
class MyEntityResolver implements EntityResolver {
-
- String dtdId;
- String dtdResource;
-
- public MyEntityResolver(String id, String resource) {
- this.dtdId = id;
- this.dtdResource = resource;
- }
-
public InputSource resolveEntity(String publicId, String systemId)
- throws SAXException, IOException
+ throws SAXException
{
- //System.out.println ("publicId = " + publicId);
- //System.out.println ("systemId is " + systemId);
- //System.out.println ("resource is " + dtdResource);
- if (publicId.equals(dtdId)) {
- InputStream input =
- this.getClass().getResourceAsStream(dtdResource);
- InputSource isrc =
- new InputSource(input);
- return isrc;
- }
- else {
- //System.out.println ("returning null though dtdURL is " + dtdURL);
- return null;
+ for (int i=0; i<Constants.CACHED_DTD_PUBLIC_IDS.length; i++) {
+ String cachedDtdPublicId = Constants.CACHED_DTD_PUBLIC_IDS[i];
+ if (cachedDtdPublicId.equals(publicId)) {
+ String resourcePath = Constants.CACHED_DTD_RESOURCE_PATHS[i];
+ InputStream input =
+ this.getClass().getResourceAsStream(resourcePath);
+ if (input == null) {
+ throw new SAXException(
+ Constants.getString("jsp.error.internal.filenotfound",
+ new Object[]{resourcePath}));
+ }
+ InputSource isrc =
+ new InputSource(input);
+ return isrc;
+ }
}
+ throw new SAXException(
+ Constants.getString("jsp.error.parse.xml.invalidPublicId",
+ new Object[]{publicId}));
+ }
+}
+
+class MyErrorHandler implements ErrorHandler {
+ public void warning(SAXParseException ex)
+ throws SAXException
+ {
+ // We ignore warnings
+ }
+
+ public void error(SAXParseException ex)
+ throws SAXException
+ {
+ throw ex;
+ }
+
+ public void fatalError(SAXParseException ex)
+ throws SAXException
+ {
+ throw ex;
}
}
1.3 +39 -36 jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/TagLibraryInfoImpl.java
Index: TagLibraryInfoImpl.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/TagLibraryInfoImpl.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- TagLibraryInfoImpl.java 2000/09/19 19:28:51 1.2
+++ TagLibraryInfoImpl.java 2000/10/04 05:10:51 1.3
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/TagLibraryInfoImpl.java,v 1.2 2000/09/19 19:28:51 pierred Exp $
- * $Revision: 1.2 $
- * $Date: 2000/09/19 19:28:51 $
+ * $Header: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/TagLibraryInfoImpl.java,v 1.3 2000/10/04 05:10:51 pierred Exp $
+ * $Revision: 1.3 $
+ * $Date: 2000/10/04 05:10:51 $
*
* The Apache Software License, Version 1.1
*
@@ -100,8 +100,8 @@
* @author Pierre Delisle
*/
public class TagLibraryInfoImpl extends TagLibraryInfo {
- static private final String TLD = "META-INF/taglib.tld";
- static private final String WEBAPP_INF = "/WEB-INF/web.xml";
+ static private final String TAGLIB_TLD = "META-INF/taglib.tld";
+ static private final String WEB_XML = "/WEB-INF/web.xml";
Document tld;
@@ -154,7 +154,7 @@
}
public TagLibraryInfoImpl(JspCompilationContext ctxt, String prefix, String uriIn)
- throws IOException, JasperException
+ throws JasperException
{
super(prefix, uriIn);
@@ -166,13 +166,17 @@
this.uri = uriIn;
// Parse web.xml.
- InputStream is = getResourceAsStream(WEBAPP_INF);
-
+ InputStream is;
+ try {
+ is = getResourceAsStream(WEB_XML);
+ } catch (FileNotFoundException ex) {
+ throw new JasperException(
+ Constants.getString("jsp.error.internal.file.not.found",
+ new Object[]{WEB_XML}));
+ }
if (is != null) {
Document webtld =
- JspUtil.parseXMLDoc(is,
- Constants.WEBAPP_DTD_RESOURCE,
- Constants.WEBAPP_DTD_PUBLIC_ID);
+ JspUtil.parseXMLDoc(WEB_XML, is);
NodeList nList = webtld.getElementsByTagName("taglib");
if (nList.getLength() != 0) {
@@ -227,16 +231,20 @@
if (!uri.endsWith("jar")) {
- in = getResourceAsStream(uri);
-
- if (in == null)
- throw new JasperException(Constants.getString("jsp.error.tld_not_found",
- new Object[] {TLD}));
+ try {
+ in = getResourceAsStream(uri);
+ if (in == null) throw new FileNotFoundException(uri);
+ } catch (FileNotFoundException ex) {
+ throw new JasperException(
+ Constants.getString("jsp.error.file.not.found",
+ new Object[] {uri}));
+ }
// Now parse the tld.
- parseTLD(in);
+ parseTLD(uri, in);
}
// FIXME Take this stuff out when taglib changes are thoroughly tested.
+ /* @@@ taking it out... hopefully the sky won't fall -pierred
if (uri.endsWith("jar")) {
if (!isRelativeURI(uri)) {
@@ -286,13 +294,11 @@
boolean tldFound = false;
ZipEntry entry;
while ((entry = zin.getNextEntry()) != null) {
- if (entry.getName().equals(TLD)) {
- /*******
- * This hack is necessary because XML reads until the end
- * of an inputstream -- does not use available()
- * -- and closes the inputstream when it can't
- * read no more.
- */
+ if (entry.getName().equals(TAGLIB_TLD)) {
+ // This hack is necessary because XML reads until the end
+ // of an inputstream -- does not use available()
+ // -- and closes the inputstream when it can't
+ // read no more.
// BEGIN HACK
ByteArrayOutputStream baos = new ByteArrayOutputStream();
@@ -309,7 +315,7 @@
= new ByteArrayInputStream(baos.toByteArray());
// END HACK
tldFound = true;
- parseTLD(bais);
+ parseTLD(TAGLIB_TLD, bais);
} else {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int b;
@@ -325,13 +331,13 @@
zin.closeEntry();
}
- if (!tldFound)
- throw new JasperException(Constants.getString("jsp.error.tld_not_found",
- new Object[] {
- TLD
- }
- ));
+ if (!tldFound) {
+ throw new JasperException(
+ Constants.getString("jsp.error.tld_not_found",
+ new Object[] {TAGLIB_TLD}));
+ }
} // Take this out (END of if(endsWith("jar")))
+ */
}
/** Returns true if the given URI is relative in this web application, false if it is an internet URI.
@@ -341,14 +347,11 @@
}
- private void parseTLD(InputStream in)
+ private void parseTLD(String uri, InputStream in)
throws JasperException
{
String validatorclass = null;
- tld = JspUtil.parseXMLDoc(in,
- Constants.TAGLIB_DTD_RESOURCE,
- Constants.TAGLIB_DTD_PUBLIC_ID);
-
+ tld = JspUtil.parseXMLDoc(uri, in);
Vector tagVector = new Vector();
NodeList list = tld.getElementsByTagName("taglib");
1.4 +6 -2 jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/resources/messages.properties
Index: messages.properties
===================================================================
RCS file: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/resources/messages.properties,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- messages.properties 2000/09/27 17:15:42 1.3
+++ messages.properties 2000/10/04 05:10:56 1.4
@@ -1,4 +1,4 @@
-# $Id: messages.properties,v 1.3 2000/09/27 17:15:42 pierred Exp $
+# $Id: messages.properties,v 1.4 2000/10/04 05:10:56 pierred Exp $
#
# Default localized string information
# Localized this the Default Locale as is en_US
@@ -123,7 +123,7 @@
jsp.error.parse.error.in.TLD=Parse Error in the tag library descriptor: {0}
jsp.error.unable.to.open.TLD=Unable to open the tag library descriptor: {0}
jsp.buffer.size.zero=Buffer size <= 0
-jsp.error.file.not.found=JSP file \"{0}\" not found
+jsp.error.file.not.found=File \"{0}\" not found
jsp.message.copyinguri=Copying {0} into {1}
jsp.message.htmlcomment=\nStripping Comment: \t{0}
jsp.message.handling_directive=\nHandling Directive: {0}\t{1}
@@ -218,3 +218,7 @@
jsp.parser.sax.featurenotrecognized=SAX feature not recognized: {0}
jsp.error.no.more.content=End of content reached while more parsing required: tag nesting error?
jsp.error.incorrect.nesting=Incorrect nesting involving {0}
+jsp.error.parse.xml=XML parsing error on file {0}: {1}
+jsp.error.parse.xml.line=XML parsing error on file {0}: (line {1}, col {2}): {3}
+jsp.error.internal.filenotfound=Internal Error: File {0} not found
+jsp.error.parse.xml.invalidPublicId=Invalid PUBLIC ID: {0}
1.4 +5 -1 jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/resources/messages_es.properties
Index: messages_es.properties
===================================================================
RCS file: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/resources/messages_es.properties,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- messages_es.properties 2000/09/27 17:15:42 1.3
+++ messages_es.properties 2000/10/04 05:10:58 1.4
@@ -1,4 +1,4 @@
-# $Id: messages_es.properties,v 1.3 2000/09/27 17:15:42 pierred Exp $
+# $Id: messages_es.properties,v 1.4 2000/10/04 05:10:58 pierred Exp $
#
# Default localized string information
# Localized para Locale es_ES
@@ -209,3 +209,7 @@
jsp.parser.sax.featurenotrecognized=
jsp.error.no.more.content=
jsp.error.incorrect.nesting=
+jsp.error.parse.xml=
+jsp.error.parse.xml.line=
+jsp.error.internal.filenotfound=
+jsp.error.parse.xml.invalidPublicId=
1.1 jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/resources/web-jsptaglib_1_2.dtd
Index: web-jsptaglib_1_2.dtd
===================================================================
<!-- TEMPORARY DTD FOR THE JSP 1.2 TAG LIBRARY DESCRIPTOR.
THIS WILL BE REPLACED BY THE OFFICIAL ONE WHEN IT IT
POSTED. -->
<!--
This is the DTD defining the JavaServer Pages 1.2 Tag Library
descriptor (.tld) (XML) file format/syntax.
A Tag Library is a JAR file containing a valid instance of a Tag Library
Descriptor (taglib.tld) file in the META-INF subdirectory, along with the
appropriate implementing classes, and other resources required to
implement the tags defined therein.
-->
<!NOTATION WEB-JSPTAGLIB.1_2 PUBLIC
"-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN">
<!--
The taglib tag is the document root, it defines:
tlibversion the version of the tag library implementation
jspversion the version of JSP the tag library depends upon
shortname a simple default short name that could be used by
a JSP authoring tool to create names with a mnemonic
value; for example, the it may be used as the prefered
prefix value in taglib directives
uri a uri uniquely identifying this taglib
display-name the display-name element contains a short name that
is intended to be displayed by tools
small-icon optional small-icon that can be used by tools
large-icon optional large-icon that can be used by tools
info a simple string describing the "use" of this taglib,
should be user discernable
validatorclass optional TagLibraryValidator class
listener optional event listener specification
-->
<!ELEMENT taglib (tlibversion, jspversion?, shortname, uri?,
display-name?, small-icon?, large-icon?, info?,
validatorclass?, listener*, tag+) >
<!ATTLIST taglib id ID #IMPLIED
xmlns CDATA #FIXED "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_2.dtd"
>
<!--
Describes this version (number) of the taglibrary (dewey decimal)
#PCDATA ::= [0-9]*{ "."[0-9] }0..3
-->
<!ELEMENT tlibversion (#PCDATA) >
<!--
Describes the JSP version (number) this taglibrary requires in order to function (dewey decimal)
The default is 1.2
#PCDATA ::= [0-9]*{ "."[0-9] }0..3
-->
<!ELEMENT jspversion (#PCDATA) >
<!--
Defines a short (default) shortname to be used for tags and variable names used/created by this tag library.
Do not use white space, and do not start with digits or underscore.
#PCDATA ::= NMTOKEN
-->
<!ELEMENT shortname (#PCDATA) >
<!--
Defines a public URI that uniquely identifies this version of the
tag library. It is recommended that the URI identifying a tag library
is actually a URL to the tag library descriptor for this specific
version of the tag library.
-->
<!ELEMENT uri (#PCDATA) >
<!--
Defines an arbitrary text string descirbing the tag library
-->
<!ELEMENT info (#PCDATA) >
<!--
Defines an optional TagLibraryValidator class that can be used to
validate the conformance of a JSP page to using this tag library.
-->
<!ELEMENT validatorclass (#PCDATA) >
<!--
Defines an optional event listener object to be instantiated and
registered automatically.
-->
<!ELEMENT listener (listener-class) >
<!--
The listener-class element declares a class in the application that
must be registered as a web application listener bean. See the
Servlet 2.3 specification for details.
-->
<!ELEMENT listener-class (#PCDATA) >
<!--
The tag defines a unique tag in this tag library. It has one
attribute, id.
The tag element may have several subelements defining:
name The unique action name
tagclass The tag handler class implementing
javax.servlet.jsp.tagext.Tag
teiclass An optional subclass of
javax.servlet.jsp.tagext.TagExtraInfo
bodycontent The body content type
display-name A short name that is intended to be displayed
by tools
small-icon Optional small-icon that can be used by tools
large-icon Optional large-icon that can be used by tools
info Optional tag-specific information
variable Optional scripting variable information
attribute All attributes of this action
-->
<!ELEMENT tag (name, tagclass, teiclass?, bodycontent?, display-name?,
small-icon?, large-icon?, info?, variable*, attribute*) >
<!ATTLIST tag id ID #IMPLIED >
<!--
Defines the subclass of javax.serlvet.jsp.tagext.Tag that implements
the request time semantics for this tag. (required)
#PCDATA ::= fully qualified Java class name
-->
<!ELEMENT tagclass (#PCDATA) >
<!--
Defines the subclass of javax.servlet.jsp.tagext.TagExtraInfo for
this tag. (optional)
The default is javax.servlet.jsp.tagext.TagExtraInfo
#PCDATA ::= fully qualified Java class name
-->
<!ELEMENT teiclass (#PCDATA) >
<!--
Provides a hint as to the content of the body of this tag. Primarily
intended for use by page composition tools.
There are currently three values specified:
tagdependent The body of the tag is interpreted by the tag
implementation itself, and is most likely in a
different "langage", e.g embedded SQL statements.
JSP The body of the tag contains nested JSP syntax
empty The body must be empty
The default (if not defined) is JSP
#PCDATA ::= tagdependent | JSP | empty
-->
<!ELEMENT bodycontent (#PCDATA) >
<!--
The display-name element contains a short name that is intended
to be displayed by tools.
-->
<!ELEMENT display-name (#PCDATA) >
<!--
The large-icon element contains the name of a file containing a large
(32 x 32) icon image. The file name is a relative path within the
tag library. The image must be either in the JPEG or GIF format, and
the file name must end with the suffix ".jpg" or ".gif" respectively.
The icon can be used by tools.
-->
<!ELEMENT large-icon (#PCDATA) >
<!--
The small-icon element contains the name of a file containing a large
(32 x 32) icon image. The file name is a relative path within the
tag library. The image must be either in the JPEG or GIF format, and
the file name must end with the suffix ".jpg" or ".gif" respectively.
The icon can be used by tools.
-->
<!ELEMENT small-icon (#PCDATA) >
<!--
The variable tag provides information on the scripting variables
defined by this tag. It is a (translation time) error for a tag
that has one or more variable subelements to have a TagExtraInfo
class that returns a non-null object.
The subelements of variable are of the form:
name-given The variable name as a constant
name-from-attribute The name of an attribute whose (translation
time) value will give the name of the
variable. One of name-given or
name-from-attribute is required.
class Name of the class of the variable.
java.lang.String is default.
declare Whether the variable is declared or not.
True is the default.
scope The scope of the scripting varaible
defined. NESTED is default.
-->
<!ELEMENT variable ( (name-given | name-from-attribute), class?,
declare?, scope?) >
<!--
The name for the scripting variable. One of name-given or
name-from-attribute is required.
-->
<!ELEMENT name-given (#PCDATA) >
<!--
The name of an attribute whose (translation-time) value will give
the name of the variable. One of name-given or name-from-attribute
is required.
-->
<!ELEMENT name-from-attribute (#PCDATA) >
<!--
The optional name of the class for the scripting variable. The
default is java.lang.String.
-->
<!ELEMENT class (#PCDATA) >
<!--
Whether the scripting variable is to be defined or not. See
TagExtraInfo for details. This element is optional and "true"
is the default.
-->
<!ELEMENT declare (#PCDATA) >
<!--
The scope of the scripting variable. See TagExtraInfo for details.
The element is optional and "NESTED" is the default. Other legal
values are "AT_BEGIN" and "AT_END".
-->
<!ELEMENT scope (#PCDATA) >
<!--
The attribute tag defines an attribute for the nesting tag
An attribute definition is composed of:
- the attributes name (required)
- if the attribute is required or optional (optional)
- if the attributes value may be dynamically calculated at runtime
by a scriptlet expression (optional)
- the type of the attributes value (optional)
-->
<!ELEMENT attribute (name, required? , rtexprvalue?, type?) >
<!ATTLIST attribute id ID #IMPLIED>
<!--
Defines the canonical name of a tag or attribute being defined
#PCDATA ::= NMTOKEN
-->
<!ELEMENT name (#PCDATA) >
<!--
Defines if the nesting attribute is required or optional.
#PCDATA ::= true | false | yes | no
If not present then the default is "false", i.e the attribute is optional
-->
<!ELEMENT required (#PCDATA) >
<!--
Defines if the nesting attribute can have scriptlet expressions as
a value, i.e the value of the attribute may be dynamically calculated
at request time, as opposed to a static value determined at translation
time.
#PCDATA ::= true | false | yes | no
If not present then the default is "false", i.e the attribute has a static value
-->
<!ELEMENT rtexprvalue (#PCDATA) >
<!--
Defines the Java type of the attributes value. For static values
(those determined at translation time) the type is always
java.lang.String.
-->
<!ELEMENT type (#PCDATA) >
1.1 jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/resources/web_22.dtd
Index: web_22.dtd
===================================================================
<?xml version="1.0" encoding="ISO-8859-1"?>
<!--
The web-app element is the root of the deployment descriptor for
a web application
-->
<!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*)>
<!--
The icon element contains a small-icon and a large-icon element
which specify the location within the web application for a small and
large image used to represent the web application in a GUI tool. At a
minimum, tools must accept GIF and JPEG format images.
-->
<!ELEMENT icon (small-icon?, large-icon?)>
<!--
The small-icon element contains the location within the web
application of a file containing a small (16x16 pixel) icon image.
-->
<!ELEMENT small-icon (#PCDATA)>
<!--
The large-icon element contains the location within the web
application of a file containing a large (32x32 pixel) icon image.
-->
<!ELEMENT large-icon (#PCDATA)>
<!--
The display-name element contains a short name that is intended
to be displayed by GUI tools
-->
<!ELEMENT display-name (#PCDATA)>
<!--
The description element is used to provide descriptive text about
the parent element.
-->
<!ELEMENT description (#PCDATA)>
<!--
The distributable element, by its presence in a web application
deployment descriptor, indicates that this web application is
programmed appropriately to be deployed into a distributed servlet
container
-->
<!ELEMENT distributable EMPTY>
<!--
The context-param element contains the declaration of a web
application's servlet context initialization parameters.
-->
<!ELEMENT context-param (param-name, param-value, description?)>
<!--
The param-name element contains the name of a parameter.
-->
<!ELEMENT param-name (#PCDATA)>
<!--
The param-value element contains the value of a parameter.
-->
<!ELEMENT param-value (#PCDATA)>
<!--
The servlet element contains the declarative data of a
servlet. If a jsp-file is specified and the load-on-startup element is
present, then the JSP should be precompiled and loaded.
-->
<!ELEMENT servlet (icon?, servlet-name, display-name?, description?,
(servlet-class|jsp-file), init-param*, load-on-startup?, security-role-ref*)>
<!--
The servlet-name element contains the canonical name of the
servlet.
-->
<!ELEMENT servlet-name (#PCDATA)>
<!--
The servlet-class element contains the fully qualified class name
of the servlet.
-->
<!ELEMENT servlet-class (#PCDATA)>
<!--
The jsp-file element contains the full path to a JSP file within
the web application.
-->
<!ELEMENT jsp-file (#PCDATA)>
<!--
The init-param element contains a name/value pair as an
initialization param of the servlet
-->
<!ELEMENT init-param (param-name, param-value, description?)>
<!--
The load-on-startup element indicates that this servlet should be
loaded on the startup of the web application. The optional contents of
these element must be a positive integer indicating the order in which
the servlet should be loaded. Lower integers are loaded before higher
integers. If no value is specified, or if the value specified is not a
positive integer, the container is free to load it at any time in the
startup sequence.
-->
<!ELEMENT load-on-startup (#PCDATA)>
<!--
The servlet-mapping element defines a mapping between a servlet
and a url pattern
-->
<!ELEMENT servlet-mapping (servlet-name, url-pattern)>
<!--
The url-pattern element contains the url pattern of the
mapping. Must follow the rules specified in Section 10 of the Servlet
API Specification.
-->
<!ELEMENT url-pattern (#PCDATA)>
<!--
The session-config element defines the session parameters for
this web application.
-->
<!ELEMENT session-config (session-timeout?)>
<!--
The session-timeout element defines the default session timeout
interval for all sessions created in this web application. The
specified timeout must be expressed in a whole number of minutes.
-->
<!ELEMENT session-timeout (#PCDATA)>
<!--
The mime-mapping element defines a mapping between an extension
and a mime type.
-->
<!ELEMENT mime-mapping (extension, mime-type)>
<!--
The extension element contains a string describing an
extension. example: "txt"
-->
<!ELEMENT extension (#PCDATA)>
<!--
The mime-type element contains a defined mime type. example:
"text/plain"
-->
<!ELEMENT mime-type (#PCDATA)>
<!--
The welcome-file-list contains an ordered list of welcome files
elements.
-->
<!ELEMENT welcome-file-list (welcome-file+)>
<!--
The welcome-file element contains file name to use as a default
welcome file, such as index.html
-->
<!ELEMENT welcome-file (#PCDATA)>
<!--
The taglib element is used to describe a JSP tag library.
-->
<!ELEMENT taglib (taglib-uri, taglib-location)>
<!--
The taglib-uri element describes a URI, relative to the location
of the web.xml document, identifying a Tag Library used in the Web
Application.
-->
<!ELEMENT taglib-uri (#PCDATA)>
<!--
the taglib-location element contains the location (as a resource
relative to the root of the web application) where to find the Tag
Libary Description file for the tag library.
-->
<!ELEMENT taglib-location (#PCDATA)>
<!--
The error-page element contains a mapping between an error code
or exception type to the path of a resource in the web application
-->
<!ELEMENT error-page ((error-code | exception-type), location)>
<!--
The error-code contains an HTTP error code, ex: 404
-->
<!ELEMENT error-code (#PCDATA)>
<!--
The exception type contains a fully qualified class name of a
Java exception type.
-->
<!ELEMENT exception-type (#PCDATA)>
<!--
The location element contains the location of the resource in the
web application
-->
<!ELEMENT location (#PCDATA)>
<!--
The resource-ref element contains a declaration of a Web
Application's reference to an external resource.
-->
<!ELEMENT resource-ref (description?, res-ref-name, res-type, res-auth)>
<!--
The res-ref-name element specifies the name of the resource
factory reference name.
-->
<!ELEMENT res-ref-name (#PCDATA)>
<!--
The res-type element specifies the (Java class) type of the data
source.
-->
<!ELEMENT res-type (#PCDATA)>
<!--
The res-auth element indicates whether the application component
code performs resource signon programmatically or whether the
container signs onto the resource based on the principle mapping
information supplied by the deployer. Must be CONTAINER or SERVLET
-->
<!ELEMENT res-auth (#PCDATA)>
<!--
The security-constraint element is used to associate security
constraints with one or more web resource collections
-->
<!ELEMENT security-constraint (web-resource-collection+,
auth-constraint?, user-data-constraint?)>
<!--
The web-resource-collection element is used to identify a subset
of the resources and HTTP methods on those resources within a web
application to which a security constraint applies. If no HTTP methods
are specified, then the security constraint applies to all HTTP
methods.
-->
<!ELEMENT web-resource-collection (web-resource-name, description?,
url-pattern*, http-method*)>
<!--
The web-resource-name contains the name of this web resource
collection
-->
<!ELEMENT web-resource-name (#PCDATA)>
<!--
The http-method contains an HTTP method (GET | POST |...)
-->
<!ELEMENT http-method (#PCDATA)>
<!--
The user-data-constraint element is used to indicate how data
communicated between the client and container should be protected
-->
<!ELEMENT user-data-constraint (description?, transport-guarantee)>
<!--
The transport-guarantee element specifies that the communication
between client and server should be NONE, INTEGRAL, or
CONFIDENTIAL. NONE means that the application does not require any
transport guarantees. A value of INTEGRAL means that the application
requires that the data sent between the client and server be sent in
such a way that it can't be changed in transit. CONFIDENTIAL means
that the application requires that the data be transmitted in a
fashion that prevents other entities from observing the contents of
the transmission. In most cases, the presence of the INTEGRAL or
CONFIDENTIAL flag will indicate that the use of SSL is required.
-->
<!ELEMENT transport-guarantee (#PCDATA)>
<!--
The auth-constraint element indicates the user roles that should
be permitted access to this resource collection. The role used here
must appear in a security-role-ref element.
-->
<!ELEMENT auth-constraint (description?, role-name*)>
<!--
The role-name element contains the name of a security role.
-->
<!ELEMENT role-name (#PCDATA)>
<!--
The login-config element is used to configure the authentication
method that should be used, the realm name that should be used for
this application, and the attributes that are needed by the form login
mechanism.
-->
<!ELEMENT login-config (auth-method?, realm-name?, form-login-config?)>
<!--
The realm name element specifies the realm name to use in HTTP
Basic authorization
-->
<!ELEMENT realm-name (#PCDATA)>
<!--
The form-login-config element specifies the login and error pages
that should be used in form based login. If form based authentication
is not used, these elements are ignored.
-->
<!ELEMENT form-login-config (form-login-page, form-error-page)>
<!--
The form-login-page element defines the location in the web app
where the page that can be used for login can be found
-->
<!ELEMENT form-login-page (#PCDATA)>
<!--
The form-error-page element defines the location in the web app
where the error page that is displayed when login is not successful
can be found
-->
<!ELEMENT form-error-page (#PCDATA)>
<!--
The auth-method element is used to configure the authentication
mechanism for the web application. As a prerequisite to gaining access
to any web resources which are protected by an authorization
constraint, a user must have authenticated using the configured
mechanism. Legal values for this element are "BASIC", "DIGEST",
"FORM", or "CLIENT-CERT".
-->
<!ELEMENT auth-method (#PCDATA)>
<!--
The security-role element contains the declaration of a security
role which is used in the security-constraints placed on the web
application.
-->
<!ELEMENT security-role (description?, role-name)>
<!--
The role-name element contains the name of a role. This element
must contain a non-empty string.
-->
<!ELEMENT security-role-ref (description?, role-name, role-link)>
<!--
The role-link element is used to link a security role reference
to a defined security role. The role-link element must contain the
name of one of the security roles defined in the security-role
elements.
-->
<!ELEMENT role-link (#PCDATA)>
<!--
The env-entry element contains the declaration of an
application's environment entry. This element is required to be
honored on in J2EE compliant servlet containers.
-->
<!ELEMENT env-entry (description?, env-entry-name, env-entry-value?,
env-entry-type)>
<!--
The env-entry-name contains the name of an application's
environment entry
-->
<!ELEMENT env-entry-name (#PCDATA)>
<!--
The env-entry-value element contains the value of an
application's environment entry
-->
<!ELEMENT env-entry-value (#PCDATA)>
<!--
The env-entry-type element contains the fully qualified Java type
of the environment entry value that is expected by the application
code. The following are the legal values of env-entry-type:
java.lang.Boolean, java.lang.String, java.lang.Integer,
java.lang.Double, java.lang.Float.
-->
<!ELEMENT env-entry-type (#PCDATA)>
<!--
The ejb-ref element is used to declare a reference to an
enterprise bean.
-->
<!ELEMENT ejb-ref (description?, ejb-ref-name, ejb-ref-type, home, remote,
ejb-link?)>
<!--
The ejb-ref-name element contains the name of an EJB
reference. This is the JNDI name that the servlet code uses to get a
reference to the enterprise bean.
-->
<!ELEMENT ejb-ref-name (#PCDATA)>
<!--
The ejb-ref-type element contains the expected java class type of
the referenced EJB.
-->
<!ELEMENT ejb-ref-type (#PCDATA)>
<!--
The ejb-home element contains the fully qualified name of the
EJB's home interface
-->
<!ELEMENT home (#PCDATA)>
<!--
The ejb-remote element contains the fully qualified name of the
EJB's remote interface
-->
<!ELEMENT remote (#PCDATA)>
<!--
The ejb-link element is used in the ejb-ref element to specify
that an EJB reference is linked to an EJB in an encompassing Java2
Enterprise Edition (J2EE) application package. The value of the
ejb-link element must be the ejb-name of and EJB in the J2EE
application package.
-->
<!ELEMENT ejb-link (#PCDATA)>
<!--
The ID mechanism is to allow tools to easily make tool-specific
references to the elements of the deployment descriptor. This allows
tools that produce additional deployment information (i.e information
beyond the standard deployment descriptor information) to store the
non-standard information in a separate file, and easily refer from
these tools-specific files to the information in the standard web-app
deployment descriptor.
-->
<!ATTLIST web-app id ID #IMPLIED>
<!ATTLIST icon id ID #IMPLIED>
<!ATTLIST small-icon id ID #IMPLIED>
<!ATTLIST large-icon id ID #IMPLIED>
<!ATTLIST display-name id ID #IMPLIED>
<!ATTLIST description id ID #IMPLIED>
<!ATTLIST distributable id ID #IMPLIED>
<!ATTLIST context-param id ID #IMPLIED>
<!ATTLIST param-name id ID #IMPLIED>
<!ATTLIST param-value id ID #IMPLIED>
<!ATTLIST servlet id ID #IMPLIED>
<!ATTLIST servlet-name id ID #IMPLIED>
<!ATTLIST servlet-class id ID #IMPLIED>
<!ATTLIST jsp-file id ID #IMPLIED>
<!ATTLIST init-param id ID #IMPLIED>
<!ATTLIST load-on-startup id ID #IMPLIED>
<!ATTLIST servlet-mapping id ID #IMPLIED>
<!ATTLIST url-pattern id ID #IMPLIED>
<!ATTLIST session-config id ID #IMPLIED>
<!ATTLIST session-timeout id ID #IMPLIED>
<!ATTLIST mime-mapping id ID #IMPLIED>
<!ATTLIST extension id ID #IMPLIED>
<!ATTLIST mime-type id ID #IMPLIED>
<!ATTLIST welcome-file-list id ID #IMPLIED>
<!ATTLIST welcome-file id ID #IMPLIED>
<!ATTLIST taglib id ID #IMPLIED>
<!ATTLIST taglib-uri id ID #IMPLIED>
<!ATTLIST taglib-location id ID #IMPLIED>
<!ATTLIST error-page id ID #IMPLIED>
<!ATTLIST error-code id ID #IMPLIED>
<!ATTLIST exception-type id ID #IMPLIED>
<!ATTLIST location id ID #IMPLIED>
<!ATTLIST resource-ref id ID #IMPLIED>
<!ATTLIST res-ref-name id ID #IMPLIED>
<!ATTLIST res-type id ID #IMPLIED>
<!ATTLIST res-auth id ID #IMPLIED>
<!ATTLIST security-constraint id ID #IMPLIED>
<!ATTLIST web-resource-collection id ID #IMPLIED>
<!ATTLIST web-resource-name id ID #IMPLIED>
<!ATTLIST http-method id ID #IMPLIED>
<!ATTLIST user-data-constraint id ID #IMPLIED>
<!ATTLIST transport-guarantee id ID #IMPLIED>
<!ATTLIST auth-constraint id ID #IMPLIED>
<!ATTLIST role-name id ID #IMPLIED>
<!ATTLIST login-config id ID #IMPLIED>
<!ATTLIST realm-name id ID #IMPLIED>
<!ATTLIST form-login-config id ID #IMPLIED>
<!ATTLIST form-login-page id ID #IMPLIED>
<!ATTLIST form-error-page id ID #IMPLIED>
<!ATTLIST auth-method id ID #IMPLIED>
<!ATTLIST security-role id ID #IMPLIED>
<!ATTLIST security-role-ref id ID #IMPLIED>
<!ATTLIST role-link id ID #IMPLIED>
<!ATTLIST env-entry id ID #IMPLIED>
<!ATTLIST env-entry-name id ID #IMPLIED>
<!ATTLIST env-entry-value id ID #IMPLIED>
<!ATTLIST env-entry-type id ID #IMPLIED>
<!ATTLIST ejb-ref id ID #IMPLIED>
<!ATTLIST ejb-ref-name id ID #IMPLIED>
<!ATTLIST ejb-ref-type id ID #IMPLIED>
<!ATTLIST home id ID #IMPLIED>
<!ATTLIST remote id ID #IMPLIED>
<!ATTLIST ejb-link id ID #IMPLIED>
1.1 jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/resources/web_23.dtd
Index: web_23.dtd
===================================================================
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- TEMPORARY DTD FOR THE SERVLET 2.3 WEB APPLICATION DEPLOYMENT
DESCRIPTOR. THIS WILL BE REPLACED BY THE OFFICIAL ONE WHEN
IT IS POSTED -->
<!-- The web-app element is the root of the deployment descriptor for
a web application -->
<!ELEMENT web-app (icon?, display-name?, description?, distributable?,
context-param*, filter*, filter-mapping*, listener*,
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*)>
<!-- Declares a filter in the web application deployment descriptor.
The filter is mapped to either a servlet or a URL pattern in the
filter-mapping element, using the filter-name value to reference.
Filters can access the initialization parameters declared in the
deployment descriptor at runtime via the FilterConfig interface. -->
<!ELEMENT filter (icon?, filter-name, display-name?, description?,
filter-class, init-param*)>
<!-- The logical name of the filter. This name is used to map
the filter. -->
<!ELEMENT filter-name (#PCDATA)>
<!-- The fully qualified classname of the filter. -->
<!ELEMENT filter-class (#PCDATA)>
<!-- Declaration of the filter mappings in this web application.
The conatiner used the filter-mapping declarations to decide which
filters to apply to a request, and in what order. The container
matches the request URI to a Servlet in the normal way. To determine
which filters to apply it matches filter-mapping declarations either
on servlet-name, or on url-pattern for each filter-mapping element,
depending on which style is used. The order in which filters are
invoked is the order in which filter-mapping declarations that match
a request URI for a servlet appear in the list of filter-mapping
elements. The filter-name value must be the value of the filter-
name sub-elements of one of the filter declarations in the
deployment descriptor. -->
<!ELEMENT filter-mapping (filter-name, (url-pattern | servlet-name))>
<!-- The icon element contains a small-icon and a large-icon element
which specify the location within the web application for a small and
large image used to represent the web application in a GUI tool. At a
minimum, tools must accept GIF and JPEG format images. -->
<!ELEMENT icon (small-icon?, large-icon?)>
<!-- The small-icon element contains the location within the web
application of a file containing a small (16x16 pixel) icon image. -->
<!ELEMENT small-icon (#PCDATA)>
<!-- The large-icon element contains the location within the web
application of a file containing a large (32x32 pixel) icon image.
-->
<!ELEMENT large-icon (#PCDATA)>
<!-- The display-name element contains a short name that is intended
to be displayed by GUI tools -->
<!ELEMENT display-name (#PCDATA)>
<!-- The description element is used to provide descriptive text about
the parent element. -->
<!ELEMENT description (#PCDATA)>
<!-- The distributable element, by its presence in a web application
deployment descriptor, indicates that this web application is
programmed appropriately to be deployed into a distributed servlet
container -->
<!ELEMENT distributable EMPTY>
<!-- The context-param element contains the declaration of a web
application's servlet context initialization parameters. -->
<!ELEMENT context-param (param-name, param-value, description?)>
<!-- The param-name element contains the name of a parameter. -->
<!ELEMENT param-name (#PCDATA)>
<!-- The param-value element contains the value of a parameter. -->
<!ELEMENT param-value (#PCDATA)>
<!-- The listener element indicates the deployment properties
for a web application listener bean. -->
<!ELEMENT listener (listener-class)>
<!-- The listener-class element declares a class in the application
must be registered as a web application listener bean. -->
<!ELEMENT listener-class (#PCDATA)>
<!-- The servlet element contains the declarative data of a
servlet. If a jsp-file is specified and the load-on-startup element is
present, then the JSP should be precompiled and loaded. -->
<!ELEMENT servlet (icon?, servlet-name, display-name?, description?, (servlet-class|jsp-file), init-param*, load-on-startup?, security-role-ref*)>
<!-- The servlet-name element contains the canonical name of the
servlet. -->
<!ELEMENT servlet-name (#PCDATA)>
<!-- The servlet-class element contains the fully qualified class name
of the servlet. -->
<!ELEMENT servlet-class (#PCDATA)>
<!-- The jsp-file element contains the full path to a JSP file within
the web application. -->
<!ELEMENT jsp-file (#PCDATA)>
<!-- The init-param element contains a name/value pair as an
initialization param of the servlet -->
<!ELEMENT init-param (param-name, param-value, description?)>
<!-- The load-on-startup element indicates that this servlet should be
loaded on the startup of the web application. The optional contents of
these element must be a positive integer indicating the order in which
the servlet should be loaded. Lower integers are loaded before higher
integers. If no value is specified, or if the value specified is not a
positive integer, the container is free to load it at any time in the
startup sequence. -->
<!ELEMENT load-on-startup (#PCDATA)>
<!-- The servlet-mapping element defines a mapping between a servlet
and a url pattern -->
<!ELEMENT servlet-mapping (servlet-name, url-pattern)>
<!-- The url-pattern element contains the url pattern of the
mapping. Must follow the rules specified in Section 10 of the Servlet
API Specification. -->
<!ELEMENT url-pattern (#PCDATA)>
<!-- The session-config element defines the session parameters for
this web application. -->
<!ELEMENT session-config (session-timeout?)>
<!-- The session-timeout element defines the default session timeout
interval for all sessions created in this web application. The
specified timeout must be expressed in a whole number of minutes. -->
<!ELEMENT session-timeout (#PCDATA)>
<!-- The mime-mapping element defines a mapping between an extension
and a mime type. -->
<!ELEMENT mime-mapping (extension, mime-type)>
<!-- The extension element contains a string describing an
extension. example: txt -->
<!ELEMENT extension (#PCDATA)>
<!-- The mime-type element contains a defined mime type. example:
text/plain -->
<!ELEMENT mime-type (#PCDATA)>
<!-- The welcome-file-list contains an ordered list of welcome files
elements. -->
<!ELEMENT welcome-file-list (welcome-file+)>
<!-- The welcome-file element contains file name to use as a default
welcome file, such as index.html -->
<!ELEMENT welcome-file (#PCDATA)>
<!-- The taglib element is used to describe a JSP tag library. -->
<!ELEMENT taglib (taglib-uri, taglib-location)>
<!-- The taglib-uri element describes a URI, relative to the location
of the web.xml document, identifying a Tag Library used in the Web
Application. -->
<!ELEMENT taglib-uri (#PCDATA)>
<!-- the taglib-location element contains the location (as a resource
relative to the root of the web application) where to find the Tag
Libary Description file for the tag library. -->
<!ELEMENT taglib-location (#PCDATA)>
<!-- The error-page element contains a mapping between an error code
or exception type to the path of a resource in the web application -->
<!ELEMENT error-page ((error-code | exception-type), location)>
<!-- The error-code contains an HTTP error code, ex: 404 -->
<!ELEMENT error-code (#PCDATA)>
<!-- The exception type contains a fully qualified class name of a
Java exception type. -->
<!ELEMENT exception-type (#PCDATA)>
<!-- The location element contains the location of the resource in the
web application -->
<!ELEMENT location (#PCDATA)>
<!-- The resource-ref element contains a declaration of a Web
Application's reference to an external resource. -->
<!ELEMENT resource-ref (description?, res-ref-name, res-type, res-auth)>
<!-- The res-ref-name element specifies the name of the resource
factory reference name. -->
<!ELEMENT res-ref-name (#PCDATA)>
<!-- The res-type element specifies the (Java class) type of the data
source. -->
<!ELEMENT res-type (#PCDATA)>
<!-- The res-auth element indicates whether the application component
code performs resource signon programmatically or whether the
container signs onto the resource based on the principle mapping
information supplied by the deployer. Must be CONTAINER or SERVLET -->
<!ELEMENT res-auth (#PCDATA)>
<!-- The security-constraint element is used to associate security
constraints with one or more web resource collections -->
<!ELEMENT security-constraint (web-resource-collection+,
auth-constraint?, user-data-constraint?)>
<!-- The web-resource-collection element is used to identify a subset
of the resources and HTTP methods on those resources within a web
application to which a security constraint applies. If no HTTP methods
are specified, then the security constraint applies to all HTTP
methods. -->
<!ELEMENT web-resource-collection (web-resource-name, description?,
url-pattern*, http-method*)>
<!-- The web-resource-name contains the name of this web resource
collection -->
<!ELEMENT web-resource-name (#PCDATA)>
<!-- The http-method contains an HTTP method (GET | POST |...) -->
<!ELEMENT http-method (#PCDATA)>
<!-- The user-data-constraint element is used to indicate how data
communicated between the client and container should be protected -->
<!ELEMENT user-data-constraint (description?, transport-guarantee)>
<!-- The transport-guarantee element specifies that the communication
between client and server should be NONE, INTEGRAL, or
CONFIDENTIAL. NONE means that the application does not require any
transport guarantees. A value of INTEGRAL means that the application
requires that the data sent between the client and server be sent in
such a way that it can't be changed in transit. CONFIDENTIAL means
that the application requires that the data be transmitted in a
fashion that prevents other entities from observing the contents of
the transmission. In most cases, the presence of the INTEGRAL or
CONFIDENTIAL flag will indicate that the use of SSL is required. -->
<!ELEMENT transport-guarantee (#PCDATA)>
<!-- The auth-constraint element indicates the user roles that should
be permitted access to this resource collection. The role used here
must appear in a security-role-ref element. -->
<!ELEMENT auth-constraint (description?, role-name*)>
<!-- The role-name element contains the name of a security role. -->
<!ELEMENT role-name (#PCDATA)>
<!-- The login-config element is used to configure the authentication
method that should be used, the realm name that should be used for
this application, and the attributes that are needed by the form login
mechanism. -->
<!ELEMENT login-config (auth-method?, realm-name?, form-login-config?)>
<!-- The realm name element specifies the realm name to use in HTTP
Basic authorization -->
<!ELEMENT realm-name (#PCDATA)>
<!-- The form-login-config element specifies the login and error pages
that should be used in form based login. If form based authentication
is not used, these elements are ignored. -->
<!ELEMENT form-login-config (form-login-page, form-error-page)>
<!-- The form-login-page element defines the location in the web app
where the page that can be used for login can be found -->
<!ELEMENT form-login-page (#PCDATA)>
<!-- The form-error-page element defines the location in the web app
where the error page that is displayed when login is not successful
can be found -->
<!ELEMENT form-error-page (#PCDATA)>
<!-- The auth-method element is used to configure the authentication
mechanism for the web application. As a prerequisite to gaining access
to any web resources which are protected by an authorization
constraint, a user must have authenticated using the configured
mechanism. Legal values for this element are "BASIC", "DIGEST",
"FORM", or "CLIENT-CERT". -->
<!ELEMENT auth-method (#PCDATA)>
<!-- The security-role element contains the declaration of a security
role which is used in the security-constraints placed on the web
application. -->
<!ELEMENT security-role (description?, role-name)>
<!-- The role-name element contains the name of a role. This element
must contain a non-empty string. -->
<!ELEMENT security-role-ref (description?, role-name, role-link)>
<!-- The role-link element is used to link a security role reference
to a defined security role. The role-link element must contain the
name of one of the security roles defined in the security-role
elements. -->
<!ELEMENT role-link (#PCDATA)>
<!-- The env-entry element contains the declaration of an
application's environment entry. This element is required to be
honored on in J2EE compliant servlet containers. -->
<!ELEMENT env-entry (description?, env-entry-name, env-entry-value?,
env-entry-type)>
<!-- The env-entry-name contains the name of an application's
environment entry -->
<!ELEMENT env-entry-name (#PCDATA)>
<!-- The env-entry-value element contains the value of an
application's environment entry -->
<!ELEMENT env-entry-value (#PCDATA)>
<!-- The env-entry-type element contains the fully qualified Java type
of the environment entry value that is expected by the application
code. The following are the legal values of env-entry-type:
java.lang.Boolean, java.lang.String, java.lang.Integer,
java.lang.Double, java.lang.Float. -->
<!ELEMENT env-entry-type (#PCDATA)>
<!-- The ejb-ref element is used to declare a reference to an
enterprise bean. -->
<!ELEMENT ejb-ref (description?, ejb-ref-name, ejb-ref-type, home,
remote, ejb-link?, runAs?)>
<!-- The ejb-ref-name element contains the name of an EJB
reference. This is the JNDI name that the servlet code uses to get a
reference to the enterprise bean. -->
<!ELEMENT ejb-ref-name (#PCDATA)>
<!-- The ejb-ref-type element contains the expected java class type of
the referenced EJB. -->
<!ELEMENT ejb-ref-type (#PCDATA)>
<!-- The ejb-home element contains the fully qualified name of the
EJB's home interface -->
<!ELEMENT home (#PCDATA)>
<!-- The ejb-remote element contains the fully qualified name of the
EJB's remote interface -->
<!ELEMENT remote (#PCDATA)>
<!-- The ejb-link element is used in the ejb-ref element to specify
that an EJB reference is linked to an EJB in an encompassing Java2
Enterprise Edition (J2EE) application package. The value of the
ejb-link element must be the ejb-name of and EJB in the J2EE
application package. -->
<!ELEMENT ejb-link (#PCDATA)>
<!-- The runAs element must contain the name of a security role
defined for this web application. -->
<!ELEMENT runAs (#PCDATA)>
<!-- The ID mechanism is to allow tools to easily make tool-specific
references to the elements of the deployment descriptor. This allows
tools that produce additional deployment information (i.e information
beyond the standard deployment descriptor information) to store the
non-standard information in a separate file, and easily refer from
these tools-specific files to the information in the standard web-app
deployment descriptor. -->
<!ATTLIST web-app id ID #IMPLIED>
<!ATTLIST filter id ID #IMPLIED>
<!ATTLIST filter-name id ID #IMPLIED>
<!ATTLIST filter-class id ID #IMPLIED>
<!ATTLIST filter-mapping id ID #IMPLIED>
<!ATTLIST icon id ID #IMPLIED>
<!ATTLIST small-icon id ID #IMPLIED>
<!ATTLIST large-icon id ID #IMPLIED>
<!ATTLIST display-name id ID #IMPLIED>
<!ATTLIST description id ID #IMPLIED>
<!ATTLIST distributable id ID #IMPLIED>
<!ATTLIST context-param id ID #IMPLIED>
<!ATTLIST param-name id ID #IMPLIED>
<!ATTLIST param-value id ID #IMPLIED>
<!ATTLIST listener id ID #IMPLIED>
<!ATTLIST listener-class id ID #IMPLIED>
<!ATTLIST servlet id ID #IMPLIED>
<!ATTLIST servlet-name id ID #IMPLIED>
<!ATTLIST servlet-class id ID #IMPLIED>
<!ATTLIST jsp-file id ID #IMPLIED>
<!ATTLIST init-param id ID #IMPLIED>
<!ATTLIST load-on-startup id ID #IMPLIED>
<!ATTLIST servlet-mapping id ID #IMPLIED>
<!ATTLIST url-pattern id ID #IMPLIED>
<!ATTLIST session-config id ID #IMPLIED>
<!ATTLIST session-timeout id ID #IMPLIED>
<!ATTLIST mime-mapping id ID #IMPLIED>
<!ATTLIST extension id ID #IMPLIED>
<!ATTLIST mime-type id ID #IMPLIED>
<!ATTLIST welcome-file-list id ID #IMPLIED>
<!ATTLIST welcome-file id ID #IMPLIED>
<!ATTLIST error-page id ID #IMPLIED>
<!ATTLIST error-code id ID #IMPLIED>
<!ATTLIST exception-type id ID #IMPLIED>
<!ATTLIST location id ID #IMPLIED>
<!ATTLIST resource-ref id ID #IMPLIED>
<!ATTLIST res-ref-name id ID #IMPLIED>
<!ATTLIST res-type id ID #IMPLIED>
<!ATTLIST res-auth id ID #IMPLIED>
<!ATTLIST security-constraint id ID #IMPLIED>
<!ATTLIST web-resource-collection id ID #IMPLIED>
<!ATTLIST web-resource-name id ID #IMPLIED>
<!ATTLIST http-method id ID #IMPLIED>
<!ATTLIST user-data-constraint id ID #IMPLIED>
<!ATTLIST transport-guarantee id ID #IMPLIED>
<!ATTLIST auth-constraint id ID #IMPLIED>
<!ATTLIST role-name id ID #IMPLIED>
<!ATTLIST auth-method id ID #IMPLIED>
<!ATTLIST basic-auth id ID #IMPLIED>
<!ATTLIST form-auth id ID #IMPLIED>
<!ATTLIST form-login-page id ID #IMPLIED>
<!ATTLIST form-error-page id ID #IMPLIED>
<!ATTLIST form-login-config id ID #IMPLIED>
<!ATTLIST realm-name id ID #IMPLIED>
<!ATTLIST login-config id ID #IMPLIED>
<!ATTLIST security-role id ID #IMPLIED>
<!ATTLIST security-role-ref id ID #IMPLIED>
<!ATTLIST role-link id ID #IMPLIED>
<!ATTLIST env-entry id ID #IMPLIED>
<!ATTLIST env-entry-name id ID #IMPLIED>
<!ATTLIST env-entry-value id ID #IMPLIED>
<!ATTLIST env-entry-type id ID #IMPLIED>
<!ATTLIST mutual-auth id ID #IMPLIED>
<!ATTLIST ejb-ref id ID #IMPLIED>
<!ATTLIST ejb-ref-name id ID #IMPLIED>
<!ATTLIST ejb-ref-type id ID #IMPLIED>
<!ATTLIST home id ID #IMPLIED>
<!ATTLIST remote id ID #IMPLIED>
<!ATTLIST ejb-link id ID #IMPLIED>
<!ATTLIST runAs iid ID #IMPLIED>