阅读更多
JFinal是一个基于Java的极速Web开发框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful,在拥有Java语言所有优势的同时再拥有Ruby、Python等动态语言的开发效率。JFinal项目开发始于2011年初,并于2012年3月开源,采用对商业应用友好的Apache 2.0协议。

项目地址:https://github.com/jfinal/jfinal

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

先做个自我介绍吧! Top

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

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

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项目是怎么诞生的? Top

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

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

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

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

  • 微内核+全方位扩展架构;
  • Db + Record 模式;
  • CPI模式;
  • ActiveRecord模式Java实现方式;
  • API引导式配置;
  • API引导Validate;
  • 采用Scanner + ClassLoader结合Jetty实现热加载;
  • 极简设计,核心代码约2000行实现Web MVC + ORM。

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

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

JFinal由Handler、Interceptor、Controller、Render、Plugin五大部分组成,以Action为参照,Handler处在扩展的最外围,Interceptor处在更贴近Action的周围,Controller承载Action处在扩展的中心,Render处于Action后端,Plugin处于Action侧边位置。



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

百度阅读地址 :http://yuedu.baidu.com/ebook/3fc54b55d5bbfd0a7956739f
23 楼 jfinal 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 楼 fair_jm 2015-01-31 19:48
cppmule 写道
与Play!的实现还是有差距啊。大家怎么看?

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

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

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

发表评论

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

相关推荐

  • vue-router中的hash和history两种模式的区别

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

  • JS 修改地址栏URL参数 不跳转

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

  • JS 在不跳转情况下修改地址栏URL参数

    JS 在不跳转情况下修改地址栏URL参数

  • JavaScript更改当前页面地址栏 且不会进行跳转方法

    然后就可以对他做想做的操作 例如 替换里面的参数 或 直接重写。比较适合那种要换某个地址参数 且要手动刷新界面后才生效的需求。首先 我们先通过 location.href拿到地址栏信息。这个方法 会直接替换整个地址栏 但他不会调整界面。

  • 从URL中获取参数后,修改URL,并且不跳转页面

    需求:通过统一认证登录页面跳转过来,会通过URL的形式携带Token,需要从URL中获取到Token并存储到本地。问题:由于使用Hash的路由模式,会在原始URL的末尾拼接"/#/",导致也一直被展示在URL上,十分不美观。方案:通过history.replaceState的方式修改URL,不会产生页面跳转的问题。

  • vue中hash和history的区别

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

  • vue中hash和history区别

    vue中hash和history区别

  • vue-router两种模式:hash模式和history模式

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

  • 前端js添加修改URL参数的方法,修改地址后,可以不刷新页面

    最近做项目,发现之前搞的replaceParamVal()方法有bug,重新修改后,应该完美了。上代码//URL替换指定传入参数的值,paramName为参数,replaceWith为新值,isRefresh为是否刷新页面,0表示不需要刷新,这个最牛举例:https://www.aazj.cn/index.html?popenid=757522579上面这个地址js调用方法:replaceParamVal("popenid","600",0),就会在地址栏上修改参数popenid=600,不会刷新页面,新地

  • js修改url但不刷新页面

    js里面动态修改url地址,但是不想刷新页面 window.history.pushState({}, 0, window.location.href + '?type=china'); 如下,给url添加mode参数,或者修改mode参数 function changeURL(mode){ window.history.pushState({}, 0, window.location.href.split('?mode=')[0] + '?mode=' + mode); }

  • js api 修改地址栏参数不跳地址

    window.history.pushState(null, '修改搜索栏地址','?page=1')

  • js修改url不刷新页面

    https://www.cnblogs.com/ferryInJs/p/4797610.html 一般用来清空url传递的参数不刷新,这样可以少发送一次请求到后台 var url = window.location.href; var valiable = url.split(“?”)[0]; window.history.pushState({},0,valiable); ...

  • JS-如何静默更改当前网页URL地址

    如何更改当前页面url // 设置当前url setCurrentUrl () { if (!!(window.history && history.pushState)) { // 支持History API if (!(this.$route.query.shopId || getHashUrlQuery('shopId'))) { histor...

  • js改变地址栏而不跳转页面

    今天做项目的时候突然遇到一个需求,实现js改变地址栏地址而不跳转新页面,上网搜没有搜到我想要的方法,后来自己很奇妙的碰对了,贴出来分享一下 我的背景是从一个页面点击链接跳转到本页面(http://caojiejun.snslearn.com/open/Index/openAp)时会自动到所要跳转的内容段,这个时候肯定需要它带过来一个参数,在这里即是 apiAgreement...

  • js 修改 URL location.href

    首先需求是这样的: 我在请求地址URL上添加了个参数,来判断当前是什么状态,如果参数符合条件,就报错怎么怎么的。 然后要是修改成符合要求之后,那这个页面就应该不报错了,但是URL没变,一刷新,还是会提示错误信息。 这就不符合要求啦。 但是,这个页面的URL是不变的,ajax请求处理完之后,这个页面是不会刷新的,即使 location.reload()。也不会改变页面的URL地址, 怎...

  • vue---hash模式和history模式的区别

    1、hash模式和history模式的区别 表现形式的区别 hash模式路径中带#,#后内容作为路由地址 history模式正常路径 需要服务端配置支持 原理的区别 hash模式基于锚点,以及onhaschange事件,根据路由地址不同呈现不同内容 history模式基于HTML5中的history API - history.pushState() IE10以后支持 - history.replaceState() 2、history 模式的使用 需要服务器的支持 单页面应用中,服务端不存在

  • 在Project Server中想要建立文档和任务之间的关系时失败

     在Project Server中想要建立文档和任务之间的关系时失败 今天给系统集成部项目一部的同事讲Project的应用的时候,我想要在文档库和任务之间创建一个关系.当我在文档属性的"链接任务"后面单击"选择与此文档相关的项目任务"的时候,系统提示:"没有可用的任务项目没有发布到Project Server上,或者没有分配给你的任务以及你没有查看任务列表的权限" 我检

  • Vue的History模式和Hash模式的区别理解

    1. hash模式 早期前端路由的实现就是基于location.hash来实现,也就是锚点。本质上就是改变window.location的href属性。我们可以通过直接赋值location.hash来改变href, 但是页面不发生刷新。这也就是,单页面应用嘛。 hash模式有下面几种特性: URL中hash值只是客户的一种状态,也就是说当向服务器发出请求时,hash部分是不会被发送的。 hash值的改变,都会在浏览器的访问历史中增加一个记录。因此我们能通过浏览器的回退、前进按钮控制hash的切换。 可以

  • Vue中hash模式和history模式的区别

    hash模式是依靠onhashchange事件(监听location.hash的改变),而history模式是主要是依靠的HTML5 history中新增的两个方法,pushState()可以改变url地址且不会发送请求,replaceState()可以读取历史记录栈,还可以对浏览器记录进行修改。当真正需要通过URL向后端发送HTTP请求的时候,比如常见的用户手动输入URL后回车,或者是刷新(重启)浏览器,这时候history模式需要后端的支持。),如果后端没有对这个路径做处理的话,就会返回404错误。

  • hash和history两种模式的区别

    前端路由 vue-router 有两种模式 ,hash模式和history区别 一、hash 就是指 url 尾巴后的 # 号以及后面的字符,history没有底带#,外观上比hash 模式好看些 二、原理的区别(原理) 三、hash 能兼容到IE8, history 只能兼容到 IE10 四、由于 hash 值变化不会导致浏览器向服务器发出请求,而且 hash 改变会触发 hashchange 事件(hashchange只能改变 # 后面的url片段);虽然hash路径出现在URL中,但是不会出现在H.

Global site tag (gtag.js) - Google Analytics