Jfinal handler的处理采用了责任链设计模式
有关责任链模式,推荐看:
《JAVA与模式》之责任链模式
1、实现Handler只需要继承Handler
public class DemoHandler extends Handler { @Override
public void handle(String target, HttpServletRequest request,
HttpServletResponse response, boolean[] isHandled) { } }
2、在继承JFinalConfig的文件中添加配置即可
/**
* 配置处理器
*/
public void configHandler(Handlers me) {
me.add(new DemoHandler());
}
以上两步就搞定Handler
在Jfinal中handler源码实现:
1、启动涉及Handler的主要执行过程
JFinalFilter--->JFinal(init()方法)---->initHandler()(初始化handler)
2、在initHandler()方法中
private void initHandler() {
Handler actionHandler = new ActionHandler(actionMapping, constants);
handler = HandlerFactory.getHandler(Config.getHandlers().getHandlerList(), actionHandler);
}
3、最主要的过程使配置的Handler形成链式结构
/**
* Build handler chain
*/
public static Handler getHandler(List<Handler> handlerList, Handler actionHandler) {
Handler result = actionHandler; for (int i=handlerList.size()-1; i>=0; i--) {
Handler temp = handlerList.get(i);
temp.nextHandler = result;
result = temp;
} return result;
}
具体过程,用一张图表示
可以经过交换,handler的执行过程为:handler1--->handler2--.....--->ActionHandler