org.springframework.web.struts.ContextLoaderPlugIn 和 org.springframework.web.context.ContextLoaderListener
是視圖層加載sping的兩種方式。
那么這兩種方式誰的優(yōu)先級高,從容器加載程度上看,是org.springframework.web.context.ContextLoaderListener
那么中方式都被配置在項(xiàng)目中,會使用哪個一個呢?
答案是org.springframework.web.struts.ContextLoaderPlugIn
當(dāng)然如果你不需要在視圖層采用lazy而配置org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
那么你可以兩個都配置。
但如果你需要使用,那就會。
我們知道,容器初始化Spring配置文件時,使用getServletContext().setAttribute方法key,value全局保存。
那么當(dāng)你使用OpenSessionInViewFilter時,他取得的是哪個呢?
其實(shí)OpenSessionInViewFilter是sping的Filter,它采用WebApplicationContextUtils的方式獲得WebApplicationContext
,但它并不能加載由struts-config.xml文件ContextLoaderPlugIn提供初始化的上下文。
如果你需要在視圖層加載一對對....等關(guān)聯(lián)對象。那么就會有
could not initialize proxy - the owning Session was closed
錯誤。
到此處我們看到,sping在應(yīng)用程序和OpenSessionInViewFilter之間,加載了不同的上下文。
我們知道OpenSessionInViewFilter下無法獲得ContextLoaderPlugIn加載的上下文,那我們可以推算,
應(yīng)用程序應(yīng)該加載了ContextLoaderPlugIn上下文,而OpenSessionInViewFilter卻加載了ContextLoaderListener的上下文。
才導(dǎo)致視圖層session有關(guān)閉的問題。
嘗試解決此問題,若你配置了兩個,則刪除ContextLoaderPlugIn的加載方式。
若你只配置了ContextLoaderPlugIn的加載方式,則改成ContextLoaderListener加載方式。
原創(chuàng)文章,轉(zhuǎn)載請注明出處。
http://www.tkk7.com/beijing2008/articles/317973.html
posted on 2010-04-11 02:24
.Sun 閱讀(3828)
評論(1) 編輯 收藏