我需要对其他开发人员编写的Java-EE Struts2 Web应用程序进行一些更改。
由于我不确切知道它是如何工作的,所以我想映射每个请求上调用的所有操作和方法,以便在更改之前更好地理解Web应用程序工作流。
有没有办法实现这个目标?
答案 0 :(得分:6)
采用以下一种(或多种)方法:
查看您的struts.xml,了解Configuration Elements(特别是Actions
和methods
)的映射方式以及如何重现行为编译时的申请。
Write an Interceptor记录(或保存某处)在Stack中传递的所有Actions和方法的名称,从请求中读取它们;
实施Preparable Interface并在prepare()
方法中执行请求记录;
通过
动态获取类名和方法名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
去那个功能。
希望如此能帮到你