# 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(); ```