极速web开发框架jfinal作者詹波专访 -买球官网平台

2013-12-06  编辑 wangguo 评论(25条) 有77352人浏览
jfinal是一个基于java的极速web开发框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、restful,在拥有java语言所有优势的同时再拥有ruby、python等动态语言的开发效率。jfinal项目开发始于2011年初,并于2012年3月开源,采用对商业应用友好的apache 2.0协议。

项目地址:

本期我们采访了jfinal项目的作者詹波,请他来详细介绍这个项目。詹波曾任搜格信息技术有限公司java架构师,北京信息管理科学研究所cto,于2011年联合创办了微格网际科技有限公司,并担任旗下网校网的cto。

先做个自我介绍吧!

我叫詹波,英文名james,程序员一枚。爱好天文、物理、科幻、设计、编程、音乐、游戏、爬山、游泳。从小喜欢研究制造新东西,首次有用的制造是在八岁时独创的灭苍蝇手枪以及全新设计的火药玩具枪。对未知世界有着强烈的好奇心,终极理想是做一名自由发明家,财务自由后计划首先研究空间发电(非永动机)。

jfinal是一个什么样的项目?提供了哪些功能?

jfinal是基于java语言的极速web orm框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、restful。在拥有java语言所有优势的同时再拥有ruby、python、php等动态语言的开发效率!为开发者节约更多时间,去陪恋人、家人和朋友。

jfinal的主要特点如下:

  • mvc架构,设计精巧,使用简单;
  • 遵循coc原则,零配置,无xml;
  • activerecord支持,使数据库开发极致快速;
  • 自动加载修改后的java文件,开发过程中无需重启web server;
  • aop支持,拦截器配置灵活,功能强大;
  • plugin体系结构,扩展性强;
  • 多视图支持,支持freemarker、jsp、velocity;
  • 强大的validator后端校验功能;
  • 功能齐全,拥有struts2的绝大部分功能;
  • 体积小仅180k,且无第三方依赖;

jfinal项目是怎么诞生的?

jfinal始于2011年创业项目的实际需要。创业前曾使用rails开发项目,被rails的开发效率深深吸引,但无奈于rails开发者稀有难招,以及ruby语言固有的缺点,故决心打造jfinal,将静态语言与动态语言两者优点结合起来用于创业项目。

jfinal中的j代表java语言,final有最终的意思,希望jfinal能成为java开发者的最终选择。final还有稳固不变的意思,也因喜欢事物本质,热爱永恒的真理。

jfinal的设计思想和理念是什么?有哪些创新点?

jfinal 遵循大道至简的设计思想。主要创新点:

  • 微内核 全方位扩展架构;
  • db record 模式;
  • cpi模式;
  • activerecord模式java实现方式;
  • api引导式配置;
  • api引导validate;
  • 采用scanner classloader结合jetty实现热加载;
  • 极简设计,核心代码约2000行实现web mvc orm。

介绍一下jfinal的架构?jfinal实现极速开发的原理是什么?又是如何实现的?

jfinal采用微内核全方位扩展架构,全方位是指其扩展方式在空间上的表现形式。

jfinal由handler、interceptor、controller、render、plugin五大部分组成,以action为参照,handler处在扩展的最外围,interceptor处在更贴近action的周围,controller承载action处在扩展的中心,render处于action后端,plugin处于action侧边位置。



jfinal实现极速开发主要是因为走的极简设计风格:零配置、代码量少、开发体验连续、无第三方依赖、概念最少化等等。

要实现极简设计,必须要为架构注入灵魂,系统才有自己的极简性格。设计前先在脑海中形成一整套的极简设计思想,让这套思想融入到灵魂的深处,在行动时每动一个设计念头时以此为指导思想,最后的结果就能如愿。

讲讲项目开发过程的事情,从立项到发布首个版本之间有什么让你印象深刻的事情?

jfinal项目始于2011年3月左右,第一个版本大约两周左右开发完成,再用了一周时间将手头ssh项目切换至jfinal。

这期间最令人兴奋的事情是脑海中不断迸发出新的想法,然后立即将想法变为现实,这段时间更加确信可以通过持续地专注来激发创造力,后续工作中也验证了此法的有效性。

开发过程中你遇到了哪些困难?是如何解决的?

开发过程最大的困难就是写代码实现,想法很快就能有,但实现起来需要花费更多时间,代码极简比仅仅实现功能要困难得多。

解决这些问题,需要对各种因素进行深入透彻分析,权衡得到最优方案。

你每天投入在jfinal项目上的时间大概有多少?是否有其他人参与了项目贡献?

不同时期投入时间不一样,如果工作不紧张,每天两三个小时都没问题。最近几个月工作极忙,一般是在临睡前回复一下热心网友们的问题。有很多热心的网友提了很多建议,也有少部分人在github上提交过代码。

jfinal下一步的计划和目标是什么?

jfinal将一直坚持极简设计风格,在不断优化发展内核的同时,通过扩展的方式加强周边工具设施的建设,进一步提升开发体验。另外jfinal.com大部分构想已经完成,时间允许情况下会开发上线,jfinal.com关注开发者群体,将是完全不一样的模式。

将jfinal开源的初衷是什么?你从开源中得到了什么?在开源方面有什么感悟?

本人是乐于助人的性格,有好东西乐于分享出来。造福于广大的工程师,自己会更快乐,更有成就感。另外开源出来也希望jfinal变得越来越好。

开源给我的感悟是做开源项目需要为其注入思想与灵魂,让其具有鲜明的个性与主张,并且要让更多的人接受并喜欢才能快速发展。乐于分享会使自己变得更快乐、幸福,帮助他人就等于帮助自己!

你怎么看待开源以及国内的开源环境?你最希望对其他打算从事开源的开发者说的话是?

国内大部分工程师大都忙于生计,参与开源相对比较困难,国人对国产开源项目信心不足也是个问题。

建议打算从事开源的开发者在自己喜欢的方向和擅长的领域设定一个目标,尝试做个开源项目,会使你变得更充实、更快乐,及很多意想不到的收获。
  • 大小: 67.4 kb
  • 大小: 82 kb
  • 大小: 12.3 kb


评论 共 25 条
25 楼 2016-01-28 19:04
jfinal首套专业视频教程已经在csdn学院上线 http://edu.csdn.net/course/detail/1968
24 楼 2015-09-20 09:57
第一步jfinal书籍《jfinal极速开发实战》发布

百度阅读地址 :http://yuedu.baidu.com/ebook/3fc54b55d5bbfd0a7956739f
23 楼 2015-08-02 14:02
fair_jm 写道
cppmule 写道
与play!的实现还是有差距啊。大家怎么看?

play我觉得很明显的好用的地方:
一是routes
二是scala
三是配合akka
四是不在服务器端存session还是用cache

jfinal的路径配置是基于默认约束的 在取path 和 query 参数上都有点麻烦... ...
我的感觉..

  jfinal 的路由是注册才可以使用,没有什么默认约束这一说,query 参数有 getpara系列与 getmodel 系列方法很方便取数据,看一下 jfinal 手册就清楚了。
  至于 scala、akka 这个在jfinal 中直接使用即可。最后服务端 session 对于大部分使用 jfinal 的项目来说都是放 cache 中的,session 只用于小型项目,这些事情 jfinal 并没有限制开发者,按需取用。建议楼主看一下 jfinal 手册,在此下载 http://www.jfinal.com
22 楼 2015-01-31 19:48
cppmule 写道
与play!的实现还是有差距啊。大家怎么看?

play我觉得很明显的好用的地方:
一是routes
二是scala
三是配合akka
四是不在服务器端存session还是用cache

jfinal的路径配置是基于默认约束的 在取path 和 query 参数上都有点麻烦... ...
我的感觉..
21 楼 2015-01-26 15:40
与play!的实现还是有差距啊。大家怎么看?
20 楼 2014-04-12 21:30
[size=large][/size]qsqqwqwqwqwqwa洒洒水
19 楼 2014-04-12 21:17
xuelange 写道
支持

18 楼 2013-12-26 12:00
一直在使用中,绝对值得大力推广
17 楼 2013-12-23 17:49
支持
16 楼 2013-12-21 10:17
支持波波,那些说重复制造轮子的肯定没有接触过jfinal,只不过是人云亦云罢了!
15 楼 2013-12-20 09:54
请不要重复发明轮子,看着跟spring mvc没多大区别
14 楼 2013-12-11 19:46
文档啊文档,赶紧完善文档吧,下载的文档里面只是简单的介绍,应该还有很多内容都没提到吧。
13 楼 2013-12-10 14:07
詹波兄弟,我觉得这个思路挺好,不过离一个完整的框架比还缺少不少东西,是否愿意进一步完善?
12 楼 2013-12-09 17:03
前台jsp界面没有创新的地方吗?还是就用strut2来做吗?这样体现不了一个完美的开发框架啊
11 楼 2013-12-09 15:37
看着还不错
10 楼 2013-12-09 07:06
vice nice. best of luck.
9 楼 2013-12-08 20:28
很不错的@jfinal
8 楼 2013-12-08 13:25
另一个轮子
7 楼 2013-12-07 18:18
楼主帅哥一枚~
6 楼 2013-12-07 11:13
在用着做点小作业 很好用 不错~
5 楼 2013-12-07 09:25
jfinal的理念很好
4 楼 2013-12-07 08:43
支持,看起来技术不错!
3 楼 2013-12-06 20:45
支持波波。
2 楼 2013-12-06 17:23
支持一下波波,beetl也因为jfinal得到很好的推广
1 楼 2013-12-06 17:19
楼主帅哥一枚啊,哈哈

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 大家都知道vue-router有两种模式,hash模式和history模式,这里来谈谈vue-router中的hash和history两种模式的区别。感兴趣的朋友一起看看吧

  • vue中hash和history区别

  • let url = changeurlparam(location.href, name, value); // 修改 url 参数 history.replacestate(null, null, url); // 替换地址栏不跳转

  • 假如当前地址栏链接为:https://test.com/?type=students&page=3 //定义替换参数的方法 function changeurlarg(url,arg,arg_val){ var pattern=arg '=([^&]*)'; var replacetext=arg '=' arg_val; if(url.match(...

  • vue的路由分为hash和history模式,他俩最直观的区别就是hash路由有一个 # 号,而history是没有的。还有就是: 1. hash支持低版本的浏览器,而history就没有那么友好了 2. (1) hash模式下,它指 # 号之后的所有字符,但是他虽然包含在url中,但是不包含在http请求中。所以改变hash值不会重新加载页面,对传给后端的url没有任何影响,因此不会重新加载页面。它每次改变都会触发hashchange事件,可以通过给window加上hashchang...

  • 为什么要有 hash 和 history? 对于 vue 这类渐进式前端开发框架,为了构建 spa(单页面应用),需要引入前端路由系统,这也就是 vue-router 存在的意义。前端路由的核心,就在于 —— 改变视图的同时不会向后端发出请求。 为了达到这一目的,浏览器当前提供了以下两种支持: hash —— 即地址栏 url 中的 # 符号(此 hash 不是密码学里的散列运算)。 比...

  • 前言:众所周知,vue-router有两种模式,hash模式和history模式,下面来看看两者的区别。 一、基本情况 直观区别:hash模式url带#号,history模式不带#号。 1.hash模式 hash就是指url尾巴后的#号以及后面的字符。这里的#和css里的#是一个意思。hash也被称为锚点,本身是用来做页面定位的,它可以是对应的id元素显示在可视区域内。 由于hash值变化不会导致游览器向服务器发出请求,而且hash改变会...

  • 利用html5 history新特性replacestate方法可以修改当前页面地址栏参数,示例代码: //选择日期后改变地址栏 var urlsearch = location.href; var unformatstr = changeurlarg(urlsearch, "depdate", qdate); if (!!(window.history &&...

  • 1.获取地址栏参数 2.修改地址栏参数

  • 1. hash模式(vue-router默认hash模式) hash模式背后的原理是onhashchange事件。 window.onhashchange=function(){ let hash=location.hash.slice(1); document.body.style.color=hash; } (localtion是js里管理地址栏的内置对象,是window对象的一部分,可...

  • export const changeurlarg = (url, arg, arg_val) => { // url当前地址window.location.href // arg传参字段 例如?key={arg_val} // arg_val传参值 const pattern = `${arg}=([^&]*)`; const replacetext = `${arg}=${arg_val}`; if (url.match(pattern)) { let .

  • 前言: 大家有没有发现,在开发项目时,地址栏里有个“#”号很奇怪,这个到底是啥,带着疑问,我揭开了它的面纱;同时引出来2个词,history;hash 两者的区别 1、history,路径不带“#”号,看起来比较美观,但兼容性略差,部署上线时需要后端人员的支持,解决页面刷新服务端404问题(请求后端),或者使用nginx处理 2、hash,带有“#”号,“#”号后面的就称为hash值;路径看起来不美观;但兼容性比较好;若地址通过第三方手机app,若app校验严格,则地址会被标记不合法 ...

  • 今天说说vue路由的hash模式与history模式的区别,这个也是面试常问的问题。 总结 传统的路由指的是:当用户访问一个url时,对应的服务器会接收这个请求,然后解析url中的路径,从而执行对应的处理逻辑。这样就完成了一次路由分发。 前端路由是不涉及服务器的,是前端利用hash或者html5的 关于vue路由、一个单页面应用可以做到多路由跳转并按需加载页面代码,这样的方式就很神奇,以往的做法都是通过锚点来定位对应的页面代码,而这种古老的方式存在最大的缺陷就是首屏加载缓慢,一次性加载了所有页面代码。...

  • vue的路由hash模式 和 history模式 区别 1.直观区别: hash模式url带#号,history模式不带#号。 2.深层区别: hash模式url里面永远带着#号,我们在开发当中默认使用这个模式。 如果用户考虑url的规范那么就需要使用history模式,因为history模式没有#号,是个正常的url适合推广宣传 功能也有区别,比如我们在开发app的时候有分享页面,那么这个分享出去的页面就是用vue或是react做的, 把这个页面分享到第三方的app里,有的app里面url是

  • 现在做网页,经常会碰到处理地址栏参数的问题,但一直是凭感觉做,之后漏洞百出也不知道从哪改起,因此,就专门做了一个修改地址栏参数的方法,这一下,就再也不用愁啦,哈哈! 以下就是我编的方法,使用很简单的哦: 代码如下: function changeurlpar(destiny, par, par_value) { var pattern = par ’=([^&]*)’; var replacetext = par ’=’ par_value; if (destiny.match(pattern)) { var tmp = ‘/\\’ par ’=[^&]*/’; tmp = destiny.

  • hash模式和history模式的区别

  • 相同点: 1.当url改变时,页面不会重新加载; 2.都受页面导航回退前进等影响; 不同点: 1.url链接显示不一样,hash里面会有"#",history没有"#"; 2.如果后台没有做相应配置,history页面会在再次刷新的时候,报404;hash则不会出现404报错 注意点: 给个警告,因为这么做以后,你的服务器就不再返回 404 错误页面,因为对于所有路径都会返回index.html文件。为了避免这种情况,你应该在 vue 应用里面覆盖所有的路由情况,然后在...

  • vue-router(前端路由)有两种模式,hash模式和history模式,这里来谈谈两者的区别。 hash 就是指 url 尾巴后的 # 号以及后面的字符,history没有底带#,外观上比hash 模式好看些 原理的区别(原理) hash 能兼容到ie8, history 只能兼容到 ie10; 由于 hash 值变化不会导致浏览器向服务器发出请求,而且 hash 改变会触发 ha...

  • vue中路由的hash和history模式的区别

global site tag (gtag.js) - google analytics