2
回答
我对handler和interceptor的疑惑

handler和interceptor都是对url做拦截预处理的,interceptor是通过handler调用,interceptor功能为什么不直接用handler来做?比如:SessionInterceptor,我可以用handler来做啊,handler也是链式的,可以做个对制定url做handler。interceptor有什么用?

能具体说说两者的区别吗?

举报
double9
发帖于5年前 2回/332阅
共有2个答案 最后回答: 5年前

    虽然 Handler 与 Interceptor 都有AOP 的特征,都能拦截客户端请求,但它们处在不同的层次。它们的主要区别如下:

1:Handler 会拦截所有请求,包括静态请求

2:Interceptor 只会拦截用 @Before 建立了关联的 action 请求,并且无法拦截静态请求

3:Handler 只能是全局拦截。而 Interceptor 分为全局、Controller、Action三个拦截级别,粒度更细更灵活

4:Handler 是责任链模式的一个变种,而 Interceptor 是 Command 模式的变种

     请参考此文中的架构图来了解 Handler 与 Interceptor 的区别与联系:

http://www.iteye.com/magazines/123

--- 共有 2 条评论 ---
JFinal回复 @never_say : JFinal Handler 与 Filter有些不同,Handler中提供了 target 参数与 isHandled参数,前者可以让开发者很方便地处理并传递下去,后者可以让各 Handler间传递处理状态,JFinalFilter 还要吧根据此参数决定本次请求是否应该交给容器处理。另外 Filter 是需要不断修改 web.xml 文件进行配置的 5年前 回复
double9今天又有了一个疑惑,handler的功能很明显可以用Filter代替,就不需要提出handler这个概念了 5年前 回复

凡是遇到“A已经满足我的需要了,  B有什么用,为什么还要有B”


我觉得这种问题, 你就别用B呗,  问那么多, 世界上你用不到的技术多了去了。

顶部