Catalina-tomcat中處理異常的一個BUG?

發表于:2007-07-01來源:作者:點擊數: 標簽:
BEA使用的是Catalina,也就是 tomcat ,無意中發現一個非常隱蔽的也許不算致命的BUG,在JSP中某處的標簽如果執行錯誤,會在前面某處輸出緩沖區時無異常退出,而不是在真實錯誤地點發出錯誤異常。 10:45 分:卻發現FormTag執行異常退出,而且錯誤日志沒有任何
 BEA使用的是Catalina,也就是tomcat,無意中發現一個非常隱蔽的也許不算致命的BUG,在JSP中某處的標簽如果執行錯誤,會在前面某處輸出緩沖區時無異常退出,而不是在真實錯誤地點發出錯誤異常。
10:45 分:卻發現FormTag執行異常退出,而且錯誤日志沒有任何輸出;所以決定轉過去先看看是什么回事。非常奇怪的是,就算在doEndTag中輸入斷點后,錯誤日志仍沒有輸出。最后的檢查結果,不是程序有錯,而是在某種條件下,tag對output沒有響應,所要求輸出的vaildatorscript 只輸出了一半。

這個tag集成了struts.validator的JavascriptStaticTag,不知有沒有人這樣做:我不想花時間重修把它的代碼解剖出來,也不希望讓前臺的頁面多幾個需要配置的tag;于是直接用上級的FormTag向它置值,然后直接調用它的doStartTag()——其實,在 JSP容器中不也是這樣按注冊記錄調用它的方法嗎?此前偶而發現有這樣的錯誤,不過轉眼就恢復正常。既然異常消失,錯誤日志也沒有記錄,也就無法發掘它的錯誤來源了。這次重新出現,引起我的注意,而且錯誤持續時間比較長,于是可以在程序中設置斷點,跟蹤它的錯誤發生的位置。

結果,錯誤源集中到了不是我寫的,來自于struts的validator的這個標簽。對于struts這樣的中間構件,我現在的態度是如果我不能完看懂它的代碼,可以在里面設置斷點記錄輸出到錯誤日志degbug,就不加采用,所以現在我手中的struts只是有它的構件功能,使用方式與一般所見的struts已經是完全不同了,這也包括了這個javascripStaticTag。對于它的用法,我是希望它作為程序的一部分,當我選定要對某個表單的客戶端進行驗證時,它自動完成所必需的代碼輸出,而不需要我手工地設這個TAG,還要匹配它的調用函數名稱。這個集成是成功的,已經運行了很長時間,經常了一定強度的測試,但平心而論,對于其中的代碼我仍是沒有深入。

錯誤的產生后我打算向緩沖區輸出斷點,這是由于這個程序是向頁面輸出validator-rules.xml中的javascript代碼,但發現沒有成功,許多斷點沒有輸出;表明程序輸出是中斷的,但輸出過程是正常的,否則錯誤日志會記錄下來。進一步的驗證表明,程序運行以及從內存記錄中獲得的 javascript是完整的,從而排除了讀取xml發生錯誤的可能性,而且也證明JAVA程序的運行是完全正常的,錯誤不在開發者程序,而在于平臺本身,在輸出緩沖區時無異常退出了?。?!由于javascriptTag中是使用stringBuffer最后toString再輸出到緩沖區,或者,是由于這個量太大,所以溢出了??于是我把它分成逐段都輸出,但結果完全一樣。也許是由于我對于它的調用不是由容器進行,直接由parent-TAG調用方法造成緩沖區分配較????于是改成getString方法,由parent完成輸出,可是,結果仍然是一樣的。

最后,我打算先越過這一步,看看執行結果如何,發現該頁由于BSelectTag由于調關聯的BaseIf接口昨晚錯刪除了一個方法出現異常,于是重新編譯后,再執行,結果發現上面的錯誤消失了。重新恢復這個錯誤,異常重新出現。這樣也就發現了它的原因。事實上,BEA使用的是CATLINAJSP 容器,解釋一個JSP頁面時是一個統一的過程。這個異常表明,在JSP中前后的輸出文本生成是相關聯的,位于后面的程序運行錯誤,象這里,是在后面運行時出現了methodnofound(我估計,因為即使是服務器日志也沒有發現錯誤記錄),也令這個解釋執行過程中斷,造成緩沖區文本輸出一半無異常退出。

我很少處理JSP,這是一個經驗,如果出現這種緩沖異常輸出而程序捕捉不到任何的錯誤日志時,先把這個頁面相關的程序都編譯一遍,排除這個可能再說。

這個問題整整花了我兩個小時找原因,的確隱蔽,一些副作用是這樣就對validator.javascript的代碼熟悉了,項目后面有點時間的話,就把它修改一下,只輸出這次需要的驗證方法script:我總覺得它輸出了太多的東西,把validator_rules.xml中的所有 script方法全送出來了。

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97