# zhihu
仿照知乎做的一个Java web项目,是一个sns+资讯的web应用。使用SpringBoot+Mybatis+velocity开发。数据库使用了redis和mysql,同时加入了异步消息等进阶功能,同时使用python爬虫进行数据填充。
内容包括:
开发工具和Java语言介绍
Spring入门,模板语法和渲染
数据库交互iBatis集成
用户注册登录管理
问题发布,敏感词和js标签过滤,问题广场
评论中心,站内信
Redis入门以及Redis实现赞踩功能
异步设计和站内邮件通知系统
sns关注功能,关注和粉丝列表页实现
timeline实现
python语法简介,pip工具介绍
python爬虫实现数据抓取和导入
站内全文搜索
项目测试和部署,课程总结回顾
# quick-start
[1项目基本配置](#项目基本配置)
[2基本框架开发](#基本框架开发)
[3数据库配置和首页的创建](#数据库配置和首页的创建)
[4用户注册登录以及使用token](#用户注册登录以及使用token)
[5新增发表问题功能,并防止xss注入以及敏感词过滤](#新增发表问题功能,并防止xss注入以及敏感词过滤)
[6新增评论和站内信功能](#新增评论和站内信功能)
[7新增点赞和点踩功能,使用Redis实现](#新增点赞和点踩功能,使用Redis实现)
[8新增异步消息功能,新增邮件发送组件](#新增异步消息功能,新增邮件发送组件)
[9新增关注功能,开发关注页面和粉丝页面](#新增关注功能,开发关注页面和粉丝页面)
[10Timeline与新鲜事,推拉模式下的Feed流](#Timeline与新鲜事,推拉模式下的Feed流)
[11使用python爬虫爬取知乎和v2ex数据,充实网站信息](#使用python爬虫爬取知乎和v2ex数据,充实网站信息)
[12使用solr搭建全文搜索引擎,开发知乎的全文搜索功能](#使用solr搭建全文搜索引擎,开发知乎的全文搜索功能)
[13单元测试与压力测试,项目打包及部署等收尾工作](#单元测试与压力测试,项目打包及部署等收尾工作)
[14产品功能扩展以及技术深度扩展](#产品功能扩展以及技术深度扩展)
## 项目基础配置
创建git仓库,本地配置idea并测试pull和push。
创建SpringBoot工程,导入Web,Velocity和Aop的包。
生成Maven项目,pom.xml包含上述依赖,应用名称是toutiao,小组id是com.nowcoder。
## 基本框架开发
创建基本的controller,service和model层。
controller中使用注解配置,requestmapping,responsebody基本可以解决请求转发以及响应内容的渲染。responsebody自动选择viewresolver进行解析。
使用pathvariable和requestparam传递参数。
使用velocity编写页面模板,注意其中的语法使用。常用$!{}和${}
使用http规范下的httpservletrequest和httpservletresponse来封装请求和相响应,使用封装好的session和cookie对象。
使用重定向的redirectview和统一异常处理器exceptionhandler
AOP和IOC
IOC解决对象实例化以及依赖传递问题,解耦。
AOP解决纵向切面问题,主要实现日志和权限控制功能。
aspect实现切面,并且使用logger来记录日志,用该切面的切面方法来监听controller。
## 数据库配置和首页的创建
使用mysql创建数据库和表,建议自己写一下sql到mysql命令行跑一下。
加入mybatis和mysql的maven仓库,注意,由于现在版本的springboot不再支持velocity进而导致我使用较早版本的springboot,所以这里提供一可以正常运行的版本设置。
springboot使用1.4.0
mybatis-spring-boot-starter使用1.2.1
mysql-connector-java使用5.1.6
亲测可用。
接下来写controller,dao和service。注意mybatis的注解语法以及xml的配置要求,xml要求放在resource中并且与dao接口在相同的包路径下。
application.properties增加spring配置数据库链接地址
两个小工具:
ViewObject:方便传递任何数据到
VelocityDateTool:velocity自带工具类
写好静态文件html css和js。并且注意需要配置
spring.velocity.suffix=.html 保证跳转请求转发到html上
spring.velocity.toolbox-config-location=toolbox.xml
至此主页基本完成,具体业务逻辑请参考代码。
## 用户注册登录以及使用token
完成用户注册和登录的controller,service和dao层代码
新建数据表login_ticket用来存储ticket字段。该字段在用户登录成功时被生成并存入数据库,并被设置为cookie,
下次用户登录时会带上这个ticket,ticket是随机的uuid,有过期时间以及有效状态。
使用拦截器interceptor来拦截所有用户请求,判断请求中是否有有有效的ticket,如果有的话则将用户信息写入Threadlocal。
所有线程的threadlocal都被存在一个叫做hostholder的实例中,根据该实例就可以在全局任意位置获取用户的信息。
该ticket的功能类似session,也是通过cookie写回浏览器,浏览器请求时再通过cookie传递,区别是该字段是存在数据库中的,并且可以用于移动端。
通过用户访问权限拦截器来拦截用户的越界访问,比如用户没有管理员权限就不能访问管理员页面。
配置了用户的webconfiguration来设置启动时的配置,这里可以将上述的两个拦截器加到启动项里。
配置了json工具类以及md5工具类,并且使用Java自带的盐生成api将用户密码加密为密文。保证密码安全。
数据安全性的保障手段:https使用公钥加密私钥解密,比如支付宝的密码加密,单点登录验证,验证码机制等。
ajax异步加载数据 json数据传输等。
## 新增发表问题功能,并防止xss注入以及敏感词过滤
新增Question相关的model,dao,service和controller。
发布问题时检查标题和内容,防止xss注入,并且过滤敏感词。
防止xss注入直接使用HTMLutils的方法即可实现。
过滤敏感词首先需要建立一个字典树,并且读取一份保存敏感词的文本文件,然后初始化字典树。
最后将过滤器作为一个服务,让需要过滤敏感词的服务进行调用即可。
## 新增评论和站内信功能
首先建立表comment和message分别代表评论和站内信。
依次开发model,dao,service和controller。
评论的逻辑是每一个问题下面都有评论,显示评论数量,具体内容,评论人等信息。
消息的逻辑是,两个用户之间发送一条消息,有一个唯一的会话id,这个会话里可以有多条这两个用户的交互信息。
通过一个用户id获取该用户的会话列表,再根据会话id再获取具体的会话内的多条消息。
逻辑清楚之后,再加上一些附加功能,比如显示未读消息数量,根据时间顺序排列会话和消息。
本节内容基本就是业务逻辑的开发,没有新增什么技术点,主要是前后端交互的逻辑比较复杂,前端的开发量也比较大。
## 新增点赞和点踩功能,使用Redis实现
首先了解一下redis的基础知识,数据结构,jedis使用等。
编写list,string,hashmap,set,sortset的测试用例,熟悉jedis api。
开发点踩和点赞功能,在此之前根据业务封装好jedis的增删改查操作,放在util包中
根据需求确定key字段,格式是 like:实体类型:实体id 和 dislike:实体类型:实体id 这样可以将喜欢一条新闻的人存在一个集合,不喜欢的存在另一个集合。通过统计数量可以获得点赞和点踩数。
一般点赞点踩操作是先修改redis的值并获取返回值,然后再异步修改mysql数据库的likecount
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
仿照知乎做的一个Java web项目,是一个sns+资讯的web应用。使用SpringBoot+Mybatis+velocity开发。数据库使用了redis和mysql,同时加入了异步消息等进阶功能,同时使用python爬虫进行数据填充。 软件开发设计:应用软件开发、系统软件开发、移动应用开发、网站开发C++、Java、python、web、C#等语言的项目开发与学习资料 硬件与设备:单片机、EDA、proteus、RTOS、包括计算机硬件、服务器、网络设备、存储设备、移动设备等 操作系统:LInux、树莓派、安卓开发、微机操作系统、网络操作系统、分布式操作系统等。此外,还有嵌入式操作系统、智能操作系统等。 网络与通信:数据传输、信号处理、网络协议、网络与通信硬件、网络安全网络与通信是一个非常广泛的领域,它涉及到计算机科学、电子工程、数学等多个学科的知识。 云计算与大数据:包括云计算平台、大数据分析、人工智能、机器学习等,云计算是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需提供给计算机和其他设备。
资源推荐
资源详情
资源评论
收起资源包目录
仿照知乎做的一个Java web项目,是一个sns+资讯的web应用。.zip (210个子文件)
letter.css 430KB
index.css 311KB
result.css 302KB
detail.css 299KB
bootstrap.min.css 111KB
login.css 63KB
captcha.gif 13KB
spinner2.8f60205d.gif 1KB
header.html 10KB
feeds.html 9KB
profile.html 8KB
detail.html 8KB
index.html 6KB
followees.html 3KB
followers.html 3KB
login.html 3KB
result.html 2KB
letter.html 2KB
letterDetail.html 1KB
home.html 1KB
js.html 852B
login_exception.html 41B
footer.html 15B
JedisAdapter.java 12KB
MultiThreadTests.java 8KB
FollowController.java 7KB
SensitiveService.java 5KB
QuestionController.java 4KB
IndexController.java 4KB
FollowService.java 4KB
LoginController.java 4KB
MessageController.java 4KB
UserService.java 3KB
FeedHandler.java 3KB
HomeController.java 3KB
EventConsumer.java 3KB
SearchService.java 3KB
MailSender.java 3KB
InitDatabaseTests.java 3KB
SearchController.java 2KB
CommentController.java 2KB
FeedController.java 2KB
LikeController.java 2KB
PassportInterceptor.java 2KB
WendaUtil.java 2KB
EventModel.java 2KB
MessageDAO.java 2KB
LikeService.java 2KB
FollowHandler.java 2KB
LikeServiceTests.java 2KB
CommentDAO.java 1KB
RedisKeyUtil.java 1KB
Message.java 1KB
LikeHandler.java 1KB
QuestionService.java 1KB
CommentService.java 1KB
Comment.java 1KB
LoginRequiredInterceptor.java 1KB
Feed.java 1KB
MessageService.java 1KB
Question.java 1KB
AddQuestionHandler.java 1KB
LoginExceptionHandler.java 1KB
QuestionDAO.java 1KB
User.java 1KB
LogAspect.java 1KB
WendaWebConfiguration.java 944B
UserDAO.java 938B
LoginTicket.java 937B
FeedDAO.java 852B
LoginTicketDAO.java 828B
SettingController.java 822B
EventProducer.java 813B
FeedService.java 694B
WendaApplication.java 684B
WendaApplicationTests.java 494B
HostHolder.java 422B
ViewObject.java 375B
TimelineService.java 336B
EventType.java 326B
WendaService.java 270B
EntityType.java 225B
EventHandler.java 214B
d6842d77b4bda238e0db09217e3d2f8d_270x225.jpg 38KB
df4aa616fdcfbd861c010ff71aaef95c_b.jpg 34KB
cafae465b8ea283498c69ab9757f86ba_xl.jpg 29KB
b85ddd8aa_xl.jpg 28KB
badaaf312e59c125928bd1ea2d4b5a51_b.jpg 27KB
9cfe980ca44e38bd9b0e5c3dee5b0f3e_270x225.jpg 26KB
0cffb89d0b0bd4e726ae54b212a31c3b_200x112.jpg 19KB
f1148eb1c7170cabb0a78dad73b590f6_200x112.jpg 17KB
c898060535edfdbe4147d2135c29787f_200x112.jpg 17KB
aa49b7ceff22ea68ca5f747115cd17af_200x112.jpg 17KB
0b856ef58f76b7c83a0e130f6ef71281_200x112.jpg 16KB
975baaf73fd76f48ce6f05e19b176878_xl.jpg 16KB
fb6c4dd60a9f19f5fcd8265395e11f9e_200x112.jpg 16KB
c07f969d8dcc6251ef114fe6b1a9a563_200x112.jpg 16KB
facfb45ac94f174655695853d4470bac_200x112.jpg 16KB
23cace5cf60f39dbc095bd7a12b2cfad_200x112.jpg 14KB
fb05f15bf8bffd1590df442ff6ba7812_200x112.jpg 13KB
共 210 条
- 1
- 2
- 3
资源评论
妄北y
- 粉丝: 1w+
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功