# MyCat **Repository Path**: Eryou66/my-cat ## Basic Information - **Project Name**: MyCat - **Description**: 轻量级web容器 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-08-24 - **Last Updated**: 2026-08-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # My Tomcat - 简易Web服务器 这是一个使用 Java 编写的轻量级 Web 服务器项目,模拟了 Apache Tomcat 的核心功能。它不依赖外部 Web 容器(如 Tomcat 本身),实现了底层的 Socket 通信、线程池管理以及 Servlet 规范的简单应用。 ## 主要功能特性 1. **Socket 通信**:基于 `java.net.Socket` 实现 HTTP 协议的底层通信。 2. **线程池管理**:使用 `ExecutorService` 实现线程池,高效处理并发请求 (`HandleSocketServicePool`)。 3. **Servlet 容器支持**:实现了 `HttpServlet` 和 `Servlet` 接口规范。 4. **注解驱动 (Annotation)**:支持通过 `@WebServlet` 注解自动扫描并注册 Servlet (`SearchUtil`)。 5. **静态资源响应**:支持响应 HTML 页面。 6. **自定义注解**:包含一套自定义注解体系用于演示和实现 Servlet 映射 (`@WebServlet`, `@Hello`)。 ## 项目结构 ``` src/main/java/com/dz ├── MyTomcat.java # 程序入口 ├── common # 公共组件 │ ├── HandleSocketServicePool.java # 线程池管理 │ ├── ServerRunnableTarget.java # 线程任务目标 │ ├── ServletRequest.java # 请求对象封装 │ └── ServletResponse.java # 响应对象封装 ├── config # 配置类 │ └── ServletMappingConfig.java # Servlet 映射配置 ├── server # 核心服务 │ └── Server.java # 服务器核心逻辑(启动、调度) ├── servlet # Servlet 规范接口 │ ├── HttpServlet.java # Servlet 抽象基类 │ └── Servlet.java # Servlet 接口 ├── util # 工具类 │ ├── FileUtil.java # 文件操作工具 │ ├── ResponseUtil.java # 响应头构建工具 │ └── SearchUtil.java # 类扫描工具 ├── webapp # Web 应用示例 │ └── myweb # 业务 Servlet │ ├── MyFirstServlet.java # 示例 Servlet 1 │ └── MySecondServlet.java # 示例 Servlet 2 └── webServletAnno # 注解定义与示例 ├── Demo.java # 注解使用示例 ├── Hello.java # 自定义注解 └── WebServlet.java # Servlet 映射注解 src/main/webapp └── index.html # 静态首页 ``` ## 核心类说明 ### com.dz.server.Server 服务器的核心类,负责监听端口 (`start`)、处理连接 (`handle`) 并将请求分发给对应的 Servlet (`dispatcher`)。 ### com.dz.common.HandleSocketServicePool 负责管理一个线程池,当有新的 Socket 连接接入时,将任务提交给线程池执行,避免了为每个请求创建线程的开销。 ### com.dz.util.SearchUtil 提供类扫描功能。在项目启动时,它会扫描指定包路径,查找使用了 `@WebServlet` 注解的类,并将其注册到 Servlet 映射表中。 ### com.dz.servlet.HttpServlet 所有自定义 Servlet 的父类。子类需要继承它并重写 `doGet` 或 `doPost` 方法来处理业务逻辑。 ## 如何运行 1. **构建项目**: 确保你的环境中已配置好 Maven。可以在项目根目录下执行: ```bash mvn clean package ``` 2. **启动服务器**: 运行 `com.dz.MyTomcat` 类的 `main` 方法。 服务器默认会启动在 **8888** 端口。 3. **访问示例**: 启动成功后,你可以通过浏览器访问以下地址来测试内置的 Servlet: * `http://localhost:8888/myFirst` * `http://localhost:8888/mySecond` * `http://localhost:8888/` (访问 index.html) ## 快速开发你的 Servlet 在你的包下新建一个类,继承 `HttpServlet` 并使用 `@WebServlet` 注解标记 URL 路径: ```java package com.dz.myapp; import com.dz.servlet.HttpServlet; import com.dz.webServletAnno.WebServlet; import com.dz.common.ServletRequest; import com.dz.common.ServletResponse; @WebServlet(url = "/hello") public class MyServlet extends HttpServlet { @Override public void doGet(ServletRequest request, ServletResponse response) throws Exception { response.write("Hello from My Tomcat!"); } @Override public void doPost(ServletRequest request, ServletResponse response) { // 处理 POST 请求 } } ``` 重启服务器后,即可通过 `http://localhost:8888/hello` 访问你的新 Servlet。