如何跟踪Struts2 Web应用程序运行的所有方法



我需要对其他开发人员编写的Java-EE Struts2 Web应用程序进行一些更改。

因为我不知道它是如何工作的,我想映射每个请求上调用的所有动作和方法,以便在更改它之前更好地理解web应用程序工作流。

有没有办法实现这个目标?

采用以下一种(或多种)方法:

  1. 看一下struts.xml,看看配置元素(特别是Actionsmethods)是如何映射的,以及如何在编译时重现应用程序的行为。

  2. 写一个拦截器记录(或保存在某处)所有在栈中传递的动作和方法的名称,从请求中读取它们;

  3. 实现可准备接口并从prepare()方法中执行请求日志;

  4. 通过

    动态获取类名和方法名
    Thread.currentThread().getStackTrace()[level].getMethodName();
    

    根据你的应用程序的结构,你可以选择把调用放到这一行"某处",记录所有被调用的类名和方法。

    我建议你这样做,它为你解决了深度问题:

    public class Utilities {
        public static String getCurrentMethod() {
            return getCurrentMethodNameFromThread(0);
        }
        public static String getCallingMethodName() {
            return getCurrentMethodNameFromThread(1);
        }
        private static String getCurrentMethodNameFromThread(int stackLevel) {
            /*
             * 0 - dumpThreads
             * 1 - getStackTrace
             * 2 - thisMethod => getCurrentMethodNameFromThread
             * 3 - callingMethod => method calling thisMethod 
             * 4 - method calling callingMethod
             */
            StackTraceElement 
                stackTraceElement = 
                    Thread.currentThread().getStackTrace()[4 + stackLevel];
            String className = stackTraceElement.getClassName();
            String methodName = stackTraceElement.getMethodName();
            return className + "." + methodName;
        }
    }
    

所有方法?!或者仅仅是你申请中的那些?

最快、最简单的解决方案(至少对我来说)是使用AOP来检测应用程序的所有代码,记录所有条目和可能的退出。在我看来,这比你实际想要的要多,尽管这是你要求的。一旦你有了这样的输出,你就可以开始把它缩小到更现实的东西。

(实际上您可以用它来玩一些有趣的游戏,包括创建序列图。)

正如我从你的问题中得到的,你可以尝试这样使用。

如果您已经找到了操作类和execute(),那么这对您来说可能很容易,在调试模式下运行应用程序并从execute()函数的开始开始调试。按F6逐行调试,如果看到任何新函数,则按F5或手动转到函数中,然后按F6转到该函数。

希望对大家有所帮助

相关内容

  • 没有找到相关文章

最新更新