虽然在很多地方都简单提到 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 的人多一种选择(独乐乐,不如众乐乐)
1
yzmm 2018-01-07 23:27:37 +08:00
我的博客用的 Spring MVC,感觉几百行代码就搞定了。http://javaweb.org/
|
2
Macolor21 2018-01-08 04:46:32 +08:00 via Android
@yzmm 请问如何分离客户端和服务端,还有服务端 markdown 的支持?刚学 spring...
|
3
90xchun OP @Macolor21 分离客户端和服务端?表示不懂你想问什么呢,markdown 有服务端转化也有浏览器转化,程序用的后者。毕竟编辑器提供了。
通常指的前后端分离是指的后端开发人员仅提供数据接口,前端开发人员做用户的交互。 |
5
yzmm 2018-01-12 14:22:08 +08:00
@90xchun 因为没空博客使用的 kindeditor,不过后期打算把最近写的 markdown 编辑器集成进去 https://github.com/anbai-inc/ab-editor,@Macolor21 刚把编辑器代码传到 git 了我存的是 md,用 markdown-it 渲染。所谓几百行代码是说的逻辑代码。
|
6
yzmm 2018-01-12 14:22:43 +08:00
|
7
Macolor21 2018-01-13 03:28:04 +08:00 via Android
@90xchun 谢谢大神回答,其实就是想用 servlet+jsp+前端写个简陋(文章展示+写文章)前后端分离就是展示和写文章,写文章需要登录验证。之前没注意,今天细看了帖子,你的项目应该就是我目前的项目的进化进化版(初衷是记录寒假的学习生活,并一步步用新技术改写,完善它)
|