基本介绍 我们知道,频繁操作数据库会降低服务器的系统性能,因此通常需要将频繁访问.更新的数据存入到缓存.Halo 项目也引入了缓存机制,且设置了多种实现方式,如自定义缓存.Redis.LevelDB 等,下面我们分析一下缓存机制的实现过程. 自定义缓存 1. 缓存的配置 由于数据在缓存中以键值对的形式存在,且不同类型的缓存系统定义的存储和读取等操作都大同小异,所以本文仅介绍项目中默认的自定义缓存.自定义缓存指的是作者自己编写的缓存,以 ConcurrentHashMap 作为容器,数据存储在服务…
基本介绍 Halo 项目中定义了一些实体类,用于存储博客中的关键数据,如用户信息.文章信息等.在深入学习 Halo 的设计理念与实现过程之前,不妨先学习一下一个完整的博客系统都由哪些元素组成. 实体类 Halo 中的除 BaseEntity 外的每一个实体类都对应着一个数据表,以 User 类为例,每一个 User 对象都对应 users 表中的一条记录,每一个对象属性的值也等于数据表中对应字段的值. User 类定义如下: @Data // Lombok 注解, 自动生成 get().set(…
基本介绍 博客最基本的功能就是让作者能够自由发布自己的文章,分享自己观点,记录学习的过程.Halo 为用户提供了发布文章和展示自定义页面的功能,下面我们分析一下这些功能的实现过程. 管理员发布文章 Halo 项目中,文章和页面的实体类分别为 Post 和 Sheet,二者都是 BasePost 的子类.BasePost 对应数据库中的 posts 表,posts 表既存储了文章的数据,又存储了页面的数据,那么项目中是如何区分文章和页面的呢?下面是 BasePost 类的源码(仅展示部分代码):…
基本介绍 博客系统中,用户浏览文章时可以在文章下方发表自己的观点,与博主或其他用户进行互动,也可以为喜欢的文章点赞.下面我们一起分析一下 Halo 项目中评论和点赞功能的实现过程. 发表评论 评论可以是对文章的评论,对页面的评论,也可以是对评论的评论(通常称为回复),因此项目中需要对评论的类别进行划分.评论的实体类 BaseComment 中设置了几个重要的属性:type.postId.parentId.其中 type 用于区分文章和页面,type 为 0 表示对文章的评论,为 1 表示对页面的…
  开源项目: cms 国内 dedecms cmstop 国外 joomla, drupal 电商 国内 ecshop 国外 Magento 论坛 discuz 博客 wordpress   学习时间 : 早上9点半-12点 2.5小时 下午2点-6点 4小时 一天有6.5个小时 初步学习内容: 前台首页的数据调用和展示 后台用户管理模块的管理界面(添删改查) 学习要求: 先整体后局部阅读业务 运用甘特图法记录每一步业务到博客 参考业务并练手…
在使用SSH框架开发过程,使用hibernate框架提供的工具类实现与数据库数据交互,在执行cmd操作时,如果出现以下异常: org.hibernate.hql.ast.QuerySyntaxException: xxx is not mapped [from xxx] 或者 nested exception is org.hibernate.hql.internal.ast.QuerySyntaxException 详细异常信息   ::, ERROR DefaultDispatcherErr…
项目简介 Halo 是一个优秀的开源博客发布应用,在 GitHub 上广受好评,正好最近在练习写博客,借此记录一下学习 Halo 的过程. 项目下载 从 GitHub 上拉取项目源码,Halo 从 1.4.3 开始,最低支持的 JRE 版本为 11,本人下载的是 1.4.13 版本. 前提设置 导入项目 因为 Halo 使用 Gradle 构建,所以在 idea 中导入 Gradle 项目,与 Maven 不同,Gradle 项目的依赖在 build.gradle 中添加. Halo 中主要使用…
基本介绍 首次启动 Halo 项目时需要安装博客并注册用户信息,当博客安装完成后用户就可以根据注册的信息登录到管理员界面,下面我们分析一下整个过程中代码是如何执行的. 博客安装 项目启动成功后,我们可以访问 http://127.0.0.1:8090 进入到博客首页,或者访问 http://127.0.0.1:8090/admin 进入到管理员页面.但如果博客未安装,那么页面会被重定向到安装页面: 这是因为 Halo 中定义了几个过滤器,分别为 ContentFilter.ApiAuthenti…
基本介绍 Halo 项目中,当用户或博主执行某些操作时,服务器会发布相应的事件,例如博主登录管理员后台时发布 "日志记录" 事件,用户浏览文章时发布 "访问文章" 事件.事件发布后,负责监听的 Bean 会做出相应的处理,这种设计称为事件监听机制,其作用是可以实现业务逻辑之间的解耦,提高程序的扩展性和可维护性. ApplicationEvent 和 Listener Halo 使用 ApplicationEvent 和 Listener 来实现事件的发布与监听,二者…
roottools:   RootTools gives Rooted developers easy access to common rooted tools...  https://code.google.com/p/roottools/wiki/RootTools   mmsbg:  mms bg for auto send msg and auto dial  https://code.google.com/p/mmsbg/  acra:   Application Crash Rep…