jfinal_demo项目理解问题

@JFinal 你好,想跟你请教个问题:这几天在学习jfinal,先简单了解了jfinal的思想,便深深地爱上了这个东西,但是对于一个大四学生来说,想要摸透对源码的理解实属困难,所以就打算对官网提供的jfinal_demo理解学习,不料,这东西跟ssh还是有挺大编码上的区别,因此还是有点难入门,网上找了很多也是对于源码的解析,我想请教作者,这个demo的运行流程是怎么样的(是指各个类、方法之间的调用问题),对于官网给的图已经理解差不多了,就是代码的理解有点难,还有对于初学者改从哪里开始学习。万分感谢

评论区

JFinal

2016-10-20 10:56

demo 运行流程简单来说如下:
1:请求进入web.xml中配置的 JFinalFilter之中
2:JFinalFilter 持有一个 handler 链条,会按次序分别去调用这些 Handler
3:其中这个 handler 链条的尾部是 ActionHandler,此 handler 是处理所有动态请求的,也就是处理 Controller 中定义的 action 方法
4:请求到达 ActionHandler 以后,会首先根据该请求的 url 支获取 Action 对象,如果没找到则报 404 异常,如果找到了,则从 Action 中拿到目标 action 所配置的 Interceptor 以及 Controller action 的 Method 对象
5:拿到上述对象以将她们封装在一个 Invocation 的对象中,然后在此对象的 invoke() 方法中通过递归调用来调用 interceptor 与 action 方法
6: action 方法是用户在 Controller action 方法中写的程序,这样就将控制权交给了用户
7:用户在 action 中干完自己的事以后,调用一下 render 方法,后续 Invocation 调用完成以后会转调用户刚刚调用 render 时生成的 Render 对象的 render() 方法,该方向客刻端响应返回的数据

上面的条数据看上去多,其实主要就三步:一是创建 Invocation 封装应该调用的 interceptor 与 controller。二是调用 invcation.invoke(),进而会将调用传递到 interceptor与controller。三是调用 render

JFinal

2016-10-20 11:17

核心调用的地方在 ActionHandler 与 Invocation 这两个类里面,只需要在这两个类里面设置一个断点,调试跟踪一下程序的走势就极度清楚了,jfinal 核心设计极其简单,200 行代码左右

zer_o_

2016-10-20 17:24

@JFinal 谢谢您的答复,头像已改。今天经过自己代码的编写,整套流程算是理解了。今天碰到个问题,当地址栏传递数据的时候,无法找到对应的action方法,我该怎么解决。情况如下:我传递的地址栏是http://localhost:88/user/edit/11,而我将执行update方法,submit之后,他显示的是http://localhost:88/user/edit/update,而我希望得到的是http://localhost:88/user/update,不然他就报404了。谢谢您能够在百忙之中还特意码这么多字解决我的问题。

JFinal

2016-10-20 17:38

@zer_o_ 仔细看一下 jfinal 手册的有关路由规则那一小节,只有四个规则,在首页有 jfinal 手册下载链接

HIddenLynx

2016-10-22 12:54

jfinal的手册写的还是比较详细的,参照jfinal的手册都没什么问题

热门反馈

扫码入社