又造了一个锅 - ZrLog博客程序

原创
2018/01/07 15:59
阅读数 125

虽然在很多地方都简单提到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的人多一种选择(独乐乐,不如众乐乐)

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
返回顶部
顶部