zoukankan      html  css  js  c++  java
  • wojilu源码简析如何跟踪调试wojilu

    以下是我简单看了看wojilu源码的一点心得,wojilu的源码非常庞大,没有还没有仔细深入研究,说的不对的地方还请蛋神指正,以免误人。

    wojilu框架服务器端简单地来说就是[进去的是url,出来的是html]。

    代码在这里:[wojilu1.8\wojilu\Web\Mvc\ProcessContext.cs]

    public static void Begin( MvcContext ctx ) {

    WebStopwatch.Start();

    MvcEventPublisher.Instance.BeginProcessMvc( ctx );

    List<ProcessorBase> processorList = initProcessor();
    ProcessContext context = new ProcessContext( ctx );
    foreach (ProcessorBase p in processorList) {

    if (context.isEnd()) break; // showEnd 会跳过下面所有处理器,除了 RenderProcessor

    if (context.ctx.utils.GetCancelMvcProcessor().Contains( p.GetType() )) continue; // cancelProcessor 会跳过指定处理器

    p.Process( context );
    context.ctx.utils.skipCurrentProcessor( false ); // 重置状态 // skipCurrentProcessor 会跳过当前处理器的剩余部分
    }

    // 呈现页面内容
    if (skinRender( ctx ) == false) new RenderProcessor().Process( context );

    ctx.web.CompleteRequest();

    }

    这里用到的似乎是设计模式里讲到的职责链模式。即各个processor依次对用户请求进行处理,并将自己处理的结果放入ProcessContext,后面的processor依赖前面的processor的处理结果。

    全部的processor在这里:

    private static List<ProcessorBase> initProcessor() {
    List<ProcessorBase> list = new List<ProcessorBase>();
    list.Add( new RouteProcessor() );
    list.Add( new InitContextProcessor() );
    list.Add( new ActionMethodChecker() );
    list.Add( new ForbiddenActionChecker() );
    list.Add( new LoginActionChecker() );
    list.Add( new HttpMethodChecker() );
    list.Add( new PermissionChecker() );
    list.Add( new ActionProcessor() );
    list.Add( new LayoutProcessor() );
    list.Add( new NsLayoutProcessor() );
    return list;
    }

    在加上最后的页面呈现RenderProcessor。 

    wojilu代码庞大,controller有数百之多,有时候我们不知道一个链接点击之后,会走到哪个controller里,不好跟踪调试。这里我发现一个简单的办法,就是在上面的 ActionProcessor里面的Process方法中[wojilu1.8\wojilu\Web\Mvc\Processors\ActionProcessor.cs] ,有一行代码,  setControllerView( controller, actionMethod );

    在这里打上断点,controller参数显示的就是controller的名字, actionMethod显示的就是方法的名字。

    就说这些吧。

    待对我记录有了更多的心得,再来和大家分享。 

  • 相关阅读:
    Ubuntu16.04安装openldap和phpldapadmin
    Java 8 中的抽象类和接口到底有啥区别?
    Redis 开发陷阱及避坑指南!
    Java 中的 6 颗语法糖
    Java 8 有多牛逼?打破一切你对接口的认知!
    Git操作常用的命令都在这里了。
    Github 太狠了,居然把 "master" 干掉了!
    微服务业务日志收集方案,写得非常好!
    Maven基本介绍与安装
    IntelliJ IDEA 调试 Java 8 Stream,实在太香了!
  • 原文地址:https://www.cnblogs.com/xchsp/p/2258956.html
Copyright © 2011-2022 走看看