不,看起來ServletContextListener
界面是而不是旨在能夠阻止啓動的Web應用程序。
由於this Answer狀態,在Servlet規範說遇到異常時,ServletContextListener
可以某種程度上禁止訪問的Web應用程序。該詞may
表示可選,不是必需的。該規範也沒有明確規定停止訪問Web應用程序的意義。
顯然,在各種網絡容器中實施的行爲差異很大。有些什麼都不做,有些登錄並繼續前進,有些則阻止部署Web應用程序。
我與Tomcat 8.0.33的經驗...將throw new RuntimeException ("bogus stop servlet ");
置於contextInitialized
方法可防止應用程序被部署。在IDE報告中進行部署期間,控制檯報告「FAIL - 在上下文路徑處部署的應用程序/但上下文無法啓動」。不幸的是,控制檯和日誌都沒有捕獲實際異常的報告。因此,如果您從一個或多個偵聽器中拋出多個Exception,則調試將不明顯。
正如Stack Overflow中的其他地方所提到的,最可靠的解決方案可能是讓您的ServletContextListener
標記成功或失敗,標記變量存儲在servlet會話中。然後讓你的servlet代碼檢索並檢查該標誌。然後您的servlet代碼將確定適當的操作過程。您的Web應用程序將被部署,但您自己的Servlet可能會選擇不做任何事情併發送一些HTTP錯誤代碼。
類似的問題:
備註:在添加或編輯您的ServletContextListener
時,您可能需要對您的項目執行「清理並構建」操作。您的IDE熱插拔或部署開發功能可能無法在新的或已更改的偵聽器上拾取。跟蹤你的代碼或做一些日誌記錄來驗證。
您是否嘗試拋出異常? –