您的位置:首页 > 其它

JFinal 源码解析--Handler

2014-05-15 22:21 225 查看
1. JFinal类 初始化Handler

private void initHandler() {
Handler actionHandler = new ActionHandler(actionMapping, constants);//将ActionMaping平封装成一个Handler
handler = HandlerFactory.getHandler(Config.getHandlers().getHandlerList(), actionHandler);//创建handler链式结构,ActionHandler放在所有Handler后面
}




2.HandlerFactory类

/**
* HandlerFactory.
*/
public class HandlerFactory {

private HandlerFactory() {

}

/**
* Build handler chain
*/
public static Handler getHandler(List<Handler> handlerList, Handler actionHandler) {
Handler result = actionHandler;

for (int i=handlerList.size()-1; i>=0; i--) {//链式结构,ActionHandler在链表尾部,倒着添加,最先add到List里的Handler在链表头部,返回头结点
Handler temp = handlerList.get(i);
temp.nextHandler = result;
result = temp;
}

return result;
}
}


引用作者的回复:

JFinal的 Handler是 AOP + 责任链 模式的一个变种,JFinal对action及interceptor处理自身也是一个Handler名叫ActionHandler,可见其功能之强大。平时开发的时候一般不需要使用,当Action与Interceptor还不够用的时候可以考虑Handler上场。另外Handler可以替代Filter,你无需在web.xml 中再声明Filter了。举几个应用的例子吧:1:网站改版,需要在新网站上兼容老网站上的url时能用到,只需要在Handler中将老网站url转换成新的就可以了。2:防恶意抓取可以使用Handler分析请求规律并封锁ip地址。3:如果你想自创一套路由规则可以用Handler。 如果你要做网站访问日志也可以使用Handler。Handler 可以接管所有请求,所以是无所不能的,你甚至可以基于 Handler 再扩展出一套自己的web 框架 :)

自定义Handler

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.jfinal.handler.Handler;

public class MyHandler extends Handler{

@Override
public void handle(String target, HttpServletRequest request,
HttpServletResponse response, boolean[] isHandled) {
System.out.println("-----myhandler is working-----");
nextHandler.handle(target, request, response, isHandled);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  JFinal Handler 源码