webserver

  1. 处理Client发过来的Request的请求头以及请求正文。
  2. 通过xml映射到类中,处理数据
  3. 通过response 处理返回头以及返回的内容,

反射(Class)

把Java类中的各种结构(方法、属性、构造器、类名)映射成一个个的Java对象。

  1. // 获取class对象的三种方式
  2. // 1. 对象.getClass();
  3. Iphone iphone = new Iphone();
  4. Class clz = iphone.getClass();
  5. // 2. 类.class
  6. Class clz1 = Iphone.class;
  7. // 3. Class.forname("包名.类名")
  8. 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,那么就返回一个标准的错误页面或者数据。

    。。。。。处理过程优点恶心(写的时候简单,看的时候难),花了一个多小时终于把自己半月前抄的代码看懂了,还只是看懂了一部分。