国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

基于 J2EE 體系實現(xiàn)多層結(jié)構(gòu) Blog 平臺(1)

2019-11-18 12:28:09
字體:
供稿:網(wǎng)友

  Blog(WebLog)在Internet上越來越流行。許多網(wǎng)友都有了自己的Blog,通過Blog展示自己,結(jié)識更過的網(wǎng)友。比較聞名的Blog平臺是基于asp.net的開源項目.Text。但是它的邏輯全部以存儲過程的形式放在數(shù)據(jù)庫中。雖然存儲過程能大大提高數(shù)據(jù)操作的效率,但是存儲過程本身是結(jié)構(gòu)化的程序,無法發(fā)揮面向?qū)ο蟮耐Γ膊槐阌趯崿F(xiàn)代碼復(fù)用。
  
  因此,我決定實現(xiàn)一個基于J2EE體系的多層結(jié)構(gòu)的Blog平臺,功能和界面和.Text非常類似,暫命名為Crystal Blog。實現(xiàn)的功能有:發(fā)表和編輯文章;多用戶支持;全文檢索;rss支持;圖片治理;SMTP郵件發(fā)送等常見功能。界面如下:
   基于 J2EE 體系實現(xiàn)多層結(jié)構(gòu) Blog 平臺(1)(圖一)


  一、選擇平臺和框架
  由于使用J2EE平臺,我們預(yù)備采用WebLogic Server 8.1作為運行平臺,使用WebLogic Workshop8.1這個強大的集成化IDE作為開發(fā)工具。數(shù)據(jù)庫選擇MS SQL Server 2000 SP3,建立一個名為blog的數(shù)據(jù)庫存儲所有的用戶數(shù)據(jù)。
  
  由于我們并沒有針對特定數(shù)據(jù)庫編碼,稍后我們會使用其他數(shù)據(jù)庫測試。在系統(tǒng)設(shè)計之前,選擇一個優(yōu)秀的框架能大大提高開發(fā)效率。SPRing是一個輕量級的J2EE框架。它覆蓋了從后臺數(shù)據(jù)庫的JDBC封裝到前臺Web框架的幾乎所有方面。并且,Spring的各個模塊耦合非常松散,我們既可以用它作為整個應(yīng)用程序的框架,也可以僅僅使用它的某一個模塊。此外,Spring非常強大的集成功能使我們可以輕易地集成Struts編寫的Web端,或者使用Hibernate作為后端的O/R Mapping方案。
  
  Spring的核心思想便是IoC和AOP,Spring本身是一個輕量級容器,和EJB容器不同,Spring的組件就是普通的java Beans,這使得單元測試可以不再依靠容器,編寫更加輕易。Spring負(fù)責(zé)治理所有的Java Beans組件,同樣支持聲明式的事務(wù)治理。我們只需要編寫好Java Beans組件,然后將它們“裝配”起來就可以了,組件的初始化和治理均由Spring完成,只需在配置文件中聲明即可。這種方式最大的優(yōu)點是各組件的耦合極為松散,并且無需我們自己實現(xiàn)Singleton模式。
  
  由于后臺要使用關(guān)系數(shù)據(jù)庫存儲數(shù)據(jù),使用O/R Mapping必不可少。iBatis是又一個類似于Hibernate的O/R Mapping方案,特點是小巧,配置簡單,查詢靈活,完全符合我們的要求。
  
  除了Spring和iBatis,用到的第三方組件還有:用于全文搜索的LUCene引擎,用于文件上傳的common-file-upload1.0,用于輸出RSS的RSSLibJ1.0 RC2。
  
  由于使用Spring這個輕量級框架,就無需EJB服務(wù)器,只需要Web服務(wù)器即可。因此,系統(tǒng)可以運行在WebLogic Server,Tomcat和Resin等支持Servlet和jsp的Web服務(wù)器上。
  
  二、系統(tǒng)設(shè)計
  很顯然,多層結(jié)構(gòu)的J2EE架構(gòu)能保證系統(tǒng)的靈活性和可擴展性。我們?nèi)匀徊捎帽硎緦?邏輯層/持久層三層設(shè)計。
   基于 J2EE 體系實現(xiàn)多層結(jié)構(gòu) Blog 平臺(1)(圖二)
  整個系統(tǒng)以Spring為基礎(chǔ),持久層采用DAO模式和iBatis O/R Mapping,封裝所有數(shù)據(jù)庫操作;中間層是由Spring治理的普通的JavaBean,采用Fa?ade模式;表示層使用Spring提供的MVC框架。由于Spring對其他框架的良好集成,我們采用Velocity作為View。由于Velocity不能調(diào)用Java代碼,從而強制使用MVC模式而不是在View中嵌入邏輯代碼。
  
  三、配置服務(wù)器
  在WebLogic中新建一個Configuration,命名為blog,添加一個數(shù)據(jù)源,命名為jdbc/blog:
  基于 J2EE 體系實現(xiàn)多層結(jié)構(gòu) Blog 平臺(1)(圖三)
  整個應(yīng)用程序的目錄結(jié)構(gòu)如下:
  
  crystalblog/
  + doc/ (存放API文檔)
  + report/ (存放JUnit測試結(jié)果)
  + src/ (存放java源程序)
  + web/ (web目錄)
   + manage/ (存放blog治理頁)
   + SKIN/ (存放blog界面頁)
   + upload/ (存放用戶上傳的圖片)
   + WEB-INF/
    + classes/ (存放編譯的class文件)
    + lib/ (存放用到的所有jar文件)
    + search/ (存放Lucene的index)
    + c.tld (使用jstl必須的文件)
    + dispatcher-servlet.xml (Spring配置文件)
    + web.xml (標(biāo)準(zhǔn)web配置文件)
  + blog.war (打包的可部署應(yīng)用)
  + build.xml (ant腳本)
  
  四、編寫Ant腳本
  Ant是一個非常棒的執(zhí)行批處理任務(wù)的工具。使用Ant能使編譯、測試、打包、部署和生成文檔等一系列任務(wù)全自動化,從而大大節(jié)省開發(fā)時間。首先我們把用到的所有.jar文件放到/web/WEB-INF/lib中,然后編寫compile任務(wù),生成的class文件直接放到web/WEB-INF/classes目錄下。假如編譯成功,就進行單元測試,單元測試的結(jié)果以文本文件存放在report目錄中。假如測試通過,下一步便是打包成blog.war文件。接著把應(yīng)用部署到服務(wù)器上,直接將web目錄的內(nèi)容復(fù)制到%BEA_HOME%/user_projects/domains/blogdomain/applications/blog/目錄下即可。假如要在Tomcat上部署,直接將整個web目錄復(fù)制到%TOMCAT%/webapps/blog/下。最后,假如需要,可以用javadoc生成api文檔。
  
  五、系統(tǒng)設(shè)計
  Crystal Blog共分成三層結(jié)構(gòu):后臺數(shù)據(jù)持久層,采用DAO模式;中間邏輯層,采用Facade模式;前端Web層,采用MVC結(jié)構(gòu),使用JSP作為視圖。
  
  設(shè)計Domain對象
  
  Domain層是抽象出的實體。根據(jù)我們要實現(xiàn)的功能,設(shè)計以下實體,它們都是普通的Java Bean: Account:封裝一個用戶,包括用戶ID,用戶名,口令,用戶設(shè)置等等。 Category:封裝一個分類,一共有3種Category,分別用來治理Article,Image和Link,一個Account對應(yīng)多個Category。
  
  Article:封裝一篇文章,包括Title,Summary,Content等等,一個Category對應(yīng)多個Article。
  
  Feedback:封裝一個回復(fù),包括Title,Username,Url和Content,一個Article對應(yīng)多個Feedback。
  
  Image:封裝一個圖片,Image只包含圖片信息(ImageId,Type),具體的圖片是以用戶上傳到服務(wù)器的文件的形式存儲的。一個Category對應(yīng)多個Image。
  
  Link:封裝一個鏈接,和Category是多對一的關(guān)系。有Title,Url,Rss等屬性。
  
  Message:封裝一個消息,使其他用戶在不知道Email地址的情況下能夠通過系統(tǒng)發(fā)送郵件給某個用戶。
  
  最后,為了唯一標(biāo)識每條數(shù)據(jù)庫記錄,我們需要一個主鍵。在MS SQL Server和Oracle中可以使用自動遞增的主鍵生成方式。但是很多數(shù)據(jù)庫不支持自動遞增的主鍵,考慮到移植性,我們自己定義一個Sequence表,用于生成遞增的主鍵。Sequence表有且僅有7條記錄,分別記錄Account到Message對象的當(dāng)前最大主鍵值。系統(tǒng)啟動時,由SqlConfig負(fù)責(zé)初始化Sequence表。SequenceDao負(fù)責(zé)提供下一個主鍵,為了提高效率,一次緩存10個主鍵。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 鄯善县| 桑植县| 浦县| 巴林右旗| 松潘县| 寿光市| 松溪县| 祁门县| 巴林右旗| 伊春市| 山东省| 高唐县| 钟祥市| 龙南县| 松原市| 柏乡县| 保靖县| 长垣县| 喀什市| 荃湾区| 边坝县| 大丰市| 绵竹市| 耿马| 清流县| 孝昌县| 兴城市| 道孚县| 内江市| 封丘县| 泰安市| 济南市| 读书| 平塘县| 长乐市| 陵川县| 呼和浩特市| 浦江县| 汶上县| 襄垣县| 鲜城|