1. JFinal类 初始化Handlerjava
private void initHandler() { Handler actionHandler = new ActionHandler(actionMapping, constants);//将ActionMaping平封装成一个Handler handler = HandlerFactory.getHandler(Config.getHandlers().getHandlerList(), actionHandler);//建立handler链式结构,ActionHandler放在全部Handler后面 }
2.HandlerFactory类web
/** * 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; } }
引用做者的回复: api
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 框架 :)app
自定义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); } }