2016-10-24 10:59
@Noobs 这个是 jfinal 2.3 中将要推出的功能,目前建议是在 Controller 的声明入添加解,可拦截整个 controller 中所有 action
2016-10-23 16:16
这个地方是帮助控制事务,以及在 showSql 设置为 true 时代理 connection 来实现 sql 语句输出的,注意如下几点:
1:在 Tx 拦截器或者 Db.tx(...) 这类开启事务的方法中,会直接从 dataSource 获取 connection 开启事务,并放入该 threadLocal
2:真正使用 connection 的地方调用该 getConnection() 方法,如果 threadlocal 中有 conn 对象,直接使用,这样拿到手的就是前面 1 中设置的 connection
3:当 threadLocal 中没有 connection 的时候,证明没有开启事务,这时再从 dataSource 中去拿 connection,拿的时候根据 showSql 值来决定是不是要生成代理
2016-10-22 21:15
@kopj 是依据 jfinal 路由规则让 url 对应到 controller 中的方法,下载 jfinal 手册了解一下
2016-10-22 16:37
@都教授 NoClassDefFoundError 为 java 开发最常见异常,少了 druid 的 jar 包而已,如果你用的 maven 开发,添加相关 dependency 配置,否则在首页下载 jfinal all 这个 zip 文件,里面提供了所有需要的 jar 包
2016-10-22 13:21
@Aiome oschina 那个 apidoc 版本太老了,可以去 maven 中心库下载最新版本的 apidoc: http://search.maven.org/
2016-10-22 13:17
@Aiome 想了解 Handler 怎样工作,可以看一下源代码中的 com.jfinal.ext.handler 包下面的相关代码,注意几点:
1:Handler 总体是一个单链表结构,其中的 next 持有下一个 handler 对象,其中链表的最后一个元素固定为 ActionHandler 对象,这个对象专用来处理动态请求
2:在 handler 中是通过调用 next.handle(...) 方法来将请求传递给下一个 Handler的,如果不调用则不向下传递,终止单链表调用链条
3:其中的 boolean[] isHandled 这个参数,是为了告知 JFinalFilter 是否要将请求转交给 tomcat 或 jetty 这类容器继续处理,通常静态资源就需要转交,如果不需要转交,则使用 isHandled[0] = true; 即可
建议在这个单链表中设置断点调试看一下程序运行流程,可以清楚地了解细节
2016-10-22 13:12
我再补充一下 jfinal 路由设计的思脉:
1:url 本质上就是去触达后端某个 controller 中的某个 action,这个 action 就是一个 java method,所以总体上设计方向就是将 url 与 action 建立关联
2:将 url 中的最开始部分与 controller 建立关联,于是路由规则第一部分 controllerKey 对应 Controller 类
3:将 url 中的随后的一部分与 Controller 类中的 action method 建立关联,于是 url 第二部分 methodName 对应于 action 的方法
4:按照 restful 风格的核心价值,将 controllerKey 抽象成资源,将 methodName 抽象成对资源的操作,就形成了 jfinal 现在的路由风格