2011-10-13 83 views
0

我正在開發Java Servlet以在Tomcat中運行。我目前正在Windows XP機器上使用XAMPP軟件包(包括Tomcat 7)對其進行測試(不要擔心,我不打算在生產中使用它)。我這樣做是因爲我需要保持連接打開,所以我可以使用Comet服務器推送通信(服務器推送這是必須具備的要求)。如何診斷Tomcat中的空指針異常

該servlet正在運行,並且我寫了一個測試客戶端,它顯示客戶端和服務器正在完美通信。客戶端通過互聯網從服務器上訪問服務器,HTTP頭在servlet中生成BEGIN事件,然後通過READ事件進行通信。

然後,我嘗試一個「真正的」客戶端,這對我們來說是一個專有設備,我沒有完全控制。很難獲得關於它在做什麼的許多信息,更糟糕的是,其他程序員將來可能會對其進行更改。充其量,我所能做的就是對未來的變化提出建議。

的設備使得與頭中的HTTP請求時,服務器處理開始事件,但後來,當設備試圖繼續交談,則連接斷開,我得到我的卡塔利娜日誌文件中的以下內容:

2011年10月12日下午5點59分00秒org.apache.coyote.http11.Http11NioProcessor過程 嚴重:錯誤處理請求 顯示java.lang.NullPointerException 在org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java :436) at org.apache.coyote.http11.Http11NioProcessor.process(Http11NioProcessor.java:317) at org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.proces (java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110))在org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.run(NioEndpoint.java:1544) 在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:603) 在java.lang.Thread.run(Thread.java:722)

我知道這是很難用這有限的診斷信息,這正是我的問題。如何獲得有關Tomcat發生的更多信息?此外,我能做些什麼來保護/告知/幫助未來的設備程序員製造相同的錯誤(無論發生什麼)?顯然,問題在於嚴重,那麼我是否面臨黑客利用故意破壞我的服務器的危險?

任何及時的答覆和任何建議都會贏得我永恆的感激。


剛剛更新 - 我不知道爲什麼,但問題就走了,當我們刪除所有回車和換行從最初的頭之後的通信源。

感謝您的幫助。 StackOverflow規則!

+0

我發現至少2個相關的錯誤信息:https://issues.apache.org/bugzilla/show_bug.cgi?id=51120和https://issues.apache.org/bugzilla/show_bug.cgi?id=52009 。 – BalusC

+0

非常感謝。在我的頭靠在牆上呆了一整天,並搜索了幾個小時後,你發現我不能。不知道爲什麼我沒有自己找到這些網頁。 – DaveWalley

回答

0

投入調試日誌。然後你會知道它失敗的地方。諸如瞭解請求是如何不同的,以及爲什麼會導致丟棄的連接很重要,可以通過記錄服務器正在執行的所有事情來找到。 Log4j非常棒,因爲它可以讓你記錄任何你想要的東西,然後當你不再需要時立即關掉它。

「嚴重」意味着您的服務器不能忽略錯誤並繼續執行程序,它並不表示可能不存在多嚴重的安全問題。

+0

謝謝。我會試用Log4j。 Java不是我的主要工具,而且我以前從未嘗試過servlet,所以更好的日誌記錄應該會對我有所幫助。 – DaveWalley