虽然在很多地方都简单提到 ZrLog 的使用的技术,但都比较零散,无法很快直观的感受到 ZrLog 的全貌,于是就有了这篇文章,代码里面很多地方都是有注释了,结合着看理解会更快
X (关系不错的前同事): 厨师是负责炒菜的,为什么还要造锅?
Z:可能是锅太大,或者太重吧,刚开始并没有想自己写一个,毕竟这样的程序太多了,当然很多都是 PHP 的,比如用的最广泛就是 wordpress,emlog,后起的 typecho。一开始都在 wordpress 和 emlog 中用过去用过来的,最后由 PHP 语法并不熟悉,在使用 emlog 的过程中被无故的挂码了(当时 hexo 还没有那么流行),wordpress 实在臃肿,加上当时是安装在 window 环境上面的,打开一个首页都在 3 秒以上,于是就自己写一个吧,前期丑就丑一点吧(反正没人看)
其实程序一开始是 SpringMVC 的,只是后面 JFinal 作者一直在开源社区很活跃,抱着学习的态度,于是就把框架改为了 JFinal 的了,然后就一直使用到现在。两者各有优劣,JFinal 注重的是轻,Spring 说是一种框架,更多时候是在约束大家代码的风格。让 3 年的工作经验写的代码 1 年的也可以很快的看懂
也想过使用 sqlite,不过总感觉不主流,还是选择了开源免费的 MySQL
这部分仅个人理解,有偏差欢迎指出
由于接触 ZrLog 的不一定很熟悉 JFinal,还是啰嗦几句。JFinal 是一款十分轻量级的 web 框架。同时也提供了对数据库访问层的支持。作者比较喜欢all in one
的做法,在 JFinal3.0 后也推出了自己模板。同时针对某些特定的场景提供了相应的支持,比如 HttpKit
这样的工具类
其实这种东西看一看代码就明白的东西,但考虑到受众的差异,还是说下,如果项目还是使用 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 目前 Java 源代码代码行数约 5000 行。不算多,静下来看半天后,基本就能看清全貌了,数据库8
张表,依赖的 jar 仅19
个。打成 war 后,仅7m
(比 wordpress 还小,但是比其它 PHP 博客程序还是要大,Java 本身基因决定了)
涉及的功能能完全胜任一个写博客人的需求了,私有文章当笔记用,同时还提供了强大的主题和插件的支持,在线更新升级,数据库备份,图片云存储,全站静态资源 cdn 等功能
纸上得来终觉浅,还是看码最管用
有收获,记得点下 star 收藏下
博客在消亡,先让坚持下来的人 Java 程序员能用上 Java 写的博客程序,然后让懂或不懂 PHP 的人多一种选择(独乐乐,不如众乐乐)
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.