Java手写仿Tomcat的服务器过程详解

基础知识整理

手写一个仿Tomcat的服务器需要一些基本的基础知识,不需要掌握的有多高深,但是需要知道如何使用,最基础的Java语法这里就不再赘述,只大略的列举一下一些高级的知识点。
1、计算机网络知识:TCP、http
tcp是一种需要保持连接的网络协议,http是在建立了tcp连接的基础上,按照一定的语法书写相关的内容,可以理解为http就是一种模板,大家都按照这个模板书写要传输的信息,那样处理起来就没有限制了,可以自由的连接和通信。
2、Java反射
反射是Java高级中的一个知识点,通过Class类和一个类的类名,可以获得一个类的所有信息,比如构造方法,属性,注解等等,在这里我们使用反射来动态的创建某一个类的对象。
3、xml解析
xml是一种文件格式,在这个小项目中,我们在web.xml文件中配置每一个servlet的信息,xml文件的解析方法上一篇文章已经写过了,不懂的可以去看。

手写服务器

首先要理解一个服务器的本质,本质就是将一个设备的端口的tcp连接包装起来,对每一个连接和传输信息过程进行封装,让程序开发者不需要关注端口,数据解析,文件找不到等等的问题,只需要关注信息的内容。

结构划分

一个完善的服务器有很多的结构,这里我只写一个最简单的服务器,所以不会有什么优化的内容,只需要实现基本的功能就可以了。所以可以将一个服务器分为两个部分
第一个部分是网络的连接和传输部分,包括:接收客户端建立连接的请求,对客户端发来的http报文进行解析,将服务端要发送的信息进行封装,包装成一个http报文并将其返回给客户端。对一些错误情况进行处理,为每一个新建立的连接分配一个线程,主线程接着为其他客户端建立连接。
第二个部分是解析xml文件,为用户动态创建对象。包括:解析xml文件,通过url找到对应的类,使用反射机制创建对象并执行

代码解释

整个服务器可以简化为以下几类代码

  1. web.xml 用户在这里配置自己的servlet及其对应的url信息
  2. WebHandler.java 解析xml文件时需要使用的处理器
  3. WebContext.java 构建每一个url和其对应的servlet的Map
  4. WebApp.java 解析xml文件,构建servlet实例,对外提供方法
  5. Entity.java servlet路径及其名字的bean类
  6. Mapping.java servlet名字及其对应的url的bean类
  7. Servlet.java 接口,每一个servlet都要实现这个接口,这个接口作为servlet的引用类型
  8. server.java 创建一个服务器端的tcp连接对象,使用ServerSocket类。为每一个连接分配新的线程
  9. Dispatcher.java 线程对象,管理一个socket连接,server为每一个连接都分配一个Dispatcher线程
  10. Request.java 封装请求报文,解析请求报文中的参数
  11. Response.java 封装响应报文,用户只管向response中输入信息,response自动将信息封装成响应http报文

代码在这里:链接: https://pan.baidu.com/s/1My2bINrgklfYBKVfogG-mw 提取码: p9f4

你可能感兴趣的:(Java)