⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 listservlets2.java

📁 JAVA 实例手册源码 Examples From Java Examples in a Nutshell, 2nd Edition
💻 JAVA
字号:
/* * Copyright (c) 2000 David Flanagan.  All rights reserved. * This code is from the book Java Examples in a Nutshell, 2nd 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. * You may distribute it non-commercially as long as you retain this notice. * For a commercial use license, or to purchase the book (recommended), * visit http://www.davidflanagan.com/javaexamples2. */package com.davidflanagan.examples.xml;import org.xml.sax.*;             // The main SAX packageimport org.xml.sax.helpers.*;     // SAX helper classesimport java.io.*;                 // For reading the input fileimport java.util.*;               // Hashtable, lists, and so on/** * Parse a web.xml file using the SAX2 API and the Xerces parser from the * Apache project. *  * This class extends DefaultHandler so that instances can serve as SAX2 * event handlers, and can be notified by the parser of parsing events. * We simply override the methods that receive events we're interested in **/public class ListServlets2 extends org.xml.sax.helpers.DefaultHandler {    /** The main method sets things up for parsing */    public static void main(String[] args) throws IOException, SAXException {	// Create the parser we'll use.  The parser implementation is a 	// Xerces class, but we use it only through the SAX XMLReader API	org.xml.sax.XMLReader parser=new org.apache.xerces.parsers.SAXParser();	// Specify that we don't want validation.  This is the SAX2	// API for requesting parser features.  Note the use of a	// globally unique URL as the feature name.  Non-validation is	// actually the default, so this line isn't really necessary.	parser.setFeature("http://xml.org/sax/features/validation", false);	// Instantiate this class to provide handlers for the parser and 	// tell the parser about the handlers	ListServlets2 handler = new ListServlets2();	parser.setContentHandler(handler);	parser.setErrorHandler(handler);	// Create an input source that describes the file to parse.	// Then tell the parser to parse input from that source	org.xml.sax.InputSource input=new InputSource(new FileReader(args[0]));	parser.parse(input);    }    HashMap nameToClass;     // Map from servlet name to servlet class name    HashMap nameToPatterns;  // Map from servlet name to url patterns    StringBuffer accumulator;                         // Accumulate text    String servletName, servletClass, servletPattern; // Remember text    // Called at the beginning of parsing.  We use it as an init() method    public void startDocument() {	accumulator = new StringBuffer();	nameToClass = new HashMap();	nameToPatterns = new HashMap();    }    // When the parser encounters plain text (not XML elements), it calls    // this method, which accumulates them in a string buffer.    // Note that this method may be called multiple times, even with no    // intervening elements.    public void characters(char[] buffer, int start, int length) {	accumulator.append(buffer, start, length);    }    // At the beginning of each new element, erase any accumulated text.    public void startElement(String namespaceURL, String localName,			     String qname, Attributes attributes) {	accumulator.setLength(0);    }    // Take special action when we reach the end of selected elements.    // Although we don't use a validating parser, this method does assume    // that the web.xml file we're parsing is valid.    public void endElement(String namespaceURL, String localName, String qname)    {	if (localName.equals("servlet-name")) {        // Store servlet name	    servletName = accumulator.toString().trim();	}	else if (localName.equals("servlet-class")) {  // Store servlet class	    servletClass = accumulator.toString().trim();	}	else if (localName.equals("url-pattern")) {    // Store servlet pattern	    servletPattern = accumulator.toString().trim();	}	else if (localName.equals("servlet")) {        // Map name to class	    nameToClass.put(servletName, servletClass);	}	else if (localName.equals("servlet-mapping")) {// Map name to pattern	    List patterns = (List)nameToPatterns.get(servletName);	    if (patterns == null) {		patterns = new ArrayList();		nameToPatterns.put(servletName, patterns);	    }	    patterns.add(servletPattern);	}    }    // Called at the end of parsing.  Used here to print our results.    public void endDocument() {	List servletNames = new ArrayList(nameToClass.keySet());	Collections.sort(servletNames);	for(Iterator iterator = servletNames.iterator(); iterator.hasNext();) {	    String name = (String)iterator.next();	    String classname = (String)nameToClass.get(name);	    List patterns = (List)nameToPatterns.get(name);	    System.out.println("Servlet: " + name);	    System.out.println("Class: " + classname);	    if (patterns != null) {		System.out.println("Patterns:");		for(Iterator i = patterns.iterator(); i.hasNext(); ) {		    System.out.println("\t" + i.next());		}	    }	    System.out.println();	}    }    // Issue a warning    public void warning(SAXParseException exception) {	System.err.println("WARNING: line " + exception.getLineNumber() + ": "+			   exception.getMessage());    }    // Report a parsing error    public void error(SAXParseException exception) {	System.err.println("ERROR: line " + exception.getLineNumber() + ": " +			   exception.getMessage());    }    // Report a non-recoverable error and exit    public void fatalError(SAXParseException exception) throws SAXException {	System.err.println("FATAL: line " + exception.getLineNumber() + ": " +			   exception.getMessage());	throw(exception);    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -