# ServeltEasyDemo **Repository Path**: rinpu/servelt-easy-demo ## Basic Information - **Project Name**: ServeltEasyDemo - **Description**: 自己想学习Servlet底层写来玩的,对Servlet的简易实现 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-09 - **Last Updated**: 2026-02-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Servlet Easy Demo 基于原生 Socket 实现的一个轻量级 HTTP 框架,支持通过注解方式快速构建 HTTP 服务。 ## 项目简介 本项目是一个简化的 HTTP 框架,模仿 Servlet 规范设计,实现了以下核心功能: - **注解驱动**:使用 `@HttpMapping` 注解快速定义 HTTP 路由 - **多种请求方法**:支持 GET、POST、PUT、DELETE 等常见 HTTP 方法 - **请求解析**:自动解析请求行、请求头、查询参数和请求体 - **响应处理**:支持 JSON 和 HTML 格式响应 - **请求分发**:基于注解的请求映射和处理器调用 ## 技术栈 - Java 8+ - 无外部 HTTP 依赖,纯原生实现 ## 快速开始 ### 环境要求 - JDK 8 或更高版本 - Maven 3.x ### 构建项目 ```bash mvn clean package ``` ### 运行示例 创建主类并启动服务: ```java import rinpu.http.HttpApplication; import rinpu.http.annotation.HttpMapping; import rinpu.http.pojo.HttpRequest; import rinpu.http.pojo.HttpResponse; import rinpu.http.constant.RequestTypeConstant; import rinpu.http.constant.ResponseTypeConstant; public class DemoApplication { @HttpMapping(path = "/hello", method = RequestTypeConstant.GET, responseType = ResponseTypeConstant.HTML) public HttpResponse hello(HttpRequest request) { return new HttpResponse("

Hello, World!

"); } @HttpMapping(path = "/api/data", method = RequestTypeConstant.POST, responseType = ResponseTypeConstant.JSON) public HttpResponse getData(HttpRequest request) { String responseData = "{\"message\": \"success\"}"; return new HttpResponse(responseData); } public static void main(String[] args) { HttpApplication.run(DemoApplication.class); } } ``` ### 访问服务 启动后,通过浏览器或 curl 访问: ```bash curl http://localhost:8080/hello ``` ## 核心组件 ### 1. @HttpMapping 注解 用于定义 HTTP 请求路由: ```java @HttpMapping(path = "/your-path", method = "GET", responseType = "JSON") ``` - `path`:请求路径 - `method`:HTTP 方法(GET、POST、PUT、DELETE) - `responseType`:响应类型(JSON、HTML) ### 2. HttpApplication 应用入口类,提供静态方法启动服务: ```java HttpApplication.run(YourApplication.class); ``` ### 3. HttpRequest 封装 HTTP 请求信息,包括: - 请求路径、方法、版本 - 请求头 - 查询参数 - 请求体 ### 4. HttpResponse 封装 HTTP 响应信息,包括: - HTTP 版本、状态码、状态消息 - 响应头 - 响应体 提供静态工厂方法: - `success(String body, String contentType)`:成功响应 - `badRequest(String body)`:400 错误 - `notFound(String body)`:404 错误 - `error(String body)`:服务器错误 ### 5. HttpServer HTTP 服务器核心类,管理 Socket 连接和请求处理。 ### 6. HttpRequestManage 请求映射管理器,扫描指定包下的类并注册路由映射。 ### 7. HttpRequestParser HTTP 请求解析器,解析原始 HTTP 请求数据。 ### 8. HttpHandler HTTP 处理器,根据路由调用对应的处理方法。 ## 项目结构 ``` src/main/java/rinpu/http/ ├── HttpApplication.java # 应用入口 ├── annotation/ │ └── HttpMapping.java # 路由映射注解 ├── constant/ │ ├── RequestTypeConstant.java # 请求类型常量 │ └── ResponseTypeConstant.java # 响应类型常量 ├── pojo/ │ ├── HttpClass.java # HTTP类信息 │ ├── HttpRequest.java # HTTP请求对象 │ └── HttpResponse.java # HTTP响应对象 ├── request/ │ ├── filter/ │ │ └── HttpFilterInterface.java # 过滤器接口 │ ├── handler/ │ │ └── HttpHandler.java # HTTP处理器 │ ├── manage/ │ │ └── HttpRequestManage.java # 请求管理 │ ├── parser/ │ │ └── HttpRequestParser.java # 请求解析器 │ └── server/ │ └── HttpServer.java # HTTP服务器 ``` ## 扩展使用 ### 自定义响应 ```java @HttpMapping(path = "/custom", method = RequestTypeConstant.GET) public HttpResponse customResponse(HttpRequest request) { HttpResponse response = new HttpResponse(); response.setStatusCode(200); response.setVersion("HTTP/1.1"); response.setHeaders("Content-Type", "text/plain"); response.setBody("Custom Response"); return response; } ``` ### 处理查询参数 ```java @HttpMapping(path = "/search", method = RequestTypeConstant.GET) public HttpResponse search(HttpRequest request) { String keyword = request.getQueryParams("keyword"); // 使用查询参数进行处理 return new HttpResponse("Search for: " + keyword); } ``` ## License 本项目仅供学习和研究使用。