2020-08-04

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;
}		

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值