- 编写webserver
请求响应式编程
涉及:
- OOP
- 容器
- I/O
- 多线程
- 网络编程
- XML解析
- 反射
- HTML
- HTTP
- 反射
理解:
1、原来new对象需要JVM在类加载器中加载类模子,现在由使用者准备该模子
2、java类中的各种结构(方法、属性、构造器、类名)映射成一个个的java对象。利用反射可以对一个类进行解剖,反射是框架设计的灵魂。
/**
* 反射:java类中的各种结构(方法、属性、构造器、类名)映射成一个个的java对象。
* 利用反射可以对一个类进行解剖,反射是框架设计的灵魂。
* 1、获取Class对象
* 三种方式:推荐Class.forName("包名.类名")
* 2、可以动态创建
* clz.getConstructor().newInstance();
*
*/
public class ReflectTest {
public static void main(String[] args) throws Exception {
//三种方式
//1、对象.getClass()
Class clz=new Iphone().getClass();
//2、类.class()
clz=Iphone.class;
//3、Class.forName("包名.类名")
clz=Class.forName("com.sxt.server.basic.Iphone");//灵活性提高,编译的时候该类不需要存在,可以动态的传递。后期一版传子类
//创建对象
/*Iphone iphone2=(Iphone) clz.newInstance();//jdk9不推荐
System.out.println(iphone2);*/
//jdk9推荐
Iphone iphone2=(Iphone) clz.getConstructor().newInstance();
System.out.println(iphone2);
}
}
class Iphone{
public Iphone() {
}
}
- XML解析
解析:
<?xml version="1.0" encoding="UTF-8" ?>
<persons>
<person>
<name>至尊宝</name>
<age>9000</age>
</person>
<person>
<name>白晶晶</name>
<age>7000</age>
</person>
</persons>
代码为:
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注册处理器
PersonHandler handler=new PersonHandler();
//5、解析
parse.parse(Thread.currentThread().getContextClassLoader()
.getResourceAsStream("com/sxt/server/basic/p.xml")
,handler);
handler.printPersons();
}
}
class PersonHandler extends DefaultHandler {
private List<Person> persons;
private Person person;
private String tag;//存储操作的标签
@Override
public void startDocument() throws SAXException {
persons=new ArrayList<Person>();
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
System.out.println(qName+"---->解析开始")