jfinal handler 做rest api

我想搭建rest风格的移动应用 api,下载demo看了下,默认的路由不支持rest风格的,我查了下资料,作者说需要用 handler


 楼主的形如company/{cId}/employee/{eId }这样的路由需要写 Handler 来支持,JFinal 是将请求的资源放 url 前面部分,参数全放后面部分。除了可以 Handler 支持外建议楼主使用 JFinal 默认路由规则:company/employee/{cId}-{eId }

评论(0)引用此答案举报 (2014-02-18 09:17)


这是在oschina上看到的,但是具体怎么操作不是很清楚,我想找到一个例子来看下这个handler怎么处理请求的url

评论区

Aiome

2016-10-22 12:54

JFinal

2016-10-22 13:01

不建议这么做,不要被 restful 论文中建议的路由风格给限制住了,jfinal 的路由与论文中建议的路由风格不同之处在于前者将操作放在 url 中,而后者放在了请求头中,例如 jfinal 风格的:GET "/user/delete/1",而论文中建议的是 DELETE "/user/1"

jfinal 更加灵活自由。restful 的核心价值不在路由风格这里,很多人误以为路由风格使用了论文中建议的,就是 restful 类型的项目了,这是很大的误解

restful 是一种软件架构的风格,与 url 风格几乎没有关系,这里有个贴的回复可以看一下:http://www.jfinal.com/feedback/415

Aiome

2016-10-22 13:10

@JFinal 感谢耐心解答, 开始我以为restful风格就是体现在URL上面,现在发现,并不是这样的,但是我还是想了解小handler是怎样工作的,手册上只是描述了一下,我在这里也没有查到怎么用(http://tool.oschina.net/apidocs/apidoc?api=jfinal)。

JFinal

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 现在的路由风格

JFinal

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; 即可

建议在这个单链表中设置断点调试看一下程序运行流程,可以清楚地了解细节

Aiome

2016-10-22 13:20

@JFinal 恩,非常感谢,已经在手册中展现出来了^_^

JFinal

2016-10-22 13:21

@Aiome oschina 那个 apidoc 版本太老了,可以去 maven 中心库下载最新版本的 apidoc: http://search.maven.org/

Aiome

2016-10-22 13:31

@JFinal 非常感谢,下午消化下QAQ

热门反馈

扫码入社