<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2FServlets%2FWeb_INF_XML</id>
		<title>Java/Servlets/Web INF XML - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java%2FServlets%2FWeb_INF_XML"/>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java/Servlets/Web_INF_XML&amp;action=history"/>
		<updated>2026-04-07T17:12:52Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://jexp.ru/index.php?title=Java/Servlets/Web_INF_XML&amp;diff=6321&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java/Servlets/Web_INF_XML&amp;diff=6321&amp;oldid=prev"/>
				<updated>2010-06-01T06:11:39Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 06:11, 1 июня 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	<entry>
		<id>http://jexp.ru/index.php?title=Java/Servlets/Web_INF_XML&amp;diff=6320&amp;oldid=prev</id>
		<title> в 18:01, 31 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java/Servlets/Web_INF_XML&amp;diff=6320&amp;oldid=prev"/>
				<updated>2010-05-31T18:01:43Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== A WebAppConfig object is a wrapper around a DOM tree for a web.xml file ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
/*&lt;br /&gt;
 * Copyright (c) 2004 David Flanagan.  All rights reserved.&lt;br /&gt;
 * This code is from the book Java Examples in a Nutshell, 3nd Edition.&lt;br /&gt;
 * It is provided AS-IS, WITHOUT ANY WARRANTY either expressed or implied.&lt;br /&gt;
 * You may study, use, and modify it for any non-commercial purpose,&lt;br /&gt;
 * including teaching and use in open-source projects.&lt;br /&gt;
 * You may distribute it non-commercially as long as you retain this notice.&lt;br /&gt;
 * For a commercial use license, or to purchase the book, &lt;br /&gt;
 * please visit http://www.davidflanagan.ru/javaexamples3.&lt;br /&gt;
 */&lt;br /&gt;
import java.io.File;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.io.PrintWriter;&lt;br /&gt;
import javax.xml.parsers.DocumentBuilderFactory;&lt;br /&gt;
import javax.xml.parsers.ParserConfigurationException;&lt;br /&gt;
import javax.xml.transform.Transformer;&lt;br /&gt;
import javax.xml.transform.TransformerConfigurationException;&lt;br /&gt;
import javax.xml.transform.TransformerException;&lt;br /&gt;
import javax.xml.transform.TransformerFactory;&lt;br /&gt;
import org.w3c.dom.Element;&lt;br /&gt;
import org.w3c.dom.NodeList;&lt;br /&gt;
import org.w3c.dom.Text;&lt;br /&gt;
import org.xml.sax.SAXException;&lt;br /&gt;
import org.xml.sax.SAXParseException;&lt;br /&gt;
/**&lt;br /&gt;
 * A WebAppConfig object is a wrapper around a DOM tree for a web.xml file. The&lt;br /&gt;
 * methods of the class use the DOM API to work with the tree in various ways.&lt;br /&gt;
 */&lt;br /&gt;
public class WebAppConfig {&lt;br /&gt;
  /** The main method creates and demonstrates a WebAppConfig object */&lt;br /&gt;
  public static void main(String[] args) throws IOException, SAXException,&lt;br /&gt;
      ParserConfigurationException, TransformerConfigurationException, TransformerException {&lt;br /&gt;
    // Create a new WebAppConfig object that represents the web.xml&lt;br /&gt;
    // file specified by the first command-line argument&lt;br /&gt;
    WebAppConfig config = new WebAppConfig(new File(args[0]));&lt;br /&gt;
    // Query the tree for the class name associated with the specified&lt;br /&gt;
    // servlet name&lt;br /&gt;
    System.out.println(&amp;quot;Class for servlet &amp;quot; + args[1] + &amp;quot; is &amp;quot; + config.getServletClass(args[1]));&lt;br /&gt;
    // Add a new servlet name-to-class mapping to the DOM tree&lt;br /&gt;
    config.addServlet(&amp;quot;foo&amp;quot;, &amp;quot;bar&amp;quot;);&lt;br /&gt;
    // And write out an XML version of the DOM tree to standard out&lt;br /&gt;
    config.output(new PrintWriter(System.out));&lt;br /&gt;
  }&lt;br /&gt;
  org.w3c.dom.Document document; // This field holds the parsed DOM tree&lt;br /&gt;
  /**&lt;br /&gt;
   * This constructor method is passed an XML file. It uses the JAXP API to&lt;br /&gt;
   * obtain a DOM parser, and to parse the file into a DOM Document object,&lt;br /&gt;
   * which is used by the remaining methods of the class.&lt;br /&gt;
   */&lt;br /&gt;
  public WebAppConfig(File configfile) throws IOException, SAXException,&lt;br /&gt;
      ParserConfigurationException {&lt;br /&gt;
    // Get a JAXP parser factory object&lt;br /&gt;
    javax.xml.parsers.DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();&lt;br /&gt;
    // Tell the factory what kind of parser we want&lt;br /&gt;
    dbf.setValidating(false);&lt;br /&gt;
    // Use the factory to get a JAXP parser object&lt;br /&gt;
    javax.xml.parsers.DocumentBuilder parser = dbf.newDocumentBuilder();&lt;br /&gt;
    // Tell the parser how to handle errors. Note that in the JAXP API,&lt;br /&gt;
    // DOM parsers rely on the SAX API for error handling&lt;br /&gt;
    parser.setErrorHandler(new org.xml.sax.ErrorHandler() {&lt;br /&gt;
      public void warning(SAXParseException e) {&lt;br /&gt;
        System.err.println(&amp;quot;WARNING: &amp;quot; + e.getMessage());&lt;br /&gt;
      }&lt;br /&gt;
      public void error(SAXParseException e) {&lt;br /&gt;
        System.err.println(&amp;quot;ERROR: &amp;quot; + e.getMessage());&lt;br /&gt;
      }&lt;br /&gt;
      public void fatalError(SAXParseException e) throws SAXException {&lt;br /&gt;
        System.err.println(&amp;quot;FATAL: &amp;quot; + e.getMessage());&lt;br /&gt;
        throw e; // re-throw the error&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    // Finally, use the JAXP parser to parse the file. This call returns&lt;br /&gt;
    // A Document object. Now that we have this object, the rest of this&lt;br /&gt;
    // class uses the DOM API to work with it; JAXP is no longer required.&lt;br /&gt;
    document = parser.parse(configfile);&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * This method looks for specific Element nodes in the DOM tree in order to&lt;br /&gt;
   * figure out the classname associated with the specified servlet name&lt;br /&gt;
   */&lt;br /&gt;
  public String getServletClass(String servletName) {&lt;br /&gt;
    // Find all &amp;lt;servlet&amp;gt; elements and loop through them.&lt;br /&gt;
    NodeList servletnodes = document.getElementsByTagName(&amp;quot;servlet&amp;quot;);&lt;br /&gt;
    int numservlets = servletnodes.getLength();&lt;br /&gt;
    for (int i = 0; i &amp;lt; numservlets; i++) {&lt;br /&gt;
      Element servletTag = (Element) servletnodes.item(i);&lt;br /&gt;
      // Get the first &amp;lt;servlet-name&amp;gt; tag within the &amp;lt;servlet&amp;gt; tag&lt;br /&gt;
      Element nameTag = (Element) servletTag.getElementsByTagName(&amp;quot;servlet-name&amp;quot;).item(0);&lt;br /&gt;
      if (nameTag == null)&lt;br /&gt;
        continue;&lt;br /&gt;
      // The &amp;lt;servlet-name&amp;gt; tag should have a single child of type&lt;br /&gt;
      // Text. Get that child, and extract its text. Use trim()&lt;br /&gt;
      // to strip whitespace from the beginning and end of it.&lt;br /&gt;
      String name = ((Text) nameTag.getFirstChild()).getData().trim();&lt;br /&gt;
      // If this &amp;lt;servlet-name&amp;gt; tag has the right name&lt;br /&gt;
      if (servletName.equals(name)) {&lt;br /&gt;
        // Get the matching &amp;lt;servlet-class&amp;gt; tag&lt;br /&gt;
        Element classTag = (Element) servletTag.getElementsByTagName(&amp;quot;servlet-class&amp;quot;).item(0);&lt;br /&gt;
        if (classTag != null) {&lt;br /&gt;
          // Extract the tag&amp;quot;s text as above, and return it&lt;br /&gt;
          Text classTagContent = (Text) classTag.getFirstChild();&lt;br /&gt;
          return classTagContent.getNodeValue().trim();&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    // If we get here, no matching servlet name was found&lt;br /&gt;
    return null;&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * This method adds a new name-to-class mapping in in the form of a &amp;lt;servlet&amp;gt;&lt;br /&gt;
   * sub-tree to the document.&lt;br /&gt;
   */&lt;br /&gt;
  public void addServlet(String servletName, String className) {&lt;br /&gt;
    // Create the &amp;lt;servlet&amp;gt; tag&lt;br /&gt;
    Element newNode = document.createElement(&amp;quot;servlet&amp;quot;);&lt;br /&gt;
    // Create the &amp;lt;servlet-name&amp;gt; and &amp;lt;servlet-class&amp;gt; tags&lt;br /&gt;
    Element nameNode = document.createElement(&amp;quot;servlet-name&amp;quot;);&lt;br /&gt;
    Element classNode = document.createElement(&amp;quot;servlet-class&amp;quot;);&lt;br /&gt;
    // Add the name and classname text to those tags&lt;br /&gt;
    nameNode.appendChild(document.createTextNode(servletName));&lt;br /&gt;
    classNode.appendChild(document.createTextNode(className));&lt;br /&gt;
    // And add those tags to the servlet tag&lt;br /&gt;
    newNode.appendChild(nameNode);&lt;br /&gt;
    newNode.appendChild(classNode);&lt;br /&gt;
    // Now that we&amp;quot;ve created the new sub-tree, figure out where to put&lt;br /&gt;
    // it. This code looks for another servlet tag and inserts the new&lt;br /&gt;
    // one right before it. Note that this code will fail if the document&lt;br /&gt;
    // does not already contain at least one &amp;lt;servlet&amp;gt; tag.&lt;br /&gt;
    NodeList servletnodes = document.getElementsByTagName(&amp;quot;servlet&amp;quot;);&lt;br /&gt;
    Element firstServlet = (Element) servletnodes.item(0);&lt;br /&gt;
    // Insert the new node before the first servlet node&lt;br /&gt;
    firstServlet.getParentNode().insertBefore(newNode, firstServlet);&lt;br /&gt;
  }&lt;br /&gt;
  /**&lt;br /&gt;
   * Output the DOM tree to the specified stream as an XML document. See the&lt;br /&gt;
   * XMLDocumentWriter example for the details.&lt;br /&gt;
   */&lt;br /&gt;
  public void output(PrintWriter out) throws TransformerConfigurationException,&lt;br /&gt;
      TransformerException {&lt;br /&gt;
    TransformerFactory factory = TransformerFactory.newInstance();&lt;br /&gt;
    Transformer transformer = factory.newTransformer();&lt;br /&gt;
    transformer.transform(new javax.xml.transform.dom.DOMSource(document),&lt;br /&gt;
        new javax.xml.transform.stream.StreamResult(out));&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Define welcome files for web application ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;web-app &lt;br /&gt;
        xmlns=&amp;quot;http://java.sun.ru/xml/ns/javaee&amp;quot; &lt;br /&gt;
        xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; &lt;br /&gt;
        xsi:schemaLocation=&amp;quot;http://java.sun.ru/xml/ns/javaee http://java.sun.ru/xml/ns/javaee/web-app_2_5.xsd&amp;quot; &lt;br /&gt;
        version=&amp;quot;2.5&amp;quot;&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    &amp;lt;welcome-file-list&amp;gt;&lt;br /&gt;
        &amp;lt;welcome-file&amp;gt;index.html&amp;lt;/welcome-file&amp;gt;&lt;br /&gt;
        &amp;lt;welcome-file&amp;gt;index.jsp&amp;lt;/welcome-file&amp;gt;&lt;br /&gt;
        &amp;lt;welcome-file&amp;gt;default.html&amp;lt;/welcome-file&amp;gt;&lt;br /&gt;
        &amp;lt;welcome-file&amp;gt;default.jsp&amp;lt;/welcome-file&amp;gt;&lt;br /&gt;
    &amp;lt;/welcome-file-list&amp;gt;&lt;br /&gt;
&amp;lt;/web-app&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Init Param Servlet ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
import javax.servlet.ServletConfig;&lt;br /&gt;
import javax.servlet.ServletContext;&lt;br /&gt;
import javax.servlet.ServletException;&lt;br /&gt;
import javax.servlet.http.HttpServlet;&lt;br /&gt;
import javax.servlet.http.HttpServletRequest;&lt;br /&gt;
import javax.servlet.http.HttpServletResponse;&lt;br /&gt;
import java.io.PrintWriter;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
public class InitParamServlet extends HttpServlet &lt;br /&gt;
{&lt;br /&gt;
  public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException &lt;br /&gt;
  {&lt;br /&gt;
    res.setContentType(&amp;quot;text/plain&amp;quot;);&lt;br /&gt;
    PrintWriter out = res.getWriter();&lt;br /&gt;
    String url = getInitParameter(&amp;quot;URL&amp;quot;);&lt;br /&gt;
    ServletConfig config = getServletConfig();&lt;br /&gt;
    ServletContext context = getServletContext();&lt;br /&gt;
    String uid = config.getInitParameter(&amp;quot;UID&amp;quot;);&lt;br /&gt;
    String pwd = config.getInitParameter(&amp;quot;PWD&amp;quot;);&lt;br /&gt;
    String port = context.getInitParameter(&amp;quot;some-port&amp;quot;);&lt;br /&gt;
    out.println(&amp;quot;Values retrieved for the init parameters are: &amp;quot;);&lt;br /&gt;
    out.println(&amp;quot;URL: &amp;quot; + url);&lt;br /&gt;
    out.println(&amp;quot;UID: &amp;quot; + uid);&lt;br /&gt;
    out.println(&amp;quot;PWD: &amp;quot; + pwd);&lt;br /&gt;
    out.println(&amp;quot;some-port: &amp;quot; + port);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
           &lt;br /&gt;
         &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Parse a web.xml file using the SAX2 API ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
/*&lt;br /&gt;
 * Copyright (c) 2004 David Flanagan.  All rights reserved.&lt;br /&gt;
 * This code is from the book Java Examples in a Nutshell, 3nd Edition.&lt;br /&gt;
 * It is provided AS-IS, WITHOUT ANY WARRANTY either expressed or implied.&lt;br /&gt;
 * You may study, use, and modify it for any non-commercial purpose,&lt;br /&gt;
 * including teaching and use in open-source projects.&lt;br /&gt;
 * You may distribute it non-commercially as long as you retain this notice.&lt;br /&gt;
 * For a commercial use license, or to purchase the book, &lt;br /&gt;
 * please visit http://www.davidflanagan.ru/javaexamples3.&lt;br /&gt;
 */&lt;br /&gt;
import java.io.File;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.util.ArrayList;&lt;br /&gt;
import java.util.Collections;&lt;br /&gt;
import java.util.HashMap;&lt;br /&gt;
import java.util.Iterator;&lt;br /&gt;
import java.util.List;&lt;br /&gt;
import javax.xml.parsers.ParserConfigurationException;&lt;br /&gt;
import javax.xml.parsers.SAXParser;&lt;br /&gt;
import javax.xml.parsers.SAXParserFactory;&lt;br /&gt;
import org.xml.sax.Attributes;&lt;br /&gt;
import org.xml.sax.SAXException;&lt;br /&gt;
import org.xml.sax.SAXParseException;&lt;br /&gt;
/**&lt;br /&gt;
 * Parse a web.xml file using the SAX2 API. This class extends DefaultHandler so&lt;br /&gt;
 * that instances can serve as SAX2 event handlers, and can be notified by the&lt;br /&gt;
 * parser of parsing events. We simply override the methods that receive events&lt;br /&gt;
 * we&amp;quot;re interested in&lt;br /&gt;
 */&lt;br /&gt;
public class ListServlets extends org.xml.sax.helpers.DefaultHandler {&lt;br /&gt;
  /** The main method sets things up for parsing */&lt;br /&gt;
  public static void main(String[] args) throws IOException, SAXException,&lt;br /&gt;
      ParserConfigurationException {&lt;br /&gt;
    // We use a SAXParserFactory to obtain a SAXParser, which&lt;br /&gt;
    // encapsulates a SAXReader.&lt;br /&gt;
    SAXParserFactory factory = SAXParserFactory.newInstance();&lt;br /&gt;
    factory.setValidating(false); // We don&amp;quot;t want validation&lt;br /&gt;
    factory.setNamespaceAware(false); // No namespaces please&lt;br /&gt;
    // Create a SAXParser object from the factory&lt;br /&gt;
    SAXParser parser = factory.newSAXParser();&lt;br /&gt;
    // Now parse the file specified on the command line using&lt;br /&gt;
    // an instance of this class to handle the parser callbacks&lt;br /&gt;
    parser.parse(new File(args[0]), new ListServlets());&lt;br /&gt;
  }&lt;br /&gt;
  HashMap nameToClass; // Map from servlet name to servlet class name&lt;br /&gt;
  HashMap nameToID; // Map from servlet name to id attribute&lt;br /&gt;
  HashMap nameToPatterns; // Map from servlet name to url patterns&lt;br /&gt;
  StringBuffer accumulator; // Accumulate text&lt;br /&gt;
  String servletName, servletClass, servletPattern; // Remember text&lt;br /&gt;
  String servletID; // Value of id attribute of &amp;lt;servlet&amp;gt; tag&lt;br /&gt;
  // Called at the beginning of parsing. We use it as an init() method&lt;br /&gt;
  public void startDocument() {&lt;br /&gt;
    accumulator = new StringBuffer();&lt;br /&gt;
    nameToClass = new HashMap();&lt;br /&gt;
    nameToID = new HashMap();&lt;br /&gt;
    nameToPatterns = new HashMap();&lt;br /&gt;
  }&lt;br /&gt;
  // When the parser encounters plain text (not XML elements), it calls&lt;br /&gt;
  // this method, which accumulates them in a string buffer.&lt;br /&gt;
  // Note that this method may be called multiple times, even with no&lt;br /&gt;
  // intervening elements.&lt;br /&gt;
  public void characters(char[] buffer, int start, int length) {&lt;br /&gt;
    accumulator.append(buffer, start, length);&lt;br /&gt;
  }&lt;br /&gt;
  // At the beginning of each new element, erase any accumulated text.&lt;br /&gt;
  public void startElement(String namespaceURL, String localName, String qname,&lt;br /&gt;
      Attributes attributes) {&lt;br /&gt;
    accumulator.setLength(0);&lt;br /&gt;
    // If its a servlet tag, look for id attribute&lt;br /&gt;
    if (qname.equals(&amp;quot;servlet&amp;quot;))&lt;br /&gt;
      servletID = attributes.getValue(&amp;quot;id&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  // Take special action when we reach the end of selected elements.&lt;br /&gt;
  // Although we don&amp;quot;t use a validating parser, this method does assume&lt;br /&gt;
  // that the web.xml file we&amp;quot;re parsing is valid.&lt;br /&gt;
  public void endElement(String namespaceURL, String localName, String qname) {&lt;br /&gt;
    // Since we&amp;quot;ve indicated that we don&amp;quot;t want name-space aware&lt;br /&gt;
    // parsing, the element name is in qname. If we were doing&lt;br /&gt;
    // namespaces, then qname would include the name, colon and prefix,&lt;br /&gt;
    // and localName would be the name without the the prefix or colon.&lt;br /&gt;
    if (qname.equals(&amp;quot;servlet-name&amp;quot;)) { // Store servlet name&lt;br /&gt;
      servletName = accumulator.toString().trim();&lt;br /&gt;
    } else if (qname.equals(&amp;quot;servlet-class&amp;quot;)) { // Store servlet class&lt;br /&gt;
      servletClass = accumulator.toString().trim();&lt;br /&gt;
    } else if (qname.equals(&amp;quot;url-pattern&amp;quot;)) { // Store servlet pattern&lt;br /&gt;
      servletPattern = accumulator.toString().trim();&lt;br /&gt;
    } else if (qname.equals(&amp;quot;servlet&amp;quot;)) { // Map name to class&lt;br /&gt;
      nameToClass.put(servletName, servletClass);&lt;br /&gt;
      nameToID.put(servletName, servletID);&lt;br /&gt;
    } else if (qname.equals(&amp;quot;servlet-mapping&amp;quot;)) {// Map name to pattern&lt;br /&gt;
      List patterns = (List) nameToPatterns.get(servletName);&lt;br /&gt;
      if (patterns == null) {&lt;br /&gt;
        patterns = new ArrayList();&lt;br /&gt;
        nameToPatterns.put(servletName, patterns);&lt;br /&gt;
      }&lt;br /&gt;
      patterns.add(servletPattern);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  // Called at the end of parsing. Used here to print our results.&lt;br /&gt;
  public void endDocument() {&lt;br /&gt;
    // Note the powerful uses of the Collections framework. In two lines&lt;br /&gt;
    // we get the key objects of a Map as a Set, convert them to a List,&lt;br /&gt;
    // and sort that List alphabetically.&lt;br /&gt;
    List servletNames = new ArrayList(nameToClass.keySet());&lt;br /&gt;
    Collections.sort(servletNames);&lt;br /&gt;
    // Loop through servlet names&lt;br /&gt;
    for (Iterator iterator = servletNames.iterator(); iterator.hasNext();) {&lt;br /&gt;
      String name = (String) iterator.next();&lt;br /&gt;
      // For each name get class and URL patterns and print them.&lt;br /&gt;
      String classname = (String) nameToClass.get(name);&lt;br /&gt;
      String id = (String) nameToID.get(name);&lt;br /&gt;
      List patterns = (List) nameToPatterns.get(name);&lt;br /&gt;
      System.out.println(&amp;quot;Servlet: &amp;quot; + name);&lt;br /&gt;
      System.out.println(&amp;quot;Class: &amp;quot; + classname);&lt;br /&gt;
      if (id != null)&lt;br /&gt;
        System.out.println(&amp;quot;ID: &amp;quot; + id);&lt;br /&gt;
      if (patterns != null) {&lt;br /&gt;
        System.out.println(&amp;quot;Patterns:&amp;quot;);&lt;br /&gt;
        for (Iterator i = patterns.iterator(); i.hasNext();) {&lt;br /&gt;
          System.out.println(&amp;quot;\t&amp;quot; + i.next());&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      System.out.println();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  // Issue a warning&lt;br /&gt;
  public void warning(SAXParseException exception) {&lt;br /&gt;
    System.err&lt;br /&gt;
        .println(&amp;quot;WARNING: line &amp;quot; + exception.getLineNumber() + &amp;quot;: &amp;quot; + exception.getMessage());&lt;br /&gt;
  }&lt;br /&gt;
  // Report a parsing error&lt;br /&gt;
  public void error(SAXParseException exception) {&lt;br /&gt;
    System.err.println(&amp;quot;ERROR: line &amp;quot; + exception.getLineNumber() + &amp;quot;: &amp;quot; + exception.getMessage());&lt;br /&gt;
  }&lt;br /&gt;
  // Report a non-recoverable error and exit&lt;br /&gt;
  public void fatalError(SAXParseException exception) throws SAXException {&lt;br /&gt;
    System.err.println(&amp;quot;FATAL: line &amp;quot; + exception.getLineNumber() + &amp;quot;: &amp;quot; + exception.getMessage());&lt;br /&gt;
    throw (exception);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Servlet Mapping In Web XML ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Using Initialization Parameters Servlet ==&lt;/div&gt;</summary>
			</entry>

	</feed>