2013-01-11 28 views
-3

我需要做一些改變其他開發人員編寫一個Java EE Struts2的Web應用程序。如何跟蹤由Struts2 Web應用程序運行的所有方法?

因爲我不知道它究竟是如何工作的,我想所有的行動和被稱爲對每個請求方法映射,以改變之前更好地瞭解Web應用程序的工作流程。

有沒有辦法來實現這一目標?

回答

0

正如我從你的問題了,你可以嘗試使用這樣的。

如果您發現操作類和​​那麼這對您來說可能很容易,在調試模式下運行應用程序並從​​函數的開始處開始調試。按F6到逐行調試它,如果你看到任何新的功能,然後去功能按F5內或手動去功能發生新的突破點出現,然後按F6去那個功能。

希望如此,它會幫助你

6

採用下列方法之一(或更多):

  1. struts.xml看看,怎麼看Configuration Elements(特別Actionsmethods)被映射以及如何在編譯時再現應用程序的行爲。

  2. Write an Interceptor記錄(或保存某處)所有傳入堆棧的動作和方法的名稱,從請求中讀取它們;

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

@zzzz,你能解釋一下你的贊成票去除和假編輯就這個問題和答案在這裏的http:/ /meta.stackexchange.com/questions/189115/the-strange-case-of-dr-upvoter-and-mr-edit?謝謝 –

+0

+1:只因爲... –

+0

只是因爲...? :D –

1

所有方法?或者只是你的應用程序中的?

最快,最簡單的方法(對我來說,反正)是使用AOP儀器的所有應用程序的代碼,記錄所有條目,並可能退出。海事組織這將比你想要的更多,儘管這是你要求的。一旦你有了這個輸出,你就可以開始把它縮小到更真實的東西。

(實際上,你可以用這個玩一些有趣的遊戲,包括創建序列圖。)

相關問題