【程序源代码】仿知乎网站问答
- 2026-09-26 06:48:35
【程序源代码】仿知乎网站问答关注微信公众号:【源码部落】,获取开源项目分享。 

一、项目介绍
项目模仿知乎的核心问答功能,用户可以注册登录、发布问题、回答问题、评论、点赞、收藏、站内信等。项目使用经典的 Spring Boot + Thymeleaf + MyBatis + Redis 技术栈构建,是一个完整的传统 MVC 架构 Web 应用,打包为 WAR 部署到 Tomcat。


二、项目结构目录
仿知乎网站问答源码开源版/├── pom.xml # Maven 配置文件,管理项目依赖├── mvnw / mvnw.cmd # Maven Wrapper 脚本├── toutiao.sql # 数据库初始化脚本(MySQL)├── toutiao.iml # IntelliJ IDEA 模块配置├── 打包命令.txt # 打包及部署说明├── src/│ ├── main/│ │ ├── java/com/nowcoder/│ │ │ ├── ToutiaoApplication.java # Spring Boot 启动入口│ │ │ ├── aspect/│ │ │ │ └── LogAspect.java # 日志切面(AOP)│ │ │ ├── async/ # 异步事件处理│ │ │ │ ├── EventConsumer.java # 事件消费者│ │ │ │ ├── EventHandler.java # 事件处理接口│ │ │ │ ├── EventModel.java # 事件模型│ │ │ │ ├── EventProducer.java # 事件生产者│ │ │ │ ├── EventType.java # 事件类型枚举│ │ │ │ └── handler/│ │ │ │ ├── LikeHandler.java # 点赞事件处理│ │ │ │ └── LoginExceptionHandler.java # 登录事件处理│ │ │ ├── configuration/│ │ │ │ └── ToutiaoWebConfiguration.java # Web配置(拦截器注册)│ │ │ ├── controller/ # 控制器层│ │ │ │ ├── HomeController.java # 首页/问题/回答/收藏│ │ │ │ ├── IndexController.java # 测试控制器(已注释禁用)│ │ │ │ ├── LoginController.java # 注册/登录/登出│ │ │ │ ├── NewsController.java # 资讯/评论/图片/回答│ │ │ │ ├── LikeController.java # 点赞/踩/收藏│ │ │ │ ├── MessageController.java # 站内信│ │ │ │ ├── SettingController.java # 设置(占位)│ │ │ │ └── TestHomeController.java│ │ │ ├── dao/ # 数据访问层(MyBatis)│ │ │ │ ├── UserDAO.java│ │ │ │ ├── NewsDAO.java│ │ │ │ ├── AnswerDAO.java│ │ │ │ ├── CommentDAO.java│ │ │ │ ├── LikeDAO.java│ │ │ │ ├── LoginTicketDAO.java│ │ │ │ └── MessageDAO.java│ │ │ ├── model/ # 实体模型│ │ │ │ ├── User.java / News.java / Answer.java│ │ │ │ ├── Comment.java / Like.java / Message.java│ │ │ │ ├── LoginTicket.java / EntityType.java│ │ │ │ ├── HostHolder.java # 当前登录用户持有器│ │ │ │ └── ViewObject.java # 视图对象│ │ │ ├── service/ # 业务逻辑层│ │ │ │ ├── UserService.java # 用户注册/登录/登出│ │ │ │ ├── NewsService.java # 资讯管理/图片上传│ │ │ │ ├── CommentService.java # 评论│ │ │ │ ├── LikeService.java # 点赞/收藏│ │ │ │ ├── MessageService.java # 站内信│ │ │ │ ├── QiniuService.java # 七牛云存储│ │ │ │ └── ToutiaoService.java│ │ │ ├── interceptor/ # 拦截器│ │ │ │ ├── LoginRequiredInterceptor.java # 登录验证拦截│ │ │ │ └── PassportInterceptor.java # 身份认证拦截│ │ │ └── util/ # 工具类│ │ │ ├── JedisAdapter.java # Redis 操作封装│ │ │ ├── RedisKeyUtil.java # Redis Key 生成│ │ │ ├── MailSender.java # 邮件发送│ │ │ └── ToutiaoUtil.java # 通用工具(JSON/MD5/图片路径)│ │ └── resources/│ │ ├── application.properties # Spring Boot 配置│ │ ├── mybatis-config.xml # MyBatis 配置│ │ ├── toolbox.xml│ │ ├── com/nowcoder/dao/ # MyBatis Mapper XML│ │ │ ├── AnswerDAO.xml│ │ │ └── NewsDAO.xml│ │ ├── static/ # 静态资源│ │ │ ├── scripts/ (jquery, wangEditor, 业务JS)│ │ │ ├── styles/ (bootstrap, font-awesome, style)│ │ │ ├── images/│ │ │ └── fonts/│ │ └── templates/ # Thymeleaf 模板│ │ ├── home.html / detail.html / login.html│ │ ├── question.html / letter.html / letterDetail.html│ │ ├── header.html / footer.html│ │ └── mails/welcome.html│ └── test/ # 测试代码│ ├── java/com/nowcoder/ (测试类)│ └── resources/init-schema.sql└── target/ # 编译输出 └── ROOT.war # 打包产物三、项目主要技术框架
四、项目主要功能
1. 用户系统(LoginController + UserService)
注册:邮箱+密码+用户名+简称注册,密码 MD5 加盐加密 登录:Ticket 模式认证,Cookie 持久化,支持"记住我" 登出:Ticket 状态失效 用户信息:中文名、简称、头像、等级(lv)、三种收藏夹(star/star2/star3)
2. 问答系统(HomeController + NewsController)
发布问题:标题、内容(link)、图片、分类标签(type) 问题详情:展示问题内容、关联回答、评论、相关推荐 回答问题:富文本回答,回答后用户等级+1 分类浏览:按 type 标签筛选问题 搜索:全站搜索问题
3. 评论系统(NewsController + CommentService)
对问题评论 对回答评论 评论数自动统计更新
4. 点赞/收藏(LikeController + LikeService)
问题点赞/踩:Redis 计数,异步事件通知 回答点赞/踩:同上 三级收藏:3个收藏夹,支持收藏/取消
5. 站内信(MessageController + MessageService)
会话列表 消息详情 发送消息 未读消息计数
6. 异步事件(async 包)
基于 Redis 的事件队列(生产者-消费者模式) 点赞事件:点赞后异步通知 登录事件:登录后发送欢迎邮件 事件类型:LIKE、COMMENT、LOGIN、MAIL
7. 图片上传(NewsService + QiniuService)
本地存储(Windows/Linux 路径区分) 七牛云存储(可选)
8. 基础设施
AOP 日志:LogAspect 记录请求日志 拦截器:PassportInterceptor(身份认证)+ LoginRequiredInterceptor(登录校验) HostHolder:ThreadLocal 持有当前登录用户
五、项目安装和部署
环境要求
JDK 1.8 MySQL 5.7+(实际使用 8.0.21 驱动) Redis Tomcat 8.0+(WAR 部署) Maven 3.x IntelliJ IDEA(推荐)
安装步骤
1. 导入数据库
-- 创建数据库CREATE DATABASE toutiao DEFAULT CHARACTER SET utf8;-- 导入 toutiao.sql 文件USE toutiao;SOURCE /path/to/toutiao.sql;数据库包含 7 张表:user、news、answer、comment、like、login_ticket、message、question
2. 修改配置文件
编辑 src/main/resources/application.properties,修改数据库连接:
spring.datasource.url=jdbc:mysql://localhost:3306/toutiao?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=truespring.datasource.username=rootspring.datasource.password=你的数据库密码如需使用 Redis,检查 JedisAdapter.java 中的 Redis 连接配置。
3. 编译打包
mvn clean package -Dmaven.test.skip=true打包后生成 target/ROOT.war。
4. 部署运行
方式一(IDEA 开发运行):直接运行 ToutiaoApplication.main(),Spring Boot 内嵌 Tomcat 启动。
方式二(WAR 部署到 Tomcat):
将 target/ROOT.war复制到 Tomcat 的 webapps/目录启动 Tomcat,访问 http://localhost:8080/
方式三(命令行运行):
java -jar target/ROOT.war5. 预置账号
SQL 中预置了一个管理员账号:
用户名: dkewl.com密码:MD5 加密(盐值 3cdec)
六、总结
这是一个功能较完整的仿知乎问答系统,采用 Spring Boot 1.3.5 经典技术栈,包含用户体系、问答、评论、点赞收藏、站内信、异步事件、图片上传等核心模块。代码结构清晰(Controller-Service-DAO 三层架构),适合学习 Spring Boot 全栈开发。需要注意 Spring Boot 版本较老(1.3.5),如需生产使用建议升级到较新版本。
这个项目源码获取方式
关注公众号,回复:仿知乎网站问答
本文来自网友投稿或网络内容,如有侵犯您的权益请联系我们删除,联系邮箱:wyl860211@qq.com 。