我需要做一些改變其他開發人員編寫一個Java EE Struts2的Web應用程序。如何跟蹤由Struts2 Web應用程序運行的所有方法?
因爲我不知道它究竟是如何工作的,我想所有的行動和被稱爲對每個請求方法映射,以改變之前更好地瞭解Web應用程序的工作流程。
有沒有辦法來實現這一目標?
我需要做一些改變其他開發人員編寫一個Java EE Struts2的Web應用程序。如何跟蹤由Struts2 Web應用程序運行的所有方法?
因爲我不知道它究竟是如何工作的,我想所有的行動和被稱爲對每個請求方法映射,以改變之前更好地瞭解Web應用程序的工作流程。
有沒有辦法來實現這一目標?
正如我從你的問題了,你可以嘗試使用這樣的。
如果您發現操作類和那麼這對您來說可能很容易,在調試模式下運行應用程序並從函數的開始處開始調試。按F6
到逐行調試它,如果你看到任何新的功能,然後去功能按F5
內或手動去功能發生新的突破點出現,然後按F6
去那個功能。
希望如此,它會幫助你
採用下列方法之一(或更多):
你struts.xml看看,怎麼看Configuration Elements(特別Actions
和methods
)被映射以及如何在編譯時再現應用程序的行爲。
Write an Interceptor記錄(或保存某處)所有傳入堆棧的動作和方法的名稱,從請求中讀取它們;
執行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;
}
}
所有方法?或者只是你的應用程序中的?
最快,最簡單的方法(對我來說,反正)是使用AOP儀器的所有應用程序的代碼,記錄所有條目,並可能退出。海事組織這將比你想要的更多,儘管這是你要求的。一旦你有了這個輸出,你就可以開始把它縮小到更真實的東西。
(實際上,你可以用這個玩一些有趣的遊戲,包括創建序列圖。)
@zzzz,你能解釋一下你的贊成票去除和假編輯就這個問題和答案在這裏的http:/ /meta.stackexchange.com/questions/189115/the-strange-case-of-dr-upvoter-and-mr-edit?謝謝 –
+1:只因爲... –
只是因爲...? :D –