今天經過不懈的努力終於弄好了一個SSH2+DWR+jQuery的例子,不容易,畢竟我以前從來沒有接觸過這種形式的東西,我要好好的記下來。
首先是SSH2,也就是說Spring+Struts2+Hibernate。這是目前比較流行的Java Web應用開發模式。這個簡單,關鍵是確保你的應用的類庫千萬不能衝突,否則的話光是找錯就能累死你,因為這三個架構都使用了很多第三方jar包,這些jar包在三個架構裡版本不同,有時候會衝突。所以先給大家把環境和jar包列表弄出來。
環境:Spring2.5.6+Struts2.1.8+Hibernate3.5.2
Jar包列表:
- antlr-2.7.6.jar;
- aspectjrt.jar
- aspectweaver.jar
- c3p0-0.9.1.2.jar --- 這是c3p0資料來源的jar包,你可以選擇DBCP,但是我不建議用。
- cglib-nodep-2.1_3.jar
- common-annotations.jar
- commons-collections-3.1.jar
- commons-fileupload-1.2.1.jar
- commons-logging.jar
- dom4j-1.6.1.jar
- dwr-1.1.1.jar --- DWR的驅動包
- freemarker-2.3.15.jar
- hibernate3.jar
- javassist-3.9.0.GA.jar
- jta-1.1.jar
- log4j-1.2.15.jar
- ognl-2.7.3.jar
- ojdbc5.jar --- 這是Oracle的jdbc驅動包
- slf4j-api-1.5.8.jar
- slf4j-log4j12-1.5.0.jar
- spring.jar
- spring-aop.jar
- spring-beans.jar
- spring-context.jar
- spring-context-support.jar
- spring-core.jar
- spring-jdbc.jar
- spring-orm.jar
- spring-tx.jar
- spring-web.jar
- struts2-core-2.1.8.1.jar
- struts2-spring-plugin-2.1.8.1.jar
- xwork-core-2.1.6.jar
兄弟們自己把這些jar包搞定,直接就可以整合SSH2了,簡單的用腳後跟都能做出來,用不著像網上說的那樣還分步驟。至於設定檔就不要我寫了把,一共有兩個,一個是Spring的設定檔applicationContext.xml,主要是配資料來源、SessionFactory、TransactionManager。然後根據你的習慣配置如何管理系統中用的bean,如果你喜歡用<bean>節點配,那你就寫設定檔,如果你喜歡用註解配,那就開啟組件掃描<context:component-scan>,同時對於TransactionManager的配置也是一樣,看你喜歡設定檔還是註解,如果用註解,那麼開啟註解驅動<tx:annotation:driven>,簡單吧。第二個是struts.xml,既然和Spring整合,那麼Action的建立當然應該交給Spring,所以必須配一個常量【struts.objectFactory】,至於其他的配package和action,用腳後跟都會吧。至於Hibernate的對應檔,還用說嗎?
下面才是重點,也就是如何在你的系統中同時使用jQuery和DWR。說實話,到目前為止我也沒有明白這兩個傢伙的側重點到底是啥,有啥不同之處,應用情境是什麼,還要再學習學習才行。但是從網上的資料來看,前者比較側重於介面,有一大票的控制項,後者好像更側重與背景互動。我只能說,我還不確定,也許不對,大家不要被我誤導。
首先是將DWR引入到應用中來,這個我已經討論過了,可以看另一篇Blog。但是這裡需要說明的是,由於整個能夠應用是基於Spring架構管理bean的,所以DWR就不能自己建立JavaBean了,也就是說DWR需要從Spring容器個取得bean。為了實現這個目標,在dwr.xml設定檔中,我們應該這麼配:
<create creator="spring" javascript="ServiceBean" >
<param name="beanName" value="serviceBean" >
</create>
而通常情況下,我們往往配置成:
<create creator="new" javascript="ServiceBean" >
<param name="class" value="xxx.yyy.zzz.ServiceBean" >
</create>
看出區別了嗎?其中第一個配置中的value屬性的值需要特別注意,這個值一定是我們可以通過Spring的getBean(String 參數值)方法得到Bean的那個字串參數值,否則一定不行。
其次,是修改web.xml將dwr的servlet配置起來,包括那些參數,不再贅述。
第三步,在WebRoot下建一個目錄用來存放js檔案和css檔案,我估計是不能放在WEB-INF下的,否則從jsp檔案中無法直接引用。
第四步,將jQuery的js檔案down下來,如果你需要jQuery的ui,那麼除了jQuery的核心js以外,還要jquery-ui.min.js和jquery-ui.css,因為前者需要後面的css檔案才能運行。
第五步,在你的jsp檔案中,首先按照dwr的規範將engine.js和util.js加進來,如果你需要調用JavaBean,比如上面的ServiceBean,那麼需要將它也加進來。src屬性可以參照上一篇Blog。
第六步,將jQuery的js加進來,寫在dwr的js之後,一定是之後。至少在我這裡是這樣的,我把他們掉了個個,結果發現使用DWRUtil的時候報錯。
第七步,由於jQuery和dwr的uitl衝突,所以在寫script方法時使用這種方式防止衝突:
var j = jQuery.noConflict();
然後jQuery定義的方法中的所有【$】符號用j代替。
至此,整合完畢,當然了css檔案的匯入也是必須的,我就沒寫了。記住一點,因為這些檔案都被引入到jsp中,所以為了讓你的頁面能夠引用它們,一定要加上${pageContext.request.contextPath},否則不行。還有就是如果發現某些css沒有效果,檢查一下這些css檔案是否通過url引用了某些外部的資源,比如說圖片等等,改一下就行了。
我的頁面如下: