最近在做系統改造的時候,還遇到了一個問題是,如何整合Spring Struts2和Hessian。
當配置Spring和Struts2的時候,在web.xml做了如下配置:
<context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:/spring/*.xml</param-value></context-param><listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class></listener>
通過設定listener載入Spring的上下文環境,並在struts.xml中設定對象工廠為Spring:
<constant name="struts.objectFactory" value="spring" />
這樣,Struts2就可以使用Spring上下文環境中的action bean了。
但在配置Hessian的時候,以前在web.xml中是這樣配置的:
<servlet> <servlet-name>Remoting</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:/spring/*.xml</param-value> </init-param> <load-on-startup>1</load-on-startup></servlet><servlet-mapping> <servlet-name>Remoting</servlet-name> <url-pattern>/remoting/*</url-pattern></servlet-mapping>
在初始化Hessian的servlet的時候又一次把Spring設定檔作為參數,這樣又會重建一個Spring上下文環境,導致Spring中bean的重複。
為瞭解決這個問題,在配置Hessian時,做了一下修改,如下:
<servlet> <servlet-name>Remoting</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> <init-param> <!-- <param-name>contextConfigLocation</param-name> <param-value>classpath:/spring/*.xml</param-value> --> <!-- 該servlet的spring上下文採用WebApplicationContext,不再重複產生上下文 --> <param-name>contextAttribute</param-name> <param-value> org.springframework.web.context.WebApplicationContext.ROOT </param-value> </init-param> <load-on-startup>1</load-on-startup></servlet>
即在初始化Hessian時不再傳入Spring設定檔,而是傳入通過listener初始化的Spring WebApplicationContext上下文環境,即使用同一個上下文環境。
本文出自 “學習文檔” 部落格,請務必保留此出處http://zephiruswt.blog.51cto.com/5193151/1290391