# 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
本项目仅供学习和研究使用。