Http服务器
1.技术
- Java(基本语法、Socket接口)
- 多线程技术
- Http协议
2.环境
- JDK1.8
- IDEA管理工具
- Maven管理工具
3.功能
- 支持静态资源处理
- 支持动态程序处理
4.特点
- 采用线程池服务器可以接收多个浏览器的请求
- 用户可以输入访问主机端口号和静态资源路径,在浏览器根据需求向服务器发送请求数据
- 通过获取Socket输入流后解析请求数据,按照Http协议格式响应数据
- 静态资源文件类型支持支持html、txt、js、jpg、png、map3等,请求方法支持GET和POST,错误资源会返回404或405
- 可以作为一个库提供给需要嵌入式的Web服务器的程序使用
5.实现
5.1 抽象
- 请求报文格式抽象为请求对象
- 响应报文格式抽象为响应对象
- 业务处理逻辑抽象为处理对象
- 抽象服务器的服务对象
5.2 步骤
- 分析HTTP协议的特点
- 解析请求报文,封装为请求对象
- 根据请求对象的信息,获取处理对象,处理业务逻辑
- 根据业务处理结果,封装响应数据
6.具体过程
7.应用
- 编译打包源码 mvn clean package
- 启动程序(设置参数:端口,静态文件目录:
jar -jar java_httpd-1.0.0.jar --port=8080 --path=D:\Java
7.1静态资源
7.2 动态资源
7.3 资源错误
8.收获
- 学会使用Maven管理工具
- 掌握HTTP协议的具体格式及如何解析数据响应数据
- 将所学Java知识应用到实际,对自我知识掌握的检测
基于Java的http服务器代码实现流程图:
总结:可以支持静态资源处理和动态程序处理。
用户输入访问主机的端口号和静态资源存放路径。程序启动时,会将所有处理方式利用反射进行注册,添加到一个Map集合中<Sting,class>,Sting是“/time”,class是处理时间的处理器类对象。利用线程池对浏览器向服务器请求的线程进行管理,创建服务端Socket,浏览器向服务器请求数据时,首先获取Socket输入流读(getInputStream)取解析请求报文(首行 :请求方法 URL 版本; 协议头:key:value),封装请求对象,利用请求对象的请求方法,版本号,协议头来封装响应对象,根据请求数据的url来判断是否是静态资源(lake.jpg),如果是静态资源,根据静态资源存放路径new一个file对象,文件输入流利用数组缓冲区读取文件内容,并且写到响应对象的字节输出流(ByteArrayOutputStream);如果不是静态资源,在之前的处理器Map集合中找请求类型是否存在,get到该处理器对象,再根据不同的请求方法进行处理。如果资源错误,会有404或405页面。