04 2022 档案
摘要:我收到的赞 重构点赞功能 以用户为key,记录点赞数量 increment(key),decrement(key) 开发个人主页 以用户为key,查询点赞数量 一、重构点赞功能 增加RedisKeyUtil public class RedisKeyUtil { //key的分隔符 private
阅读全文
摘要:点赞功能 点赞 支持对帖子、评论点赞。 第1次点赞,第2次取消点赞。 首页点赞数量 统计帖子的点赞数量。 详情页点赞数量 统计点赞数量。 显示点赞状态。 一、点赞 为了提高Key的可用性,编写一个RedisKeyUtil来拼接RedisKey public class RedisKeyUtil {
阅读全文
摘要:全局异常控制日志 需求: 帖子模块 评论模块 消息模块 AOP的概念: Aspect Oriented Programing,即面向方面(切面)编程。 AOP是一种编程思想,是对OOP的补充,可以进一步提高编程的效率。 AOP的术语: AOP的实现 AspectJ AspectJ是语言级的实现,它扩
阅读全文
摘要:Springboot整合redis 引入依赖 spring-boot-starter-data-redis 配置Redis 配置数据库参数 编写配置类,构造RedisTemplate 访问Redis redisTemplate.opsForValue() redisTemplate.opsForHa
阅读全文
摘要:统一异常处理 @ControllerAdvice 用于修饰类,表示该类是Controller的全局配置类。 在此类中,可以对Controller进行如下三种全局配置:异常处理方案、绑定数据方案、绑定参数方案。 @ExceptionHandler 用于修饰方法,该方法会在Controller出现异常后
阅读全文
摘要:发送私信 发送私信 采用异步的方式发送私信。 发送成功后刷新私信列表。 设置已读 访问私信详情时, 将显示的私信设置为已读状态。 还是以数据层业务层和表现层的顺序开发。 数据层 首先在MessageMapper里新增两个方法,一个新增消息,一个修改消息状态的方法。 //新增消息 int insert
阅读全文
摘要:新增评论 数据层 增加评论数据。 修改帖子的评论数量。 业务层 处理添加评论的业务:先增加评论、再更新帖子的评论数量。 表现层 处理添加评论数据的请求。 1、数据访问层 CommentMapper int insertComment(Comment comment); 1 <insert id="i
阅读全文
摘要:私信列表 私信列表 查询当前用户的会话列表, 每个会话只显示一条最新的私信。 支持分页显示。 私信详情 查询某个会话所包含的私信。 支持分页显示。 首先看一下数据库的设计,私信相当于一个对话功能,那么两个人就组成一个对话,这段对话里有A发给B的消息,有B发给A的消息,那么我们把发送者和接收者的id拼
阅读全文
摘要:显示评论 数据层 根据实体查询一页评论数据。 根据实体查询评论的数量。 业务层 处理查询评论的业务。 处理查询评论数量的业务。 表现层 显示帖子详情数据时,同时显示该帖子所有的评论数据。 1、实体类: public class Comment { private int id; private in
阅读全文
摘要:事务管理 回顾 什么是事务 事务是由N步数据库操作序列组成的逻辑执行单元,这系列操作要么全执行,要么全放弃执行。 事务的特性(ACID) 原子性(Atomicity):事务是应用中不可再分的最小执行体。 一致性(Consistency):事务执行的结果,须使数据从一个一致性状态,变为另一个一致性状态
阅读全文
摘要:帖子详情 DiscussPostMapper DiscussPostService DiscussPostController index.html 在帖子标题上增加访问详情页面的链接 discuss-detail.html 处理静态资源的访问路径 复用index.html的header区域 显示标
阅读全文
摘要:发布帖子 AJAX Asynchronous JavaScript and XML 异步的JavaScript与XML,不是一门新技术,只是一个新的术语。 使用AJAX,网页能够将增量更新呈现在页面上,而不需要刷新整个页面。 虽然X代表XML,但目前JSON的使用比XML更加普遍。 https://
阅读全文
摘要:敏感词过滤器 前缀树 名称:Trie、字典树、查找树 特点:查找效率高,消耗内存大 应用:字符串检索、词频统计、字符串排序等 敏感词过滤器 定义前缀树 根据敏感词,初始化前缀树 编写过滤敏感词的方法 一、前缀树 1.定义前缀树 前缀树的定义只在,过滤敏感词当中用到,故将其定义为一个内部类 //前缀树
阅读全文
摘要:检查登录状态 使用拦截器 在方法前标注自定义注解 拦截所有请求,只处理带有该注解的方法 自定义注解 常用的元注解: @Target、@Retention、@Document、@Inherited 如何读取注解: Method.getDeclaredAnnotations () Method.getA
阅读全文
摘要:上传文件 上传文件 请求:必须是POST请求 表单:enctype=“multipart/form-data” Spring MVC:通过 MultipartFile 处理上传文件 开发步骤 访问账号设置页面 上传头像 获取头像 开发步骤 ①访问账号设置页面 前端部分,已写好**.html**文件
阅读全文
摘要:显示登录信息 拦截器示例 定义拦截器,实现HandlerInterceptor 配置拦截器,为它指定拦截、排除的路径 拦截器应用 在请求开始时查询登录用户 在本次请求中持有用户数据 在模板视图上显示用户数据 在请求结束时清理用户数据 一、拦截器示例 1.以定义拦截器,实现HandlerInterce
阅读全文
摘要:开发登录功能 访问登录页面 点击顶部区域内的链接,打开登录页面。 登录 验证账号、密码、验证码。 成功时,生成登录凭证,发放给客户端。 失败时,跳转回登录页。 退出 将登录凭证修改为失效状态。 跳转至网站首页。 一、登录 ①首先将登录凭证封装成一个类LoginTicket public class
阅读全文
摘要:验证码功能 Kaptcha 导入 jar 包 编写 Kaptcha 配置类 生成随机字符、生成图片 一、导入依赖 生成验证码 <dependency> <groupId>com.github.penggle</groupId> <artifactId>kaptcha</artifactId> <ve
阅读全文
摘要:会话管理 HTTP的基本性质 HTTP是简单的 HTTP是可扩展的 HTTP是无状态的,有会话的 Cookie 是服务器发送到浏览器,并保存在浏览器端的一小块数据。 浏览器下次访问该服务器时,会自动携带块该数据,将其发送给服务器。 Session 是JavaEE的标准,用于在服务端记录客户端信息。
阅读全文
摘要:2.2&2.3开发注册功能 访问注册页面 点击顶部区域内的链接,打开注册页面。 提交注册数据 通过表单提交数据。 服务端验证账号是否已存在、邮箱是否已注册。 服务端发送激活邮件。 激活注册账号 点击邮件中的链接,访问服务端的激活服务。 一、访问注册页面 1.点击顶部区域链接,打开注册页面 ①建立一个
阅读全文
摘要:发送邮件 邮箱设置 启用客户端SMTP服务 Spring Email 导入 jar 包 邮箱参数配置 使用 JavaMailSender 发送邮件 模板引擎 使用 Thymeleaf 发送 HTML 邮件 1.前置服务 开启邮箱pop3/SMTP服务 ①导入相关jar包 <dependency> <
阅读全文
摘要:Springboot搭建 使用idea工具创建springboot项目 第一步: 后续直接点next,下一步 直到进入依赖选择页面,Web选择Spring Web,Template Engines选择 Thymeleaf (模板引擎若在项目建立之后需要改动,可在application.yml进行配置
阅读全文
摘要:开发社区首页 开发流程 1次请求的执行过程 分步实现 开发社区首页,显示前10个帖子 开发分页组件,分页显示所有的帖子 我们首先开发社区首页,显示帖子,先查看一下存帖子的表,在navicat右边可以查看DDL(Data Definition Language),也就是建表语句,workbench查看
阅读全文
