使用JSP開(kāi)發(fā)WebMail系統(tǒng)
更新時(shí)間:2006年10月13日 00:00:00 作者:
電子郵件(E-mail)是Internet上使用最廣泛的服務(wù)之一,傳統(tǒng)的Email應(yīng)用模式基于C/S結(jié)構(gòu),即用戶使用客戶端的郵件收發(fā)工具(如Outlook、Foxmail等)與提供郵件服務(wù)的服務(wù)器(如163.net、263.net、371.net)通信,在使用客戶端郵件工具之前,用戶要進(jìn)行一些必要的設(shè)置,如指定郵件服務(wù)器的主機(jī)地址和通信端口等,這些工作對(duì)剛開(kāi)始上網(wǎng)的用戶會(huì)有一定的困難,如果把E-mail和Web結(jié)合在一起,即通過(guò)Web編程和適當(dāng)?shù)南到y(tǒng)設(shè)置,使用戶僅僅以訪問(wèn)Web的方式就可以得到和使用完整的郵件服務(wù),這樣將極大地方便上網(wǎng)用戶,這種系統(tǒng)稱為WebMail。WebMail是目前Internet上最受歡迎的服務(wù)之一,也是很多網(wǎng)站必備功能之一。另外WebMail同樣也適用于企業(yè)或校園網(wǎng)的應(yīng)用。
通常在后臺(tái)服務(wù)器的搭建和設(shè)置完成后實(shí)現(xiàn)WebMail系統(tǒng),而前臺(tái)的開(kāi)發(fā)工作主要是開(kāi)發(fā)工具與后臺(tái)數(shù)據(jù)庫(kù)和郵件服務(wù)器的交互問(wèn)題。在Linux平臺(tái)上運(yùn)行的各種服務(wù)器軟件穩(wěn)定性和可靠性一直很好,而且選擇跨平臺(tái)的Java開(kāi)發(fā)工具使系統(tǒng)更穩(wěn)定,具有更高的伸縮性。
JSP性能
盡管JSP提供強(qiáng)大的功能是建立在Servlet之上,但JSP的性能和Servlet相差無(wú)幾。JSP首先要編譯成Servlet,這只會(huì)增加少量的代碼,僅需編譯一次且可以預(yù)編譯,這就消除了運(yùn)行時(shí)花費(fèi)不必要的負(fù)擔(dān)。JSP與Servlet性能上的差異僅僅表現(xiàn)在返回的數(shù)據(jù)是二進(jìn)制的。這是因?yàn)镴SP返回時(shí)用的是PrintWriter,而Servlet可以應(yīng)用于速度更快的OutputStream。
JSP自定義的標(biāo)簽庫(kù)可以封裝大量的、復(fù)雜的Java操作在一個(gè)Form里面,這些預(yù)先定義好的標(biāo)簽可以很容易的被那些沒(méi)有Java知識(shí)的人調(diào)用。因此,JSP自定義的標(biāo)簽庫(kù)可以有效地實(shí)現(xiàn)Java程序員和Web設(shè)計(jì)人員工作的劃分。然而,在頁(yè)面上應(yīng)用的每一個(gè)標(biāo)簽,Web容器都必須創(chuàng)建一個(gè)新的標(biāo)簽句柄對(duì)象或從標(biāo)簽緩沖中提取它。因此,過(guò)多的應(yīng)用自定義的標(biāo)簽將會(huì)帶來(lái)不必要的資源浪費(fèi)。
BodyTags是一種特殊的定制標(biāo)簽,可以提取在它之間封裝的內(nèi)容或者替換那些內(nèi)容。BodyTags之間的內(nèi)容一般會(huì)備份在內(nèi)存中。由于BodyTags之間能夠嵌套和重復(fù),因此,在程序中應(yīng)用了多級(jí)的BodyTags會(huì)占用大量寶貴的內(nèi)存和系統(tǒng)資源。
實(shí)現(xiàn)WebMail的主要功能
該系統(tǒng)提供了獲取、閱讀、書寫、轉(zhuǎn)發(fā)、回復(fù)、打印、刪除及用戶管理的功能??紤]到系統(tǒng)的跨平臺(tái)性,采用Java及相關(guān)技術(shù)產(chǎn)品為開(kāi)發(fā)工具,特別是采用JSP作為服務(wù)程序,這樣對(duì)客戶端也沒(méi)有其它要求,同時(shí)系統(tǒng)的性能在高負(fù)荷下得到進(jìn)一步提高。整個(gè)WebMail系統(tǒng)全部采用純Java代碼,服務(wù)器端每響應(yīng)一個(gè)服務(wù)請(qǐng)求啟動(dòng)一個(gè)線程,而不像CGI那樣啟動(dòng)一個(gè)進(jìn)程。這樣能夠節(jié)省系統(tǒng)資源,提高系統(tǒng)性能。
實(shí)現(xiàn)主要代碼
獲取用戶輸入的信息
對(duì)于用戶輸入內(nèi)容獲取功能是通過(guò)getParameter方法來(lái)實(shí)現(xiàn)的,對(duì)于輸入的文本內(nèi)容,通過(guò)如下代碼就能在服務(wù)器端獲取,程序代碼如下:
根據(jù)用戶輸入的信息來(lái)連接服務(wù)器,程序代碼如下:
接收郵件代碼段
根據(jù)獲取用戶輸入的信息來(lái)連接服務(wù)器,代碼為:
獲取服務(wù)器端的信息,代碼如下:
根據(jù)服務(wù)器上信息的不同格式,使用不同的方式來(lái)讀?。?
若其Type為tex/plain就可直接讀出,代碼如下:
如果信息類型為text/html,不同的信息類型處理的方式稍有不同(如下段代碼),由于篇幅有限不再一一說(shuō)明。
發(fā)送郵件代碼段
根據(jù)用戶輸入的內(nèi)容,獲取郵件頭信息代碼如下:
設(shè)置郵件頭信息代碼如下:
設(shè)置郵件內(nèi)容,構(gòu)建程序段如下:
用戶在發(fā)送郵件時(shí)常常帶有附件,就是將瀏覽器客戶端用戶本地的文件傳送到POP客戶端,實(shí)現(xiàn)代碼如下:
在上傳附件的同時(shí),對(duì)上傳文件的數(shù)量進(jìn)行統(tǒng)計(jì),并通過(guò)out.println("上傳了"+count + "個(gè)文件")將其在屏幕上顯示出來(lái)。
在發(fā)送的信件中如果有附件,使用如下代碼進(jìn)行發(fā)送:
調(diào)用Transport的send方法,將構(gòu)造好MIME Message對(duì)象發(fā)送出去,代碼如下:
刪除電子郵件代碼段
在通過(guò)Web界面使用電子郵件過(guò)程中,經(jīng)常要對(duì)接收到垃圾郵件或已查看過(guò)的郵件進(jìn)行刪除,這也是電子郵件中必不可少的一個(gè)功能,所以我們?cè)O(shè)計(jì)了Web界面中刪除電子郵件的相應(yīng)功能,主要程序代碼段如下:
用戶管理
在使用系統(tǒng)運(yùn)行的過(guò)程中,通過(guò)管理界面添加用戶,刪除不必要的用戶,修改用戶的密碼,這是程序運(yùn)行過(guò)程中必要的模塊,代碼如下:
總結(jié)
Java簡(jiǎn)化了企業(yè)解決方案的開(kāi)發(fā)、部署和管理等相關(guān)的復(fù)雜問(wèn)題,它是面向?qū)ο蟮木幊陶Z(yǔ)言,同時(shí)也是具有平臺(tái)獨(dú)立性、高性能的服務(wù)器端編程語(yǔ)言。它提供的標(biāo)準(zhǔn)系統(tǒng)框架和服務(wù)適合團(tuán)體開(kāi)發(fā),可控制性好,與其它資源的集成性好。采用Java為編程工具開(kāi)發(fā)高性能、高可用性的WebMail服務(wù)器具有非常重要的意義。
通常在后臺(tái)服務(wù)器的搭建和設(shè)置完成后實(shí)現(xiàn)WebMail系統(tǒng),而前臺(tái)的開(kāi)發(fā)工作主要是開(kāi)發(fā)工具與后臺(tái)數(shù)據(jù)庫(kù)和郵件服務(wù)器的交互問(wèn)題。在Linux平臺(tái)上運(yùn)行的各種服務(wù)器軟件穩(wěn)定性和可靠性一直很好,而且選擇跨平臺(tái)的Java開(kāi)發(fā)工具使系統(tǒng)更穩(wěn)定,具有更高的伸縮性。
盡管JSP提供強(qiáng)大的功能是建立在Servlet之上,但JSP的性能和Servlet相差無(wú)幾。JSP首先要編譯成Servlet,這只會(huì)增加少量的代碼,僅需編譯一次且可以預(yù)編譯,這就消除了運(yùn)行時(shí)花費(fèi)不必要的負(fù)擔(dān)。JSP與Servlet性能上的差異僅僅表現(xiàn)在返回的數(shù)據(jù)是二進(jìn)制的。這是因?yàn)镴SP返回時(shí)用的是PrintWriter,而Servlet可以應(yīng)用于速度更快的OutputStream。
JSP自定義的標(biāo)簽庫(kù)可以封裝大量的、復(fù)雜的Java操作在一個(gè)Form里面,這些預(yù)先定義好的標(biāo)簽可以很容易的被那些沒(méi)有Java知識(shí)的人調(diào)用。因此,JSP自定義的標(biāo)簽庫(kù)可以有效地實(shí)現(xiàn)Java程序員和Web設(shè)計(jì)人員工作的劃分。然而,在頁(yè)面上應(yīng)用的每一個(gè)標(biāo)簽,Web容器都必須創(chuàng)建一個(gè)新的標(biāo)簽句柄對(duì)象或從標(biāo)簽緩沖中提取它。因此,過(guò)多的應(yīng)用自定義的標(biāo)簽將會(huì)帶來(lái)不必要的資源浪費(fèi)。
BodyTags是一種特殊的定制標(biāo)簽,可以提取在它之間封裝的內(nèi)容或者替換那些內(nèi)容。BodyTags之間的內(nèi)容一般會(huì)備份在內(nèi)存中。由于BodyTags之間能夠嵌套和重復(fù),因此,在程序中應(yīng)用了多級(jí)的BodyTags會(huì)占用大量寶貴的內(nèi)存和系統(tǒng)資源。
該系統(tǒng)提供了獲取、閱讀、書寫、轉(zhuǎn)發(fā)、回復(fù)、打印、刪除及用戶管理的功能??紤]到系統(tǒng)的跨平臺(tái)性,采用Java及相關(guān)技術(shù)產(chǎn)品為開(kāi)發(fā)工具,特別是采用JSP作為服務(wù)程序,這樣對(duì)客戶端也沒(méi)有其它要求,同時(shí)系統(tǒng)的性能在高負(fù)荷下得到進(jìn)一步提高。整個(gè)WebMail系統(tǒng)全部采用純Java代碼,服務(wù)器端每響應(yīng)一個(gè)服務(wù)請(qǐng)求啟動(dòng)一個(gè)線程,而不像CGI那樣啟動(dòng)一個(gè)進(jìn)程。這樣能夠節(jié)省系統(tǒng)資源,提高系統(tǒng)性能。
獲取用戶輸入的信息
對(duì)于用戶輸入內(nèi)容獲取功能是通過(guò)getParameter方法來(lái)實(shí)現(xiàn)的,對(duì)于輸入的文本內(nèi)容,通過(guò)如下代碼就能在服務(wù)器端獲取,程序代碼如下:
|
根據(jù)用戶輸入的信息來(lái)連接服務(wù)器,程序代碼如下:
|
接收郵件代碼段
根據(jù)獲取用戶輸入的信息來(lái)連接服務(wù)器,代碼為:
|
獲取服務(wù)器端的信息,代碼如下:
|
根據(jù)服務(wù)器上信息的不同格式,使用不同的方式來(lái)讀?。?
|
若其Type為tex/plain就可直接讀出,代碼如下:
|
如果信息類型為text/html,不同的信息類型處理的方式稍有不同(如下段代碼),由于篇幅有限不再一一說(shuō)明。
|
發(fā)送郵件代碼段
根據(jù)用戶輸入的內(nèi)容,獲取郵件頭信息代碼如下:
|
設(shè)置郵件頭信息代碼如下:
|
設(shè)置郵件內(nèi)容,構(gòu)建程序段如下:
|
用戶在發(fā)送郵件時(shí)常常帶有附件,就是將瀏覽器客戶端用戶本地的文件傳送到POP客戶端,實(shí)現(xiàn)代碼如下:
|
在上傳附件的同時(shí),對(duì)上傳文件的數(shù)量進(jìn)行統(tǒng)計(jì),并通過(guò)out.println("上傳了"+count + "個(gè)文件")將其在屏幕上顯示出來(lái)。
在發(fā)送的信件中如果有附件,使用如下代碼進(jìn)行發(fā)送:
|
調(diào)用Transport的send方法,將構(gòu)造好MIME Message對(duì)象發(fā)送出去,代碼如下:
|
刪除電子郵件代碼段
在通過(guò)Web界面使用電子郵件過(guò)程中,經(jīng)常要對(duì)接收到垃圾郵件或已查看過(guò)的郵件進(jìn)行刪除,這也是電子郵件中必不可少的一個(gè)功能,所以我們?cè)O(shè)計(jì)了Web界面中刪除電子郵件的相應(yīng)功能,主要程序代碼段如下:
|
用戶管理
在使用系統(tǒng)運(yùn)行的過(guò)程中,通過(guò)管理界面添加用戶,刪除不必要的用戶,修改用戶的密碼,這是程序運(yùn)行過(guò)程中必要的模塊,代碼如下:
|
Java簡(jiǎn)化了企業(yè)解決方案的開(kāi)發(fā)、部署和管理等相關(guān)的復(fù)雜問(wèn)題,它是面向?qū)ο蟮木幊陶Z(yǔ)言,同時(shí)也是具有平臺(tái)獨(dú)立性、高性能的服務(wù)器端編程語(yǔ)言。它提供的標(biāo)準(zhǔn)系統(tǒng)框架和服務(wù)適合團(tuán)體開(kāi)發(fā),可控制性好,與其它資源的集成性好。采用Java為編程工具開(kāi)發(fā)高性能、高可用性的WebMail服務(wù)器具有非常重要的意義。
相關(guān)文章
WIN2000+PHP+MYSQL+TOMCAT+JSP完全整合安裝手冊(cè)
WIN2000+PHP+MYSQL+TOMCAT+JSP完全整合安裝手冊(cè)...2006-10-10jsp 判斷l(xiāng)ist是否包含string的實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇jsp 判斷l(xiāng)ist是否包含string的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-10-10jsp有兩個(gè)按鈕來(lái)控制Timer的開(kāi)始和結(jié)束方法
下面小編就為大家?guī)?lái)一篇jsp有兩個(gè)按鈕來(lái)控制Timer的開(kāi)始和結(jié)束方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03使用JSP實(shí)現(xiàn)簡(jiǎn)單的用戶登錄注冊(cè)頁(yè)面示例代碼解析
這篇文章主要介紹了使用JSP實(shí)現(xiàn)簡(jiǎn)單的用戶登錄注冊(cè)頁(yè)面示例代碼解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08JSP靜態(tài)導(dǎo)入與動(dòng)態(tài)導(dǎo)入使用詳解
這篇文章主要介紹了JSP靜態(tài)導(dǎo)入與動(dòng)態(tài)導(dǎo)入使用詳解,文章通過(guò)include指令的使用格式,詳細(xì)介紹了靜態(tài)與動(dòng)態(tài)注入的使用方法,對(duì)大家的學(xué)習(xí)或經(jīng)驗(yàn)積累有一定的參考價(jià)值,需要的朋友可以參考下2020-08-08JBuilder2005開(kāi)發(fā)Web應(yīng)用程序
JBuilder2005開(kāi)發(fā)Web應(yīng)用程序...2006-10-10