11.SSH整合
由於自己學習的版本比較落後,這裏就不總結了
在我這個版本整合的過程中的幾點問題:
1.在web.xml的配置過程中:
<!-- 如果使用的是load獲取數據,在jsp頁面申請取得數據時才真正的執行sql,而此時session已經關閉 --> <!-- 需要加上 OpenSessionInViewFilter 這個攔截器,用於延長session在jsp調用完後再關閉,另外需要寫在 struts 攔截器之前 --> <!-- 原因:Filter順序—先進後出,寫在 struts之前,先經過openSessionInViewFilter,由其管理session,struts攔截完後,openSessionInViewFilter再決定 關閉session的時間--> <!-- 另外:這個過濾器會對事務產生影響,如果方法沒有加上事務邊界,那麽 openSessionInViewFilter 自動將該方法變為 只讀 方法,所以需要在配置 文件中 指定 事務邊界--> <filter> <filter-name>openSessionInViewFilter</filter-name> <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class> </filter> <filter-mapping> <filter-name>openSessionInViewFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
2.註:struts2 和 Spring 整合之後,Action 的 生成方式有兩種
第一種:<action name="user" class="com.bjsxt.registration.action.UserAction">
這種方式 由 struts 創建Action,struts創建的Action有幾個特點:
1.不需要寫 @Resource Action一產生的時候呢,會到Spring容器裏面去找它要註入的內容 (service,dao等)(只要有 get set 方法,默認就會按照 byName的方式 自動裝配到Action中)
2.不需要寫 @Component,因為,Action 是 struts管理的,寫了只會在Spring容器中多出來個bean而已
3.不需要寫 @Scope(“prototype”),默認設置就是每次訪問都創建Action
第二種:<action name="user" class="u> 使用action標簽中 class屬性配合 @Component(“u”)
這種方式可以由 spring 創建Action,spring創建的Action特點:
0.在Action中需使用 @Component(“u”),來生成 Action 這個bean,
1.可以 指定 註入 bean的 具體名字 ,即可以使用 @Resource(name=””);
2.需要 使用@Scope(“prototype”)不要忘記,因為默認的應該是 ‘單例的’
註:struts2 和 Spring 整合之後,Action 的 生成方式有兩種
第一種:<action name="user" class="com.bjsxt.registration.action.UserAction">
這種方式 由 struts 創建Action,struts創建的Action有幾個特點:
1.不需要寫 @Resource Action一產生的時候呢,會到Spring容器裏面去找它要註入的內容 (service,dao等)(只要有 get set 方法,默認就會按照 byName的方式 自動裝配到Action中)
2.不需要寫 @Component,因為,Action 是 struts管理的,寫了只會在Spring容器中多出來個bean而已
3.不需要寫 @Scope(“prototype”),默認設置就是每次訪問都創建Action
第二種:<action name="user" class="u> 使用action標簽中 class屬性配合 @Component(“u”)
這種方式可以由 spring 創建Action,spring創建的Action特點:
0.在Action中需使用 @Component(“u”),來生成 Action 這個bean,
1.可以 指定 註入 bean的 具體名字 ,即可以使用 @Resource(name=””);
2.需要 使用@Scope(“prototype”)不要忘記,因為默認的應該是 ‘單例的’
11.SSH整合