# hua_novel **Repository Path**: cdunls/hua_novel ## Basic Information - **Project Name**: hua_novel - **Description**: 小说网站,java框架课程期末项目 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2025-05-28 - **Last Updated**: 2026-03-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 纵横小说网 这是一个简单的基于Spring Boot的小说网站项目,提供小说阅读、收藏,以及小说数据爬取等功能。 ## 项目结构 ``` src/main/java/cn/book/bus/ ├── aop/ # 切面类,包括HTTP请求日志和通用日志切面 │ ├── HttpAspect.java │ └── LogAspect.java │ ├── callback/ # 回调接口,用于爬虫进度反馈 │ └── CrawlProgressCallback.java │ ├── common/ # 通用工具和数据传输对象 │ ├── Constant.java │ ├── DataGridView.java │ └── Result.java │ ├── config/ # 配置类 │ ├── AsyncConfig.java # 异步任务配置 │ ├── ControllerConfig.java # 控制器相关配置 │ ├── CorsConfiguration.java # 跨域配置 │ ├── MybatisPlusConfig.java # MyBatis-Plus配置 │ ├── LogConfig.java # 日志初始化与清理配置 │ └── WebMvcConfig.java # Web MVC配置 │ ├── controller/ # 控制器层 │ ├── ChapterController.java # 章节相关接口 │ ├── ErrorController.java # 错误页面处理 │ ├── FictionController.java # 小说和爬虫相关接口 │ ├── IndexController.java # 首页接口 │ ├── LoginController.java # 登录相关接口 │ └── ShelfController.java # 书架相关接口 │ ├── domain/ # 实体类(数据库映射对象) │ ├── Chapter.java │ ├── ChapterContent.java │ ├── Fiction.java │ ├── FictionCollection.java │ ├── FictionShelf.java │ └── User.java │ ├── dto/ # 数据传输对象 │ └── FictionDto.java │ ├── mapper/ # MyBatis Mapper接口 │ ├── ChapterContentMapper.java │ ├── ChapterMapper.java │ ├── FictionCollectionMapper.java │ ├── FictionMapper.java │ ├── FictionShelfMapper.java │ └── UserMapper.java │ ├── service/ # 服务层接口 │ ├── impl/ # 服务实现类 │ │ ├── ChapterContentServiceImpl.java │ │ ├── ChapterServiceImpl.java │ │ ├── DownloadServiceImpl.java │ │ ├── FictionCollectionServiceImpl.java │ │ ├── FictionServiceImpl.java │ │ ├── FictionShelfServiceImpl.java │ │ ├── UpdateFictionServiceImpl.java │ │ ├── UserServiceImpl.java │ │ └── WriteFictionServiceImpl.java │ │ │ ├── DownloadService.java │ ├── IChapterContentService.java │ ├── IChapterService.java │ ├── IFictionCollectionService.java │ ├── IFictionService.java │ ├── IFictionShelfService.java │ ├── IUserService.java │ ├── UpdateFictionService.java # 小说更新服务 │ └── WriteFictionService.java # 小说抓取服务 │ ├── test/ # 测试相关(回调测试等) │ ├── Callback.java │ ├── CallbackTest.java │ ├── Ricky.java │ └── Test.java │ ├── utils/ # 工具类 │ ├── FictionUtil.java │ ├── IpUtil.java │ ├── JsoupUtil.java # Jsoup爬虫工具 │ ├── Result.java # 统一返回结果封装 │ ├── TimeUtil.java │ └── VerifyCodeUtils.java │ └── BookApplication.java # 应用程序入口类 ``` ## 视图层结构 ``` src/main/resources/ ├── templates/ # Thymeleaf模板文件 │ ├── error/ # 错误页面 │ │ ├── 404.html # 404错误页面 │ │ └── 500.html # 500错误页面 │ │ │ ├── fiction/ # 小说相关页面 │ │ ├── info.html # 小说详情页 │ │ ├── list.html # 小说列表页 │ │ └── sys.html # 小说管理页面 │ │ │ ├── chapter/ # 章节相关页面 │ │ └── read.html # 章节阅读页面 │ │ │ ├── user/ # 用户相关页面 │ │ ├── login.html # 登录页面 │ │ └── register.html # 注册页面 │ │ │ ├── shelf/ # 书架相关页面 │ │ └── index.html # 书架首页 │ │ │ └── index.html # 网站首页 │ └── static/ # 静态资源 ├── css/ # 样式文件 │ ├── dandelion.css │ └── style.css │ ├── js/ # JavaScript文件 │ └── main.js │ └── images/ # 图片资源 ``` ## 主要功能模块 ### 1. 用户管理 - 用户注册、登录、信息修改 - 用户权限管理 ### 2. 小说管理 - 小说基本信息展示、搜索 - 小说分类 - 书架管理 (收藏) ### 3. 章节管理 - 章节内容阅读 - 章节列表展示 - 阅读进度更新 ### 4. 网络爬虫 (Crawler) 模块 - **单本小说抓取**: 根据小说首页URL抓取小说基本信息和所有章节内容。 - **批量小说抓取**: 根据小说列表页URL批量抓取多本小说。 - **爬取进度回调**: 提供爬取进度、完成和错误回调机制,支持异步抓取。 - **智能重试**: 内置针对网络异常和解析失败的重试机制,提高抓取成功率。 - **User-Agent轮换**: 模拟不同浏览器,减少被目标网站屏蔽的风险。 ### 5. 日志管理 - **统一日志记录**: 通过AOP切面统一记录Controller层的请求信息(URL、方法、IP、参数、执行时间)。 - **按日期滚动**: 日志文件按日期(`yyyy-MM-dd.log`)生成和存储,避免单个文件过大。 - **分类型日志**: 分别生成普通日志 (`book-yyyy-MM-dd.log`)、错误日志 (`error-yyyy-MM-dd.log`) 和爬虫日志 (`crawler-yyyy-MM-dd.log`)。 - **自动清理**: 定时任务自动清理超过30天的旧日志文件,节省磁盘空间。 ### 6. 视图层特性 - **模板引擎**: 使用Thymeleaf作为模板引擎 - **响应式设计**: 支持移动端和桌面端 - **页面交互**: - 异步数据加载 - 表单验证 - 动态内容更新 - 用户操作反馈 - **性能优化**: - 静态资源缓存 - 页面压缩 - 图片优化 - 延迟加载 - **安全特性**: - CSRF防护 - XSS防护 - 输入验证 - 会话管理 - **用户体验**: - 友好的错误提示 - 加载状态提示 - 操作反馈 - 页面过渡动画 - **移动端适配**: - 响应式布局 - 触摸事件支持 - 移动端特定功能 - 性能优化 - **主题支持**: - 可切换主题 - 自定义样式 - 暗黑模式支持 - 字体大小调整 ## 技术栈 - 后端框架:Spring Boot - 持久层框架:MyBatis-Plus - 数据库:MySQL - 项目管理:Maven - 网络爬虫:Jsoup - 日志框架:Logback, SLF4J - AOP:Spring AOP - 模板引擎:Thymeleaf ## 技术选型理由与运用 本项目在技术选型上,充分考虑了开发效率、系统性能、可维护性及功能扩展性,主要运用如下: - **Spring Boot**: 作为核心后端框架,Spring Boot极大地简化了Spring应用的搭建和开发过程。其"约定优于配置"的理念、内嵌的Tomcat服务器以及丰富的Starter POMs,使得项目能够快速启动和部署,专注于业务逻辑的实现。 - **MyBatis-Plus**: MyBatis-Plus是MyBatis的增强工具,提供了强大的CRUD操作(包括单表、多表查询),大大减少了SQL编写量。通过代码生成器等功能,进一步提升了开发效率,同时保留了MyBatis的灵活性,可以直接编写SQL进行复杂查询。 - **MySQL**: 关系型数据库的经典选择,以其稳定、高性能和广泛的支持而闻名。适用于本项目的结构化数据存储,如小说信息、章节内容、用户信息等。 - **Maven**: 作为项目管理和构建工具,Maven负责项目的依赖管理、编译、测试和打包。通过标准化的项目结构和生命周期,确保了项目构建的一致性和可重复性。 - **Jsoup**: 一个强大的Java HTML解析器,用于解析网络爬虫获取的HTML内容。其简洁的API和高效的解析能力,使得从网页中提取小说信息和章节内容变得简单高效。 - **Logback & SLF4J**: SLF4J作为日志门面,Logback作为具体的日志实现,提供了高性能、灵活且功能强大的日志记录能力。通过Logback的XML配置,实现了日志按日期滚动、分文件存储(如通用日志、错误日志、爬虫日志)以及自动清理过期日志等高级功能,便于系统监控和问题排查。 - **Spring AOP**: 利用Spring的AOP(面向切面编程)功能,实现了如请求日志记录等横切关注点的统一管理。通过在不修改核心业务逻辑代码的情况下,增强了系统的可观测性和维护性,例如自动记录Controller方法的请求信息和执行时间。 - **Thymeleaf**: 作为模板引擎,Thymeleaf提供了强大的模板处理能力,支持自然模板(可以在浏览器中直接打开预览),并且与Spring Boot完美集成。其丰富的表达式和工具类,使得页面开发更加高效。 ## 数据库设计 项目使用MySQL数据库,主要包含以下表: - user:用户信息表 - fiction:小说信息表 - chapter:章节信息表 - chapter_content:章节内容表 - fiction_collection:小说收藏表 - fiction_shelf:用户书架表 ## 接口说明 ### 用户接口 - 注册:`POST /user/register` - 登录:`POST /user/login` - 修改信息:`PUT /user/update` - 获取信息:`GET /user/info` ### 小说接口 - 获取小说列表:`GET /index` (首页), `GET /fiction/list` - 获取小说详情:`GET /chapter/info/{fiction_id}` - 搜索小说:`GET /fiction/search` ### 章节接口 - 获取章节列表:`GET /chapter/list/{fiction_id}` - 获取章节内容:`GET /chapter/read/{fiction_id}/{sort}` ### 爬虫接口 - 跳转爬虫管理页面: `GET /sys/index` - 抓取单本小说:`POST /sys/write` - 批量抓取小说:`POST /sys/writes` ## 开发环境要求 - JDK 1.8+ (推荐 JDK 11+) - Maven 3.6+ - MySQL 5.7+ - IDE:推荐使用IntelliJ IDEA ## 部署说明 1. **克隆项目到本地** ```bash git clone cd book ``` 2. **配置数据库连接信息** * 编辑 `src/main/resources/application.properties`,配置您的MySQL数据库连接信息。 3. **执行数据库脚本** * 使用MySQL客户端执行 `sql/org_fiction.sql` 文件,创建数据库表和初始数据。 4. **使用Maven打包** ```bash mvn clean package -DskipTests ``` 5. **运行Jar包** ```bash java -jar target/book-*.jar ``` * 请注意 `book-*.jar` 会根据实际版本号变化。 * 或者使用 Maven 命令直接运行: ```bash mvn spring-boot:run ``` ## 日志配置说明 项目采用 `Logback` 作为日志框架,通过 `src/main/resources/logback-spring.xml` 进行详细配置。日志文件默认输出到项目根目录下的 `logs/` 文件夹。 主要日志文件: - **`logs/book-yyyy-MM-dd.log`**: 记录所有 `INFO` 级别及以上的通用日志。 - **`logs/error-yyyy-MM-dd.log`**: 专门记录 `ERROR` 级别的日志,便于错误追踪。 - **`logs/crawler-yyyy-MM-dd.log`**: 记录所有与爬虫功能相关的日志,便于监控爬取过程。 所有日志文件都配置为按日期自动滚动,并保留最近30天的历史记录,过期日志会自动清理。