开发者社区> 问答> 正文

JFinal在web应用中的疑问 400 请求报错

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

JFinal的web应用中

1、JFinal如何区分 如下两种路由规则

controllerKey/method

controllerKey/v0-v1

2、 好像拦截器和handler他们的控制权没啥区别?(唯一的区别,是不是:拦截器拦截所有请求,包括静态资源的请求,而handler仅仅拦截Action,但通常应用中,静态资源被web服务一处理了。)

3、Db.pro操作不同数据源时 怎么没提供save的api啊?

展开
收起
kun坤 2020-05-29 22:40:54 472 0
1 条回答
写回答
取消 提交回答
  • 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 的方法

    ######回复 @Neoman : 会存到主数据源上,如果想存到其它数据源上可以先调用一下 record.setConfig(othterConfigName)######第三点还是有点困惑,通过 我save到指定数据源之前没有通过通过 Db.pro 查询呢?那Db.save 会保存到哪里去?######第一个问题是先按照第一种规则检查actionkey,如果找不到,默认用index作为method。后面的作为参数。 第二个问题我认为你和你理解的正好相反。handler拦截所有url,你可以通过扩展handler来达到自定义url,比如重写url,url静态化。而拦截器是对controller的拦截,请求必须匹配上actionkey,能进去controller才起作用。通过拦截器了统一在执行前后做统一处理。 第三个问题,save是对象的一种写法,Db是直接操作sql的,就分两种,读和写。Db.update负责所有写操作。######回复 @谭明智 : 参数是未知的,所以,由此一问######回复 @Neoman : 如果存在aa,bb这样的方法,就不会按照参数了,如果重复的话,只能当成method了,那就没办法了,尽量参数不要和方法名重复。######第一个问题,你的回答还没理解我的意思哦。 比如blog定义了index方法,这样的url /blog/aa /blog/bb 他怎么知道aa,bb到底是方法还是参数呢?如果方法和参数不小心一样呢。 第二个问题,你的理解是对的,Hander的拦截权限更大,css文件都会拦截,而拦截器仅仅拦截Controller。 第三个问题,我说的是Db.pro 类,Db是有save方法的,这没问题。

    2020-05-29 22:41:01
    赞同 展开评论 打赏
问答分类:
API
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Web应用系统性能优化 立即下载
高性能Web架构之缓存体系 立即下载
PWA:移动Web的现在与未来 立即下载