JFinal在web应用中的疑问

Neoman 发布于 2014/04/01 10:02
阅读 315
收藏 1

@JFinal 你好,对JFinal代码还没深入去看,于是有几个困惑的地方,想跟你请教:

JFinal的web应用中
1、JFinal如何区分 如下两种路由规则
controllerKey/method
controllerKey/v0-v1
2、 好像拦截器和handler他们的控制权没啥区别?(唯一的区别,是不是:拦截器拦截所有请求,包括静态资源的请求,而handler仅仅拦截Action,但通常应用中,静态资源被web服务一处理了。)
3、Db.pro操作不同数据源时 怎么没提供save的api啊?

加载中
0
JFinal
JFinal


1:最大化匹配原则,先匹配整个串,如果匹配上就那是它了,否则就将最后一部分当成 urlPara

2:Interceptor的配置更灵活,可以是拦截全局,可以是拦截某个Controller中所有action、也可以是拦截某个action 方法,而Handler只能是拦截所有请求。Interceptor 在大部分情况下处理更方便,可以方便得到actionKey、controllerKey和controller本身,得到controller本身后就可以很方便地setAttr(...)、render(...),而Handler是处在更外层的拦截,controller、action这些都还没有确定下来。Handler比较适合当请求到来时需要改变对 url 进行处理的情况,如给url做伪静态,可以参考com.jfinal.ext.handler.FackStaticHandler.java,也用来处理 Interceptor处理不了的情况,如处理静态请求

3:通过 Db.pro 查出来的 Record对象中会被自动置入一个 configName 属性值,所以此时 Record 所对应的数据源就是确定的了,所以通过 Db.save(record) 就可以处理。已经考虑过未来会将这个 configName 值去掉,然后在 Db.pro 中添加相应带有 configName 的方法


JFinal
JFinal
回复 @Neoman : 会存到主数据源上,如果想存到其它数据源上可以先调用一下 record.setConfig(othterConfigName)
Neoman
Neoman
第三点还是有点困惑,通过 我save到指定数据源之前没有通过通过 Db.pro 查询呢?那Db.save 会保存到哪里去?
0
菜根乱谭
菜根乱谭

第一个问题是先按照第一种规则检查actionkey,如果找不到,默认用index作为method。后面的作为参数。 第二个问题我认为你和你理解的正好相反。handler拦截所有url,你可以通过扩展handler来达到自定义url,比如重写url,url静态化。而拦截器是对controller的拦截,请求必须匹配上actionkey,能进去controller才起作用。通过拦截器了统一在执行前后做统一处理。 第三个问题,save是对象的一种写法,Db是直接操作sql的,就分两种,读和写。Db.update负责所有写操作。

Neoman
Neoman
回复 @谭明智 : 参数是未知的,所以,由此一问
菜根乱谭
菜根乱谭
回复 @Neoman : 如果存在aa,bb这样的方法,就不会按照参数了,如果重复的话,只能当成method了,那就没办法了,尽量参数不要和方法名重复。
Neoman
Neoman
第一个问题,你的回答还没理解我的意思哦。 比如blog定义了index方法,这样的url /blog/aa /blog/bb 他怎么知道aa,bb到底是方法还是参数呢?如果方法和参数不小心一样呢。 第二个问题,你的理解是对的,Hander的拦截权限更大,css文件都会拦截,而拦截器仅仅拦截Controller。 第三个问题,我说的是Db.pro 类,Db是有save方法的,这没问题。
返回顶部
顶部