WebAppConfigpublic class WebAppConfig extends Object 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. |
Fields Summary |
---|
Document | document |
Constructors Summary |
---|
public WebAppConfig(File configfile)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.
// 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 e)
throws 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);
|
Methods Summary |
---|
public void | addServlet(java.lang.String servletName, java.lang.String className)This method adds a new name-to-class mapping in in the form of
a sub-tree to the document.
// 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 = (Element)servletnodes.item(0);
// Insert the new node before the first servlet node
firstServlet.getParentNode().insertBefore(newNode, firstServlet);
| public java.lang.String | getServletClass(java.lang.String servletName)This method looks for specific Element nodes in the DOM tree in order
to figure out the classname associated with the specified servlet name
// 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 = (Element)servletnodes.item(i);
// Get the first <servlet-name> tag within the <servlet> tag
Element nameTag = (Element)
servletTag.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 =((Text)nameTag.getFirstChild()).getData().trim();
// If this <servlet-name> tag has the right name
if (servletName.equals(name)) {
// Get the matching <servlet-class> tag
Element classTag = (Element)
servletTag.getElementsByTagName("servlet-class").item(0);
if (classTag != null) {
// Extract the tag's text as above, and return it
Text classTagContent = (Text)classTag.getFirstChild();
return classTagContent.getNodeValue().trim();
}
}
}
// If we get here, no matching servlet name was found
return null;
| public static void | main(java.lang.String[] args)The main method creates and demonstrates a WebAppConfig object
// 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));
| public void | output(java.io.PrintWriter out)Output the DOM tree to the specified stream as an XML document.
See the XMLDocumentWriter example for the details.
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer();
transformer.transform(new javax.xml.transform.dom.DOMSource(document),
new javax.xml.transform.stream.StreamResult(out));
|
|