博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JFinal 学习笔记之Handler包分析
阅读量:6263 次
发布时间:2019-06-22

本文共 1841 字,大约阅读时间需要 6 分钟。

HandlerFactory.java

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

public static Handler getHandler(List
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数组 ,标识是否 被处理 过,我觉得 熟悉代码 还是 要 从 它的实现来分层 发散,所以 下面 的都是 它的实现类。

转载地址:http://hpzpa.baihongyu.com/

你可能感兴趣的文章
vscode 相关
查看>>
nodejs 全自动使用 Tinypng (免费版,无需任何配置)压缩图片
查看>>
彻底理解Java中的基本数据类型转换(自动、强制、提升)
查看>>
在CentOS中安装redis5.0
查看>>
重构-改善既有代码的设计(六)--重新组织函数
查看>>
panic: time: missing Location in call to Time.In
查看>>
在K8S集群中一步步构建一个复杂的MySQL数据库
查看>>
前端每日实战:15# 视频演示如何用纯 CSS 创作条形图,不用任何图表库
查看>>
浅谈 Angular 项目实战
查看>>
初学Linux指导(三)
查看>>
C++入门教程(8):if 语句
查看>>
Tampermonkey的使用
查看>>
功能强大的Tomcat 管理监控工具【PSI Probe】
查看>>
element 源码学习五 —— Notice 系列组件学习
查看>>
小程序开发之二(路由拦截设计)
查看>>
鹅厂优文 | 怎样用AI运维
查看>>
鹅厂内部干货|微信小游戏开发技术怎么应用?
查看>>
DOM疑惑点整理(一)
查看>>
.NET多线程和异步总结(一)
查看>>
Zookeeper集群搭建和简介(一)
查看>>