# servlet-filter **Repository Path**: java-lesson/servlet-filter ## Basic Information - **Project Name**: servlet-filter - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-01 - **Last Updated**: 2026-05-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Servlet Filter 英雄管理系统 ## 📋 项目简介 这是一个基于 Java Servlet 和 Filter 技术的 Web 应用程序,实现了英雄信息的 CRUD(增删改查)管理功能。项目重点展示了 Filter 过滤器在实际开发中的应用,包括身份验证、字符编码处理和请求日志记录等功能。 ## 🛠️ 技术栈 - **Java**: 25 - **Servlet**: Jakarta Servlet 6.1.0 - **数据库**: MySQL (使用 mysql-connector-j 9.4.0) - **JSP/JSTL**: Jakarta Servlet JSP JSTL 3.0.2 - **构建工具**: Maven - **测试框架**: JUnit 5.13.2 - **打包方式**: WAR ## 📁 项目结构 ``` servlet-filter/ ├── src/main/java/ │ ├── model/ # 实体类包 │ │ └── Hero.java # 英雄实体类 │ ├── dao/ # 数据访问层 │ │ └── HeroDAO.java # 英雄数据访问对象 │ ├── com/example/servlet/filter/ # Servlet 控制器 │ │ ├── LoginServlet.java # 登录处理 │ │ ├── HeroListServlet.java # 英雄列表查询 │ │ ├── HeroAddServlet.java # 添加英雄 │ │ ├── HeroEditServlet.java # 编辑英雄页面 │ │ ├── HeroUpdateServlet.java # 更新英雄 │ │ └── HeroDeleteServlet.java # 删除英雄 │ └── filter/ # 过滤器包 │ ├── AuthFilter.java # 身份验证过滤器 │ ├── CharacterEncodingFilter.java # 字符编码过滤器 │ └── LoggingFilter.java # 日志记录过滤器 ├── src/main/webapp/ # Web 资源目录 │ ├── login.jsp # 登录页面 │ ├── list.jsp # 英雄列表页面 │ ├── add.jsp # 添加英雄页面 │ ├── edit.jsp # 编辑英雄页面 │ ├── css/ # 样式文件 │ └── images/ # 图片资源 └── pom.xml # Maven 配置文件 ``` ## 🎯 核心功能 ### 1. 用户认证 - 登录验证(用户名:admin,密码:123) - Session 会话管理 - 未登录用户自动重定向到登录页面 ### 2. 英雄管理(CRUD) - **查询**: 分页显示英雄列表 - **新增**: 添加新英雄信息 - **修改**: 编辑现有英雄信息 - **删除**: 删除指定英雄 ### 3. 过滤器功能 #### AuthFilter(身份验证过滤器) - **路径**: `/*`(拦截所有请求) - **功能**: - 检查用户登录状态 - 放行静态资源(CSS、JS、图片等) - 放行登录相关页面 - 未登录用户重定向到 login.jsp #### CharacterEncodingFilter(字符编码过滤器) - **路径**: `/*`(拦截所有请求) - **功能**: - 统一设置请求和响应的字符编码为 UTF-8 - 防止中文乱码问题 - 支持通过配置自定义编码 #### LoggingFilter(日志记录过滤器) - **路径**: `/*`(拦截所有请求) - **功能**: - 记录每个请求的详细信息 - 获取客户端真实 IP 地址(支持代理) - 记录请求时间、方法、URL 等信息 - 格式:`[时间] IP: xxx, Method: xxx, URL: xxx` ## 🗄️ 数据库设计 ### 数据库配置 - **数据库名**: sakila - **连接地址**: jdbc:mysql://127.0.0.1:3306/sakila - **用户名**: root - **密码**: root ### 英雄表(hero) | 字段名 | 类型 | 说明 | |--------|------|------| | id | INT | 主键,自增 | | name | VARCHAR | 英雄名称 | | hp | FLOAT | 生命值 | | damage | INT | 攻击力 | ## 🚀 快速开始 ### 前置要求 - JDK 25 或更高版本 - Maven 3.6+ - MySQL 数据库 - Servlet 容器(如 Tomcat 10+) ### 安装步骤 1. **克隆项目** ```bash git clone cd servlet-filter ``` 2. **配置数据库** - 创建数据库 `sakila` - 创建 hero 表: ```sql CREATE TABLE hero ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(255), hp FLOAT, damage INT ); ``` - 修改 `HeroDAO.java` 中的数据库连接信息(如需) 3. **编译打包** ```bash mvn clean package ``` 4. **部署运行** - 将生成的 WAR 文件部署到 Tomcat - 或使用 IDE 直接运行 5. **访问应用** - 浏览器访问:`http://localhost:8080/servlet-filter/login.jsp` - 默认账号:admin - 默认密码:123 ## 📝 使用说明 ### 登录系统 1. 打开登录页面 2. 输入账号和密码 3. 点击登录按钮 ### 管理英雄 #### 查看列表 - 登录后自动跳转到英雄列表页面 - 支持分页浏览(首页、上一页、下一页、末页) #### 添加英雄 1. 访问添加页面 2. 填写英雄信息(名称、生命值、攻击力) 3. 提交表单 #### 编辑英雄 1. 在列表中点击 "edit" 链接 2. 修改英雄信息 3. 提交更新 #### 删除英雄 1. 在列表中点击 "delete" 链接 2. 确认删除操作 ## 🔧 开发说明 ### 包命名规范 - `model`: 实体类包,存放数据模型 - `dao`: 数据访问层,负责数据库操作 - `com.example.servlet.filter`: Servlet 控制器 - `filter`: 过滤器包,实现各种过滤功能 ### 过滤器执行顺序 由于三个过滤器都拦截 `/*` 路径,它们的执行顺序由容器决定。建议的顺序: 1. LoggingFilter(记录请求) 2. CharacterEncodingFilter(设置编码) 3. AuthFilter(验证权限) ### 静态资源放行 AuthFilter 使用正则表达式放行以下静态资源: - CSS 文件:`.css` - JavaScript 文件:`.js` - 图片文件:`.png`, `.jpg`, `.jpeg`, `.gif`, `.ico` ## 📌 注意事项 1. **数据库连接**: 确保 MySQL 服务已启动,并正确配置连接信息 2. **字符编码**: 项目统一使用 UTF-8 编码,数据库也应设置为 UTF-8 3. **Session 超时**: 可根据需要调整 Session 超时时间 4. **安全性**: - 当前为演示项目,密码硬编码在代码中 - 生产环境应使用加密存储和更安全的认证机制 5. **SQL 注入**: 项目使用了 PreparedStatement 防止 SQL 注入 ## 🐛 常见问题 ### 1. 中文乱码 - 确保 CharacterEncodingFilter 正常工作 - 检查数据库字符集是否为 UTF-8 - 确认 JSP 页面设置了正确的 charset ### 2. 无法登录 - 检查用户名和密码是否正确(admin/123) - 确认 Session 是否正常工作 - 检查 AuthFilter 是否正确放行登录页面 ### 3. 数据库连接失败 - 确认 MySQL 服务已启动 - 检查数据库名称、用户名、密码是否正确 - 确认 MySQL Connector 驱动已正确加载 ## 📄 许可证 本项目仅用于学习和教学目的。 ## 👨‍💻 作者 Java 课程示例项目 - Servlet Filter 技术应用 --- **提示**: 这是一个教学示例项目,展示了 Servlet 和 Filter 的核心概念和实际应用。