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

2018-01-07 16:11:15 +08:00
 90xchun

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

3720 次点击
所在节点    Java
9 条回复
yzmm
2018-01-07 23:27:37 +08:00
我的博客用的 Spring MVC,感觉几百行代码就搞定了。http://javaweb.org/
Macolor21
2018-01-08 04:46:32 +08:00
@yzmm 请问如何分离客户端和服务端,还有服务端 markdown 的支持?刚学 spring...
90xchun
2018-01-08 15:06:40 +08:00
@Macolor21 分离客户端和服务端?表示不懂你想问什么呢,markdown 有服务端转化也有浏览器转化,程序用的后者。毕竟编辑器提供了。

通常指的前后端分离是指的后端开发人员仅提供数据接口,前端开发人员做用户的交互。
90xchun
2018-01-08 15:10:36 +08:00
@yzmm 页面还是停简介的,哈哈。本来很简单的东西,还写 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 渲染。所谓几百行代码是说的逻辑代码。
yzmm
2018-01-12 14:22:43 +08:00
Macolor21
2018-01-13 03:28:04 +08:00
@90xchun 谢谢大神回答,其实就是想用 servlet+jsp+前端写个简陋(文章展示+写文章)前后端分离就是展示和写文章,写文章需要登录验证。之前没注意,今天细看了帖子,你的项目应该就是我目前的项目的进化进化版(初衷是记录寒假的学习生活,并一步步用新技术改写,完善它)
Macolor21
2018-01-13 03:33:04 +08:00
@yzmm 看来我得初步想法还是正确的,如果用转化的 html 感觉太过冗长。对了前辈。你的网站好像对手机端的适配不行,菜单无法点开,在最底部。(js 未加载到?)
yzmm
2018-01-13 09:53:40 +08:00
@Macolor21 比较懒,没移动端没怎么调。你可以在后端渲染 Markdown 也是可以的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/420824

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX