2009-11-13 19 views
5

我正在使用Quartz爲Web應用程序安排後臺任務。其中一些任務僅針對相同的Web應用程序發出請求。在Tomcat中關閉內部ServletRequest

我想這取決於任何形式的網絡設置(例如用我自己的域名的請求可能無法正確,如果從數據中心內進行路由),以避免。有沒有Java API來引發ServletRequest並由Tomcat內部處理(沒有涉及任何實際的HTTP)?

我還是想換工作納入一個servlet請求而不是要求直接在後臺任務的Java代碼,這樣我就可以回去作爲一個配置選項常規HTTP請求。

Tomcat特有的代碼是可以接受的。

回答

0

有趣的想法。這當然沒有標準的API,我也不認爲有公佈的Tomcat特定的機制。

什麼會收到請求?一個servlet? JSP?彈簧控制器?根據這一點,根據目標的作用,你可能會直接調用目標,而不是通過容器進行路由。但是如果你有JSP,一堆過濾器和其他servlet錯綜複雜的東西,這可能不是沒有選擇。

如果你使用Spring的offchance,那麼你的石英工作可能只是直接與控制器連接好,當你喜歡它將會是容易的。你真幸運嗎?

+1

我想通過一個URL(而不是直接調用控制器),以便以後可以返回到常規HTTP。保持事物分離。 – Thilo 2009-11-13 09:04:22

+0

標準API:如果我自己在一個servlet中,我想我可以做requestDispatcher.include(fakedRequest,fakedResponse)。但我不是。 – Thilo 2009-11-13 09:05:25

1

你想從那個計劃任務中得到什麼?標準的Web服務器行爲是獲取HTTP請求並用特定數據進行響應。我假設你的任務不需要,即你只想執行特定的代碼庫駐留在Web應用程序中的處理。

如果上述假設的是正確的用戶可於業務處理邏輯中分離出的servlet/JSP邏輯,並直接從您的計劃任務調用業務邏輯層的類。

0

使用URLConnection或apache-commons httpclient與localhost/127.0.0.1 - 因此它將被正確路由。

+1

假定服務器正在127.0.0.1上進行偵聽,但情況並非總是如此。 – skaffman 2009-11-13 10:00:47

+0

約0.0.0.0? :) – Bozho 2009-11-13 10:18:05

0

servlet代碼的職責太多。將其重構爲普通的vanilla Java類,讓任務類訪問它(或者反過來讓它訪問任務類)。如有必要,明智地使用ServletContext

如果您詳細闡述了您認爲這是解決方案的實際問題和功能需求,我們可能會提出更好的建議。

+0

「實際問題和功能需求」:我不需要這樣做,我只是想知道我是否可以。 – Thilo 2009-11-13 12:16:10

+0

您可以使用'java.net.URLConnection'或Apache Commons HttpClient多次提到。然而,完整的畫面有點味道,我只是想在它爲時已晚之前提醒一下。 – BalusC 2009-11-13 18:54:08