A WebAppConfig object is a wrapper around a DOM tree for a web.xml file : Web INF XML « Servlets « Java

Java
1. 2D Graphics GUI
2. 3D
3. Advanced Graphics
4. Ant
5. Apache Common
6. Chart
7. Class
8. Collections Data Structure
9. Data Type
10. Database SQL JDBC
11. Design Pattern
12. Development Class
13. EJB3
14. Email
15. Event
16. File Input Output
17. Game
18. Generics
19. GWT
20. Hibernate
21. I18N
22. J2EE
23. J2ME
24. JDK 6
25. JNDI LDAP
26. JPA
27. JSP
28. JSTL
29. Language Basics
30. Network Protocol
31. PDF RTF
32. Reflection
33. Regular Expressions
34. Scripting
35. Security
36. Servlets
37. Spring
38. Swing Components
39. Swing JFC
40. SWT JFace Eclipse
41. Threads
42. Tiny Application
43. Velocity
44. Web Services SOA
45. XML
Java Tutorial
Java Source Code / Java Documentation
Java Open Source
Jar File Download
Java Articles
Java Products
Java by API
Photoshop Tutorials
Maya Tutorials
Flash Tutorials
3ds-Max Tutorials
Illustrator Tutorials
GIMP Tutorials
C# / C Sharp
C# / CSharp Tutorial
C# / CSharp Open Source
ASP.Net
ASP.NET Tutorial
JavaScript DHTML
JavaScript Tutorial
JavaScript Reference
HTML / CSS
HTML CSS Reference
C / ANSI-C
C Tutorial
C++
C++ Tutorial
Ruby
PHP
Python
Python Tutorial
Python Open Source
SQL Server / T-SQL
SQL Server / T-SQL Tutorial
Oracle PL / SQL
Oracle PL/SQL Tutorial
PostgreSQL
SQL / MySQL
MySQL Tutorial
VB.Net
VB.Net Tutorial
Flash / Flex / ActionScript
VBA / Excel / Access / Word
XML
XML Tutorial
Microsoft Office PowerPoint 2007 Tutorial
Microsoft Office Excel 2007 Tutorial
Microsoft Office Word 2007 Tutorial
Java » Servlets » Web INF XMLScreenshots 
A WebAppConfig object is a wrapper around a DOM tree for a web.xml file
 
/*
 * Copyright (c) 2004 David Flanagan.  All rights reserved.
 * This code is from the book Java Examples in a Nutshell, 3nd Edition.
 * It is provided AS-IS, WITHOUT ANY WARRANTY either expressed or implied.
 * You may study, use, and modify it for any non-commercial purpose,
 * including teaching and use in open-source projects.
 * You may distribute it non-commercially as long as you retain this notice.
 * For a commercial use license, or to purchase the book, 
 * please visit http://www.davidflanagan.com/javaexamples3.
 */

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;

import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;

/**
 * A WebAppConfig object is a wrapper around a DOM tree for a web.xml file. The
 * methods of the class use the DOM API to work with the tree in various ways.
 */
public class WebAppConfig {
  /** The main method creates and demonstrates a WebAppConfig object */
  public static void main(String[] argsthrows IOException, SAXException,
      ParserConfigurationException, TransformerConfigurationException, TransformerException {
    // Create a new WebAppConfig object that represents the web.xml
    // file specified by the first command-line argument
    WebAppConfig config = new WebAppConfig(new File(args[0]));
    // Query the tree for the class name associated with the specified
    // servlet name
    System.out.println("Class for servlet " + args[1" is " + config.getServletClass(args[1]));
    // Add a new servlet name-to-class mapping to the DOM tree
    config.addServlet("foo""bar");
    // And write out an XML version of the DOM tree to standard out
    config.output(new PrintWriter(System.out));
  }

  org.w3c.dom.Document document; // This field holds the parsed DOM tree

  /**
   * This constructor method is passed an XML file. It uses the JAXP API to
   * obtain a DOM parser, and to parse the file into a DOM Document object,
   * which is used by the remaining methods of the class.
   */
  public WebAppConfig(File configfilethrows IOException, SAXException,
      ParserConfigurationException {
    // Get a JAXP parser factory object
    javax.xml.parsers.DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    // Tell the factory what kind of parser we want
    dbf.setValidating(false);
    // Use the factory to get a JAXP parser object
    javax.xml.parsers.DocumentBuilder parser = dbf.newDocumentBuilder();

    // Tell the parser how to handle errors. Note that in the JAXP API,
    // DOM parsers rely on the SAX API for error handling
    parser.setErrorHandler(new org.xml.sax.ErrorHandler() {
      public void warning(SAXParseException e) {
        System.err.println("WARNING: " + e.getMessage());
      }

      public void error(SAXParseException e) {
        System.err.println("ERROR: " + e.getMessage());
      }

      public void fatalError(SAXParseException ethrows SAXException {
        System.err.println("FATAL: " + e.getMessage());
        throw e; // re-throw the error
      }
    });

    // Finally, use the JAXP parser to parse the file. This call returns
    // A Document object. Now that we have this object, the rest of this
    // class uses the DOM API to work with it; JAXP is no longer required.
    document = parser.parse(configfile);
  }

  /**
   * This method looks for specific Element nodes in the DOM tree in order to
   * figure out the classname associated with the specified servlet name
   */
  public String getServletClass(String servletName) {
    // Find all <servlet> elements and loop through them.
    NodeList servletnodes = document.getElementsByTagName("servlet");
    int numservlets = servletnodes.getLength();
    for (int i = 0; i < numservlets; i++) {
      Element servletTag = (Elementservletnodes.item(i);
      // Get the first <servlet-name> tag within the <servlet> tag
      Element nameTag = (ElementservletTag.getElementsByTagName("servlet-name").item(0);
      if (nameTag == null)
        continue;

      // The <servlet-name> tag should have a single child of type
      // Text. Get that child, and extract its text. Use trim()
      // to strip whitespace from the beginning and end of it.
      String name = ((TextnameTag.getFirstChild()).getData().trim();

      // If this <servlet-name> tag has the right name
      if (servletName.equals(name)) {
        // Get the matching <servlet-class> tag
        Element classTag = (ElementservletTag.getElementsByTagName("servlet-class").item(0);
        if (classTag != null) {
          // Extract the tag's text as above, and return it
          Text classTagContent = (TextclassTag.getFirstChild();
          return classTagContent.getNodeValue().trim();
        }
      }
    }

    // If we get here, no matching servlet name was found
    return null;
  }

  /**
   * This method adds a new name-to-class mapping in in the form of a <servlet>
   * sub-tree to the document.
   */
  public void addServlet(String servletName, String className) {
    // Create the <servlet> tag
    Element newNode = document.createElement("servlet");
    // Create the <servlet-name> and <servlet-class> tags
    Element nameNode = document.createElement("servlet-name");
    Element classNode = document.createElement("servlet-class");
    // Add the name and classname text to those tags
    nameNode.appendChild(document.createTextNode(servletName));
    classNode.appendChild(document.createTextNode(className));
    // And add those tags to the servlet tag
    newNode.appendChild(nameNode);
    newNode.appendChild(classNode);

    // Now that we've created the new sub-tree, figure out where to put
    // it. This code looks for another servlet tag and inserts the new
    // one right before it. Note that this code will fail if the document
    // does not already contain at least one <servlet> tag.
    NodeList servletnodes = document.getElementsByTagName("servlet");
    Element firstServlet = (Elementservletnodes.item(0);

    // Insert the new node before the first servlet node
    firstServlet.getParentNode().insertBefore(newNode, firstServlet);
  }

  /**
   * Output the DOM tree to the specified stream as an XML document. See the
   * XMLDocumentWriter example for the details.
   */
  public void output(PrintWriter outthrows TransformerConfigurationException,
      TransformerException {
    TransformerFactory factory = TransformerFactory.newInstance();
    Transformer transformer = factory.newTransformer();

    transformer.transform(new javax.xml.transform.dom.DOMSource(document),
        new javax.xml.transform.stream.StreamResult(out));
  }
}

   
  
Related examples in the same category
1. Using Initialization Parameters Servlet
2. Init Param Servlet
3. Servlet Mapping In Web XML
4. Define welcome files for web application
5. Parse a web.xml file using the SAX2 API
www.java2java.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.