JFinal 源碼解析--Handler

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);		
	}

}
相關文章
相關標籤/搜索