虽然在很多地方都简单提到ZrLog的使用的技术,但都比较零散,无法很快直观的感受到ZrLog的全貌,于是就有了这篇文章,代码里面很多地方都是有注释了,结合着看理解会更快
初衷
X(关系不错的前同事): 厨师是负责炒菜的,为什么还要造锅?
Z:可能是锅太大,或者太重吧,刚开始并没有想自己写一个,毕竟这样的程序太多了,当然很多都是 PHP 的,比如用的最广泛就是 wordpress,emlog,后起的 typecho。一开始都在 wordpress和emlog中用过去用过来的,最后由PHP语法并不熟悉,在使用 emlog 的过程中被无故的挂码了(当时 hexo 还没有那么流行),wordpress 实在臃肿,加上当时是安装在 window 环境上面的,打开一个首页都在3秒以上,于是就自己写一个吧,前期丑就丑一点吧(反正没人看)
JFinal 而不是 SpringMVC
其实程序一开始是SpringMVC的,只是后面JFinal作者一直在开源社区很活跃,抱着学习的态度,于是就把框架改为了JFinal的了,然后就一直使用到现在。两者各有优劣,JFinal 注重的是轻,Spring说是一种框架,更多时候是在约束大家代码的风格。让3年的工作经验写的代码1年的也可以很快的看懂
数据库
也想过使用 sqlite,不过总感觉不主流,还是选择了开源免费的MySQL
JFinal部分
这部分仅个人理解,有偏差欢迎指出
由于接触ZrLog的不一定很熟悉JFinal,还是啰嗦几句。JFinal是一款十分轻量级的web框架。同时也提供了对数据库访问层的支持。作者比较喜欢all in one
的做法,在JFinal3.0后也推出了自己模板。同时针对某些特定的场景提供了相应的支持,比如 HttpKit
这样的工具类
基于Filter,而不是Servlet
其实这种东西看一看代码就明白的东西,但考虑到受众的差异,还是说下,如果项目还是使用war包,而不是使用的Springboot这样的jar包,了解controller层使用的框架,看web.xml
这个文件最为直接了
<filter>
<filter-name>JFinalFilter</filter-name>
<filter-class>com.jfinal.core.JFinalFilter</filter-class>
<init-param>
<param-name>configClass</param-name>
<param-value>com.zrlog.web.config.ZrlogConfig</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>JFinalFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
而Spring是基于Servlet的拦截
工作方式
Filter有init()的方法,JFinalFilter在init时读取configClass完成程序一些配置(还真是基于代码,而不是基于配置),一般都是数据库连接池,controller 的路由规则,实体与表映射,使用那种模板,一些比较通用的常量等。处理请求基于代码配置的路由就可以,当然也有自己 Interceptor, Plugin 这些
ZrLog部分
简约
ZrLog目前Java源代码代码行数约5000行。不算多,静下来看半天后,基本就能看清全貌了,数据库8
张表,依赖的jar仅19
个。打成war后,仅7m
(比wordpress还小,但是比其它PHP博客程序还是要大,Java本身基因决定了)
不简单
涉及的功能能完全胜任一个写博客人的需求了,私有文章当笔记用,同时还提供了强大的主题和插件的支持,在线更新升级,数据库备份,图片云存储,全站静态资源cdn等功能
定制
其它
纸上得来终觉浅,还是看码最管用
有收获,记得点下 star 收藏下
最后
博客在消亡,先让坚持下来的人Java程序员能用上Java写的博客程序,然后让懂或不懂PHP的人多一种选择(独乐乐,不如众乐乐)