webserver
- 处理Client发过来的Request的请求头以及请求正文。
- 通过xml映射到类中,处理数据
- 通过response 处理返回头以及返回的内容,
反射(Class)
把Java类中的各种结构(方法、属性、构造器、类名)映射成一个个的Java对象。
// 获取class对象的三种方式
// 1. 对象.getClass();
Iphone iphone = new Iphone();
Class clz = iphone.getClass();
// 2. 类.class
Class clz1 = Iphone.class;
// 3. Class.forname("包名.类名")
Class clz2 = Class.forName("com.zh.server.basic.Iphone");
// 动态创建对象
Class clz1 = Class.forName("com.zh.server.basic.Iphone");
Iphone iphone1 = (Iphone)clz1.getConstructor().newInstance();
XML解析
<?xml version="1.0" encoding="utf-8"?>
<persons>
<person>
<name>至尊宝</name>
<age>9000</age>
</person>
<person>
<name>白晶晶</name>
<age>7000</age>
</person>
</persons>
SAX(simple API for XML)是一种XML解析的替代方法。相比于DOM,SAX是一种速度更快,更有效的方法。它逐行扫描文档,一边扫描一边解析。而且相比于DOM,SAX可以在解析文档的任意时刻停止解析,但任何事物都有其相反的一面,对于SAX来说就是操作复杂。
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import java.io.IOException;
/**
* @author 张辉
* @Description 熟悉SAX解析流程(XML:可扩展标记语言)
* @create 2020-06-07 11:35
*/
public class XmlTest01 {
public static void main(String[] args) throws Exception {
//SAX解析
//1. 获取解析工厂
SAXParserFactory factory = SAXParserFactory.newInstance();
//2. 从解析工厂获取解析器
SAXParser parse = factory.newSAXParser();
//3. 编写处理器
//4. 加载文档Document注册处理器
PHandler handler = new PHandler();
//5. 解析
parse.parse(Thread.currentThread().getContextClassLoader().getResourceAsStream("com/zh/server/basic/p.xml"), handler);
}
}
class PHandler extends DefaultHandler { // 处理器
@Override
public void startDocument() throws SAXException {
System.out.println("-------------------解析文档开始-------------------");
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
System.out.println(qName + "-->解析开始");
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
// XML解析最重要的地方
String contents = new String(ch,start,length).trim();
if(contents.length() > 0) {
System.out.println("内容为:" + contents);
} else {
System.out.println("内容为:" + "空");
}
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
System.out.println(qName + "-->解析结束");
}
@Override
public void endDocument() throws SAXException {
System.out.println("-------------------------解析文档结束--------------------------");
}
}
看了半天,webserver我觉得就是开放一个端口,然后通过这个端口访问到服务。
serverSocket = new ServerSocket(8888);
然后等待client访问,随时进行服务响应(accept监控端口)
Socket client = serverSocket.accept();
然后进行请求信息的处理Request,Response,
接下来进行XML解析,
XML 解析完成之后,进行反射,反射到相应的servlet,并将处理好的Request,Response传进去,之后进行servlet中的处理。
如果没有反射到相应的servlet,那么就返回一个标准的错误页面或者数据。
。。。。。处理过程优点恶心(写的时候简单,看的时候难),花了一个多小时终于把自己半月前抄的代码看懂了,还只是看懂了一部分。