整合SSH-DWR等技術過程分析
ssh整合技術全過程總結分析
為了更清晰的分析ssh整合的流程,(也是為了鞏固自己所學的)在這里我將要
先分析整合步驟,然后在將步驟細化分析(根據我所了解的)。部分代碼塊可能也
將貼出。
ssh整合步驟:
***步:添加支持
1:建表、配置數據庫連接(切換到database視圖或hibernate視圖)
2:循序添加hibernate、spring、struts支持(切換到j2ee視圖,建web工程,
添加hibernate、spring、struts(myeclipse菜單-->add project-->hibernate、spring、struts)
說明:在整合了spring時候hibernate無需創建sessionfactory也就說在添加hibernate支持時候不
需要勾上那個創建sessionfactory的勾
3:生成pojo類,創建dao包將DAO類放在一起(切換到database視圖或hibernate視圖找到相應的數據庫中的表右鍵:Hibernate Reverse
Engineering)
選項說明:Java src folder 選擇所在項目的src目錄 下面多選框下面前三個都勾上
對于pojo類的映射文件配置。需注意表級聯問題,未配置好可能導致某些操作失敗(操作主表時,從表也同時操作.):在映射文件后面的set 設置cascade 屬性。如:
cascade = save-update(級聯添加) 同時添加主表和n個從表 、cascade = all 都級聯
4:如果涉及到DWR 那么還得把DWR開發包拷在lib下,dwr.xml、dwr20.dtd(提示文件)復制到WEB-INF
目錄下(至于怎么配置,下面我們詳細貼出)
第二步:后臺業務、.xml文件配置(如果是用MyEclipse6.5 開發的可能會出現個金典異常,解決辦法就是 選擇項目->Build Path->Configure
->Libraries 中Remove asm-2.2.3.jar 開發包 ,再lib下delet)
1:開始寫業務層,抽取接口類。寫dao層。因為業務層是調用dao層的,所以先把業務寫好了就算完成了第二
步就算完成半了。
2:可以選擇配置web.xml文件。
1)為spring支持的applicationContext.xml文件指定路徑配置(默認會認為在WEB-INF下面)
代碼:
- <context-param>
- <param-name>contextConfigLocation< span>param-name>
- <param-value>classpath:app*.xml< span>param-value>
- < span>context-param>
2)為了避免在事務還沒完成session就關閉的情況我們可以設置OpenSessionInViewFilter過濾器。這是
涉及到懶加載的問題。其實還有幾種常見的方法可以避免。如:在pojo類的主鍵映射文件中的set
添加一個屬性為 lazy="false" (立即加載關聯表,默認為true) 還有種就是用代碼控制立即加載關鍵
字 fetch。如:join fetch from A a join fetch a.
- (映射可以是所有文件)
- <filter>
- <filter-name>openssion< span>filter-name>
- <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter< span>filter-class>
- < span>filter>
3)為了解決編碼問題的過濾器(映射可以是所有文件)
- <filter>
- <filter-name>encoding< span>filter-name>
- <filter-class>org.springframework.web.filter.CharacterEncodingFilter< span>filter-class>
- < span>filter>
4)配置文件加載的監聽器 (沒有映射)
- <listener>
- <listener-class>org.springframework.web.context.ContextLoaderListener< span>listener-class>
- < span>listener>
5)配有DWR就必須為之注冊
- <servlet>
- <servlet-name>dwr< span>servlet-name>
- <servlet-class>org.directwebremoting.servlet.DwrServlet< span>servlet-class>
- <init-param>
- <param-name>debug< span>param-name>
- <param-value>true< span>param-value>
- < span>init-param>
- < span>servlet>
- <servlet-mapping>
- <servlet-name>dwr< span>servlet-name>
- <url-pattern>/dwr/*< span>url-pattern>
- < span>servlet-mapping>
說明:如果是整合ssh2 時候就可能在DWR測試時候會報錯因為ssh2的核心過濾器會將其攔截,導致
測試時候報錯。解決辦法我們將在下一篇ssh2整合流程分析講解給出具體解決方案
(上面的映射文件可以是所有文件)
3:現在可以創建action類了、及配置。控制
添加了struts支持就會在web.xml中自動注冊核心控制器 ActionServlet
這里涉及到核心控制器的工作流程了。在action中會重寫execute方法。簡單說客戶端發送HTTP請求,都會被核心控制器攔截
核心控制器請求填充ActionForm.再轉到Action.在Action中我們只要將form中的信息填充到
我們自己的ActionForm中就可以了如: 部門表Form類 部門Form(將form中信息填充到該form中) = (部門表Form) form;
要說的幾點需注意:
1)注冊頁面:注意action是.do結尾
2)寫類,繼承ActionForm(FormBean),界面屬性,并生成set/get方法
(類型可以是: 8種基本數據類型級包裝類和它們組成的數組。 還可以 String,java.sql.Date及其數組)
3)寫類,繼承Action,重寫execute方法,調用業務 。可以一個action類處理一個業務,也可在一個
action類中處理多個業務,就必須這樣幾個地方。 在頁面action .do后面可添加一個參數p="xx",
在struts-config.xml-> action-mapping->action 中添加屬性 parameter="p" 在請求的action類中直接
獲取參數p的值,在調用對應的方法。
4)在WEB-INF建struts-config.xml文件,注冊actionForm,action
并確定界面/actionForm/Action三者的關系.
action具體配置文件struts-config.xml:
代碼:
1.配置actionForm
- <form-beans>
- <form-bean name="" type="">
- < span>form>
- < span>form-beans>
2.配置action
- <action-mappings>
- <action path="/emp" parameter="" type="action類/代理">
- < span>action>
- < span>action-mappings>
說明:/emp jsp頁面中action 的 emp.do? 代理類:type="org.springframework.web
.struts.DelegatingActionProxy"
4:配置spring的applicationContext.xml
添加了spring支持的主要特點是IOC(控制反轉,依賴注入),AOP(面向切面編程)大大降低
層與層之間的耦合度。就關系的事務了。要做的***件事就是換文件頭子。
1)換文件頭子
- xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:util="http://www.springframework.org/schema/util"
- xmlns:p="http://www.springframework.org/schema/p"
- xmlns:aop="http://www.springframework.org/schema/aop"
- xmlns:tx="http://www.springframework.org/schema/tx"
- xsi:schemaLocation="
- http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
- http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd
- http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
- http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">
2)dao層bean已經自動生成了,需要創建一下bean。
- 如:
- <bean id="tsaleformService" class="com.service.TSaleformServiceImpl">
- <property name="tsaleformDAO" ref="TSaleformDAO">< span>property>
- <property name="tsDetail3DAO" ref="TSaleformDetailDAO">< span>property>
- < span>bean>
- 如:
- <bean name="/emp" class="com.struts.action.SaleformShowAction">
- <property name="itSaleformService" ref="tsaleformService">< span>property>
- < span>bean>
- <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
- <property name="sessionFactory" ref="sessionFactory">< span>property>
- < span>bean>
說明:sessionFactory 是自動生成的下面bean id.
- <bean id="sessionFactory"
- class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
- <property name="configLocation"
- value="classpath:hibernate.cfg.xml">
- < span>property>
- < span>bean>
- <tx:advice id="mycy">
- <tx:attributes>
- <tx:method name="*"/>
- < span>tx:attributes>
- < span>tx:advice>
- <aop:config>
- <aop:advisor advice-ref="mycy" pointcut="execution(* com.service.*.*(..))"/>
- < span>aop:config>
5: 現在該配置DWR了配置文件 dwr.xml。
1)將
文件打開 配置為:
- "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN"
- "dwr20.dtd">
說明:就是將"dwr20.dtd" 中前面那段"http:...dwr20.dtd" 什么的剪切掉 剩下就"dwr20.dtd"就ok
2)
- <dwr>
- <allow>
- <convert match="com.pojos.*" converter="bean">< span>convert>
- <create javascript="myjs" creator="spring">
- <param name="beanName" value="tsaleformService">< span>param>
- < span>create>
- < span>allow>
- < span>dwr>
說明:需導入dwr.dtd 文件用于提示用,記得話 不要當然沒問題
com.pojos.* 所有pojo類 , converter="bean" 固定的,bean 也可以換成hibernate,
javascript="myjs" 是自定義的,creator="spring" 固定的,param name="beanName"固
定的,value="tsaleformService"中 tsaleformService 是applicationContext.xml中
下面的對應的業務層bean 的id 如上id。
第三步:現在就關系到如何進行DWR測試。在瀏覽器中在工程名下直接/dwr .dwr 是剛才在web.xml
中所配置的映射名 如上:
測試成功將會出現你的自定義 "myjs" 鏈接 。進入就可進行測試業務層事務了.
這段總結是我在一個上午總結的總結的不是很專業、很全,我也是帶著復習的心情邊開著電腦對著源碼思索一步步、一個個字
打出來的!希望對有需要的人有所幫助,與人同樂就是我最大的快樂。
很高興跟大家互相關注,打算在把ssh2的一些地方整理下。
編輯推薦】