• JFinal 学习笔记之Handler包分析


    HandlerFactory.java

      HandlerFactory是不可实例化的,因为 它的构造 函数 特意定位 私有 的;它有一个 静态的方法叫做 getHandler,它有两个参数 ,一个是Handler的List类型,另一个是一个单一的handler,代码如下 :

    	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.next = result;
    			temp.nextHandler = result;
    			result = temp;
    		}
    		
    		return result;
    	}
    

      如上代码所示 ,从 最后一个 开始 循环 ,然后 把它的next都 赋值 为 第二个参数 的Handler,然后最后 返回 的Handler为第一个参数List中 第一个元素,并 带上了next参数 。使用它的地方就是JFinal的initHandler方法。

        private void initHandler() {
            Handler actionHandler = new ActionHandler(actionMapping, constants);
            handler = HandlerFactory.getHandler(Config.getHandlers().getHandlerList(), actionHandler);
        }

      不过 我有一点疑问,这个 getHandlerList()方法,能带给 我真正的List吗 ?因为我看 没有 地方 去add它,也就是说,这 个List永远只是 一个 size为 0的List,不知道@JFinal  怎么看这个问题,求解。

    Handler.java

      我们 先来 看看 代码 ,这是 一个 抽象类,其中 nextHandler 被 标记为过时的,也就是说 已经 没多少地方用到 了。

    public abstract class Handler {
        
        /**
         * The next handler
         */
        protected Handler next;
        
        /**
         * Use next instead of nextHandler
         */
        @Deprecated
        protected Handler nextHandler;
        
        /**
         * Handle target
         * @param target url target of this web http request
         * @param request HttpServletRequest of this http request
         * @param response HttpServletRequest of this http request
         * @param isHandled JFinalFilter will invoke doFilter() method if isHandled[0] == false,
         *             it is usually to tell Filter should handle the static resource.
         */
        public abstract void handle(String target, HttpServletRequest request, HttpServletResponse response, boolean[] isHandled);
    }

      关键 是看 上面的handle方法,这是一个 抽象方法。这里面 包含了ServletRequest和Response,以及 一个 boolean数组 ,标识是否 被处理 过,我觉得 熟悉代码 还是 要 从 它的实现来分层 发散,所以 下面 的都是 它的实现类。

  • 相关阅读:
    java基础面试题:说说&和&&的区别
    java基础面试题:java中有没有goto? 在JAVA中如何跳出当前的多重嵌套循环?
    Java基础面试操作题: 获取 1-20 之间的随机数,共计 20 个,要求不能重复 获取 1-20 之间的随机数,共计 10 个,要求不能重
    Intellij设置Eclipse 快捷键
    Intellij 安装sonarlint
    Intellij 关闭参数提示
    Linux中Firefox——Firebug插件安装及使用
    Linux中Firefox——Httpfox插件安装及使用
    OpenCV——Haar-like特征
    Python学习笔记6(列表生成式)
  • 原文地址:https://www.cnblogs.com/kmsfan/p/7496615.html
Copyright © 2020-2023  润新知