package test.basic.servlet;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class XmlTest02 {
public static void main(String[] args) throws Exception{
//SAX解析
//1.获取解析工厂
SAXParserFactory factory = SAXParserFactory.newInstance();
//2.从解析工厂获取解析器
SAXParser parse = factory.newSAXParser();
//3.编写处理器
//4.加载文档Document注册处理器
WebHandler handler = new WebHandler();
//5.解析
parse.parse(Thread.currentThread().getContextClassLoader()
.getResourceAsStream("test/basic/p.xml"),handler);
//获取数据
WebContext context = new WebContext(handler.getEntitys(),handler.getMappings());
//假如你输入了/login或/g
String className = context.getClz("/login");
Class clz = Class.forName(className);
Servlet servlet = (Servlet)clz.getConstructor().newInstance();
System.out.println(servlet);
servlet.service();
}
}
class WebHandler extends DefaultHandler{
private List entitys = new ArrayList();
private List mappings = new ArrayList();
private Entity entity;
private Mapping mapping;
private String tag;//操作储存标签
private boolean isMapping = false;
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
if(null != qName) {
tag = qName;//存储标签名
if(qName.equals("servlet")) {
entity = new Entity();
isMapping = false;
}else if(qName.equals("servlet-mapping")) {
mapping = new Mapping();
isMapping = true;
}
}
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
String contents = new String(ch,start,length).trim();
if(null!=tag) { //处理了空的问题
if(isMapping) {//操作servlet-mapping
if(tag.equals("servlet-name")) {
mapping.setName(contents);
}else if(tag.equals("url-pattern")) {
mapping.addPattern(contents);
}else {//操作servlet
if(tag.equals("servlet-name")) {
entity.setName(contents);
}else if(tag.equals("servlet-class")) {
entity.setClz(contents);
}
}
}
}
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
if(null!=qName) { //处理了空的问题
if(qName.equals("servlet")) {
entitys.add(entity);
}else if (qName.equals("servlet-mapping"))
mappings.add(mapping);
}
tag = null;//丢弃tag
}
public List<Entity> getEntitys() {
return entitys;
}
public List<Mapping> getMappings() {
return mappings;
}
}