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

时间:2013-01-11 07:39:11

标签: java eclipse debugging struts2 struts

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

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

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

3 个答案:

答案 0 :(得分:6)

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

  1. 查看您的struts.xml,了解Configuration Elements(特别是Actionsmethods)的映射方式以及如何重现行为编译时的申请。

  2. Write an Interceptor记录(或保存某处)在Stack中传递的所有Actions和方法的名称,从请求中读取它们;

  3. 实施Preparable Interface并在prepare()方法中执行请求记录;

  4. 通过

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

    根据应用程序的结构,您可以选择将此行的调用“放在某处”,以记录所有调用的类名和方法。

    我建议您this implementation,它可以解决您的深度问题:

    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;
        }
    }
    

答案 1 :(得分:1)

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

最快,最简单的解决方案(对我来说,无论如何)将使用AOP来检测所有应用程序的代码,记录所有条目,并可能退出。 IMO这将超出您的实际需求,尽管这是您所要求的。一旦你有了这个输出,你就可以开始将它缩小到更现实的范围。

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

答案 2 :(得分:-1)

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

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

希望如此能帮到你