《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 其他 > 业界动态 > Java Mail System和电子商务的集成

Java Mail System和电子商务的集成

2009-01-08
作者:邢云

引?言?

??? 對于電子商務(wù)網(wǎng)站的用戶來說,他們需要的是一個穩(wěn)定,美觀的購物環(huán)境,和一個設(shè)計良好的購物流程。但是在線購買之余,用戶們也需要一些交流和反饋,這就需要留言簿,論壇,電郵等一些模塊同樣設(shè)置在網(wǎng)站中。但是這些模塊大多在網(wǎng)站中分散設(shè)計,用戶使用起來很不方便,對于后臺管理來說,分散而非集中的電子商務(wù)模塊是耗費成本的。本文集中講述了其中的一個模塊:電郵部分如何與電子商務(wù)集成。它的設(shè)計模式,同樣可以適用于其他各個模塊。?

程序功能模塊和分化?

??? Java Mail System包含了如下三個部分:?

(1)類似于Outlook的客戶端軟件Java Mail Box,允許用戶在當(dāng)前系統(tǒng)中配置其他網(wǎng)站的電郵,包括發(fā)送郵件,接收郵件,包括圖片,HTML文檔,附件的處理。?

(2)服務(wù)器端的電郵Java Mail Web Service,使用JavaMail構(gòu)建了一個SMTP,IMAP的服務(wù)器(或者是POP3,協(xié)議可以更改)。電子商務(wù)網(wǎng)站中的用戶在注冊成功的同時,就擁有了該系統(tǒng)的一個帳號,無需再配置,可以收發(fā)郵件一些操作,對服務(wù)器的文件夾進(jìn)行常規(guī)操作。?

(3)與電子商務(wù)的集成:Tomcat的JNDI解決方案,實現(xiàn)了電子商務(wù)系統(tǒng)和Java mail system的連接,當(dāng)用戶的注冊信息,和其他在電子商務(wù)網(wǎng)站中的信息用JDBC寫入數(shù)據(jù)庫后,JNDI指向了共同的CONNECTING POOL,這些,一方面通過修改TOMCAT的配置文件,令一方面,JSP的頁面元素中,指明JNDI?

Java Mail System: Java Mail Box?

??? 運用面向?qū)ο蟮脑?,將程序分為顯示模塊,邏輯模塊,和各個顯示間的通信。用戶名,密碼,SMTP服務(wù)器等等用戶信息,用Java Bean描述。它和電子商務(wù)的集成,主要是讓用戶方便的調(diào)出這個郵件工具,來配置在其他網(wǎng)站上的電郵,點擊連接即顯示面板。?

??? Java Mail Box當(dāng)中用了18個類,網(wǎng)頁中的APPLET標(biāo)記需要引用包派生自JApplet的CLASS文件:?

????當(dāng)瀏覽器讀到此行時,它會創(chuàng)建到一個連接WEB服務(wù)器來提取CLASS文件,內(nèi)嵌與瀏覽器中的JAVA解釋器的類加載器接著從該文件中加載CLASS文件,加載過程中,類加載器必須解析此類中使用的其他類,這樣,類加載器才會知道它需要加載更多的類才會運行該APPLET,因此,瀏覽器就會創(chuàng)建到該服務(wù)器的另外的連接來提取這些類,通常要耗費幾分鐘的時間。打包成JAR文件,可以使用另一個HTTP請求下載。JAR包括了JAVA MAIL BOX所需要的所有圖形,類,屬性文件,減少了下載的,時間。然后從APPLET調(diào)用?在JSP中指向APPLET,就實現(xiàn)了JAVA MAIL BOX的集成。

Java Mail System: Java Mail Web Service

??? Java Mail Web Service的設(shè)計結(jié)構(gòu),取決于電子商務(wù)如何實現(xiàn)。這里,兩者采用的都是一個經(jīng)典的MVC。即:Java Bean 做邏輯,JSP做顯示層,Servlet做Controller,同樣,還是用BEAN封裝了用戶的信息,由于JSP的容器使用了Apache的Tomcat,這個電郵服務(wù)器可看作一個3層結(jié)構(gòu),如圖:?

圖一:電子郵件服務(wù)器的3層結(jié)構(gòu)?

集成:JNDI方面?

【Naming Service的查詢模型】

圖二:Naming Service 的查詢模型?

??? 可以看到,對于一個Client來說,一個Naming Service 提供了對于一個對象(Object)到名字(Name)的綁定和查詢(Binding and Lookup),以提供對于資源的訪問,就是說,對于一個程序,訪問這個Name就等于訪問了其綁定的Object?

JNDI(Java Naming and Directory interface)是JAVA提供的命名服務(wù)解決方案,它的靈魂是Context接口,并且用 SubContext和InitialContext來輔助。

【Tomcat中的JNDI配置】?

??? Tomcat中,指明JNDI,需要對兩個文件作出修改,并且要確定做到參數(shù)一致:系統(tǒng)服務(wù)器配置文件SERVER.XML和應(yīng)用描述文件WEB.XML,描述如下:?

?????????? JNDI名字?

??????????????????? type="javax.mail.Session"/>??? ——>JNDI所屬類名?

集成:JDBC連接緩沖池方面?

??? 在DATASOURCE中事先建立了多個數(shù)據(jù)庫連接,這些數(shù)據(jù)庫保存到連接池(CONNECT POOL)中,JAVA程序訪問數(shù)據(jù)庫時,只需要從連接池中取出空閑狀態(tài)的數(shù)據(jù)庫連接,當(dāng)程序訪問數(shù)據(jù)庫結(jié)束,再將數(shù)據(jù)庫連接放回到連接池,這樣可以提高訪問數(shù)據(jù)庫的效率,如果WEB 應(yīng)用每一次都接收到用戶的客戶請求,都和數(shù)據(jù)庫建立一個連接,數(shù)據(jù)庫操作結(jié)束就斷開連接,這樣會耗費大量的時間和資源,因為數(shù)據(jù)庫每一次配置鏈接都要將CONNECTION對象加載到內(nèi)存中,再驗證用戶名和密碼。?

??? 例如,當(dāng)一個電子商務(wù)網(wǎng)站的用戶進(jìn)行操作的時候,下訂單,提交(Commit),撤銷(DrawBack)涉及到一個狀態(tài)BEAN的HASHMAP的清空和添加。用戶的在線時間是10多分鐘左右,而實際操作數(shù)據(jù)庫的連接時間,是微秒級的。顯然,必須要用到連接池技術(shù)。 ?

集成:JNDI,JDBC共同放置實現(xiàn)?

DataSource對象是由TOMCAT提供的,因此不能在程序中采用創(chuàng)建一個實例的方式來生成DataSource對象,而需要JNDI,來獲得DataSource的應(yīng)用?

圖三:在JNDI和JDBC的共同放置下,實現(xiàn)了一個用戶和數(shù)據(jù)庫的訪問

【程序中InitialContext()的應(yīng)用】?

Context ctx = new InitialContext();?

if(ctx == null ) ?throw new Exception("No Context");?

Session mailsession =(Session)ctx.lookup("java:comp/env/mail/session");?

結(jié)束語?

??? 采用了JAVA MAIL API后,電子商務(wù)網(wǎng)站的設(shè)計模式,直接影響著Java Mail System 的實現(xiàn)。有時候,需要訪問SQL ,Oracle,Cloudscape不同的數(shù)據(jù)庫,就需要運用DAO和工廠模式來設(shè)計一致接口,同理可以設(shè)想,將一個通用的模式來實現(xiàn)Java Mail System和電子商務(wù)的連接,其意義在于,為其他的模塊連接提供了一個模板。有了這些輔助功能,一個電子商務(wù)功能才更豐富,自身也更有吸引力。?

參考文獻(xiàn):?

1《JAVA2 核心技術(shù)》? 卷Ⅰ原理???????????????? 機械工業(yè)出版社???????? 2002年2月?

2《JAVA2核心技術(shù)》?? 卷Ⅱ高級特性???????????? 機械工業(yè)出版社???????? 2002年4月?

3 《JSP應(yīng)用開發(fā)詳解(第二版)》飛思科技產(chǎn)品研發(fā)中心? 電子工業(yè)出版社?? 2004年3月?

4《JSP應(yīng)用開發(fā)詳解(第二版)》 飛思科技產(chǎn)品研發(fā)中心? 電子工業(yè)出版社?? 2004年3月?

5《J2EE企業(yè)級應(yīng)用開發(fā)》飛思科技產(chǎn)品研發(fā)中心???????? 電子工業(yè)出版社?? 2003年8月?

6《Tomcat與Java Web開發(fā)技術(shù)詳解》飛思科技產(chǎn)品研發(fā)中心 電子工業(yè)出版社2004年4月?

7《Mastering JSP》???????????? Todd Cook???????? SYBEX??????????????? 2003年3月?

8《VC++ SMTP協(xié)議電子郵件傳送剖析》 朗銳?? 01空間??????????????? 2003年9月12日?

9《JavaMail操作的總結(jié)》土人制造編程園地JAVA討論區(qū) the_east_key 2004年4月15日?

10《用JAVA開發(fā)EMAIL工具之接收郵件》馮睿??? UML軟件工程組織?? 2002年12月20日?

11《用JAVA MAIL API編寫可帶附件的郵件程序》?? 邢雅莉?? 賽迪網(wǎng)? 2001年9月11日?

12《Cloudscape和Websphere Application Server:使用核心JDBC API》 Bennett Falt?

? IBM Data Management Group?? http://www.developworks.ibm.com?

13《創(chuàng)建J2EE中的郵件發(fā)送和接收程序》?? 蘇洋??????????? 賽迪網(wǎng)?? 2002年9月4日?

14《JAVA的網(wǎng)絡(luò)編程,用JAVA實現(xiàn)SMTP服務(wù)器》谷和啟?? 賽迪網(wǎng)?? 2003年3月21日 ?

15《JNDI overview, Part 1: An introduction to naming services》?????? java one?

16JNDI Documentation???????????????????????? http://www.java.sun.com/products/doc.html 17JAVA MAIL API Online?

?http://java.sun.com?

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。

相關(guān)內(nèi)容