我有一個Groovy類,MyRequest
,用於處理每個HTTP請求。在構造函數中,此類將實例變量_session
設置爲request.getSession(true)
(其中request
是當前的HttpServletRequest)的值。在類中設置Groovlet會話對象?
在我的Groovy 腳本中,我所做的第一件事是創建一個MyRequest
的實例。其次,我檢查Groovlet對象的特定屬性。隨着我對腳本的第一次請求,這個session
對象爲空,所以我得到一個空對象引用錯誤。對腳本的第二個請求session
對象已定義,並且不會發生錯誤。
按照Groovlet documentation,這種情況應該可以預料,因爲我沒有明確設置的Groovlet的session
對象在我腳本其生存確認之後。
我真的不想再添加一個粘貼代碼到我的腳本(以及項目中的任何未來版本)。這是我創建MyRequest
對象的原因之一 - 爲任何實例化腳本的腳本定義session
對象。那麼,如何在MyRequest
類中爲我的Groovy腳本定義session
對象?我能以某種方式使用metaClass
對象嗎?
因爲我已經傳入了HttpServletRequest I也希望避免在會話中傳遞。我想這不得不工作。謝謝。 –
對不起,我不得不接受答案。我沒有充分考慮它就接受了它。這個答案並不能真正解決我試圖避免的問題 - 在我寫在我的項目中的每個腳本中初始化會話對象。 –
@jsumners沒有問題,我有同樣的問題,但通過讓網關腳本通過groovlet會話,請求,響應等來解決它的目標對象。如果您有多個腳本,則可能需要擴展GroeyyServlet,並通過MOP將會話注入到「MyRequest」類中。還可以使用missingMethod,PropertyAccessInterceptor或其他MOP工具來獲取/設置會話狀態。看看Grails,會話被注入到控制器中。事實上,爲什麼你不使用Grails,對於你的用例太重了? – virtualeyes