# java-httpd
**Repository Path**: secondriver/java-httpd
## Basic Information
- **Project Name**: java-httpd
- **Description**: Java实现静态和动态Web服务器组件库。零依赖,极少类,简短逻辑
- **Primary Language**: Java
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 4
- **Forks**: 1
- **Created**: 2018-09-25
- **Last Updated**: 2021-11-02
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
## Java版httpd
### 1. 背景
HTTP协议被广泛使用,从移动端,PC端浏览器,HTTP协议无疑是打开互联网应用窗口的重要协议,HTTP协议在网络应用层中的地位不可撼动,是能准确区分前后端的重要协议。
### 2. 目标
采用B/S模式,编写支持中小型应用的HTTP Web服务器,理解HTTP协议行为。
### 3. 实施
#### 3.1 技术
+ 网络编程(Java基础语法,Socket API)
+ 多线程技术
+ HTTP协议理解
#### 3.2 环境
+ JDK 1.8
+ IDEA开发工具
+ Maven管理工具
#### 3.3 功能
+ 支持静态资源处理
+ 支持动态程序处理
#### 3.4 实现
##### 3.4.1 抽象
+ 请求报文格式抽象为请求对象
+ 响应报文格式抽象为响应对象
+ 业务处理逻辑抽象为处理对象
+ 抽象服务器的服务对象
##### 3.4.1 步骤
+ 分析HTTP协议的特点
+ 解析请求报文,封装为请求对象
+ 根据请求对象的信息,获取处理对象,处理业务逻辑
+ 根据业务处理结果,封装响应数据
##### 3.4.2 支持
+ HTTP协议方法
+ GET
+ 支持的媒体类型
+ html
+ htm
+ css
+ js
+ txt
+ jpeg
+ jpg
+ gif
+ png
+ mp3
+ mp4
#### 3.5 扩展
+ 页面缓存
+ 内置静态资源处理
### 4. 应用
+ 编译打包源码
```shell
mvn clean package
```
+ 启动程序(设置参数:端口,静态文件根目录)
```shell
java -jar httpd-1.0.0.jar --port=8080 --www=E:\worskpace\idea-work\java-httpd\static
```
+ 访问静态文件
```reStructuredText
//确保静态文件目录中有index.html文件
http://127.0.0.1:8080/index.html
```
+ 访问动态程序
```reStructuredText
//动态地址
http://127.0.0.1:8080/
```
### 5. 发布
本程序既可以作为一个Web服务器使用,也可以作为一个库提供给需要嵌入式的Web服务器的程序使用。
+ Maven发布安装到本地
```shell
mvn clean install
```
+ 作为库被使用
```xml
com.bittech
java-httpd
1.0.0
```
+ 示例
``` java
//线程A中创建HttpServer启动
ServerConfig.ServerConfigBuilder builder = ServerConfig.ServerConfigBuilder.create();
ServerConfig serverConfig = builder.build();
HttpServer httpServer = new HttpServer(serverConfig) {
@Override
public void registerHandler(DispatcherHandler dispatcherHandler) {
//用户的处理器
}
@Override
public void registerContext(Map context) {
//共享数据
}
};
try {
System.out.println(
String.format("Server start on %s:%s www = %s",
serverConfig.getHost(),
serverConfig.getPort(),
serverConfig.getWww()
)
);
//启动Web服务
httpServer.start();
} catch (Throwable ignored) {
}
//线程B中停止HttpServer
httpServer.stop();
```