使用JSP開發(fā)WebMail系統(tǒng)_JSP教程
教程Tag:暫無Tag,歡迎添加,賺取U幣!
推薦:提升JSP應(yīng)用程序七大絕招你時(shí)常被客戶抱怨JSP頁面響應(yīng)速度很慢嗎?你想過當(dāng)客戶訪問次數(shù)劇增時(shí),你的WEB應(yīng)用能承受日益增加的訪問量嗎?本文講述了調(diào)整JSP和servlet的一些非常實(shí)用的方法,它可使你的servlet和JSP頁
電子郵件(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ī)地址和通信端口等,這些工作對剛開始上網(wǎng)的用戶會(huì)有一定的困難,如果把E-mail和Web結(jié)合在一起,即通過Web編程和適當(dāng)?shù)南到y(tǒng)設(shè)置,使用戶僅僅以訪問Web的方式就可以得到和使用完整的郵件服務(wù),這樣將極大地方便上網(wǎng)用戶,這種系統(tǒng)稱為WebMail。WebMail是目前Internet上最受歡迎的服務(wù)之一,也是很多網(wǎng)站必備功能之一。另外WebMail同樣也適用于企業(yè)或校園網(wǎng)的應(yīng)用。 通常在后臺服務(wù)器的搭建和設(shè)置完成后實(shí)現(xiàn)WebMail系統(tǒng),而前臺的開發(fā)工作主要是開發(fā)工具與后臺數(shù)據(jù)庫和郵件服務(wù)器的交互問題。在Linux平臺上運(yùn)行的各種服務(wù)器軟件穩(wěn)定性和可靠性一直很好,而且選擇跨平臺的Java開發(fā)工具使系統(tǒng)更穩(wěn)定,具有更高的伸縮性。 JSP性能 盡管JSP提供強(qiáng)大的功能是建立在Servlet之上,但JSP的性能和Servlet相差無幾。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)簽庫可以封裝大量的、復(fù)雜的Java操作在一個(gè)Form里面,這些預(yù)先定義好的標(biāo)簽可以很容易的被那些沒有Java知識的人調(diào)用。因此,JSP自定義的標(biāo)簽庫可以有效地實(shí)現(xiàn)Java程序員和Web設(shè)計(jì)人員工作的劃分。然而,在頁面上應(yīng)用的每一個(gè)標(biāo)簽,Web容器都必須創(chuàng)建一個(gè)新的標(biāo)簽句柄對象或從標(biāo)簽緩沖中提取它。因此,過多的應(yīng)用自定義的標(biāo)簽將會(huì)帶來不必要的資源浪費(fèi)。 BodyTags是一種特殊的定制標(biāo)簽,可以提取在它之間封裝的內(nèi)容或者替換那些內(nèi)容。BodyTags之間的內(nèi)容一般會(huì)備份在內(nèi)存中。由于BodyTags之間能夠嵌套和重復(fù),因此,在程序中應(yīng)用了多級的BodyTags會(huì)占用大量寶貴的內(nèi)存和系統(tǒng)資源。 實(shí)現(xiàn)WebMail的主要功能 該系統(tǒng)提供了獲取、閱讀、書寫、轉(zhuǎn)發(fā)、回復(fù)、打印、刪除及用戶管理的功能?紤]到系統(tǒng)的跨平臺性,采用Java及相關(guān)技術(shù)產(chǎn)品為開發(fā)工具,特別是采用JSP作為服務(wù)程序,這樣對客戶端也沒有其它要求,同時(shí)系統(tǒng)的性能在高負(fù)荷下得到進(jìn)一步提高。整個(gè)WebMail系統(tǒng)全部采用純Java代碼,服務(wù)器端每響應(yīng)一個(gè)服務(wù)請求啟動(dòng)一個(gè)線程,而不像CGI那樣啟動(dòng)一個(gè)進(jìn)程。這樣能夠節(jié)省系統(tǒng)資源,提高系統(tǒng)性能。 實(shí)現(xiàn)主要代碼: 獲取用戶輸入的信息 對于用戶輸入內(nèi)容獲取功能是通過getParameter方法來實(shí)現(xiàn)的,對于輸入的文本內(nèi)容,通過如下代碼就能在服務(wù)器端獲取,程序代碼如下: String username=request.getParameter("login"); String password=request.getParameter("password"); Session session2=Session.getInstance(System.getProperties() ,null); Store store=session2.getStore("pop3"); 根據(jù)用戶輸入的信息來連接服務(wù)器,程序代碼如下: try{ store.connect(host,username "%nyist.net", password); } catch(javax.mail.AuthenticationFailedException e) {content="用戶名與密碼不匹配";} 接收郵件代碼段 根據(jù)獲取用戶輸入的信息來連接服務(wù)器,代碼為: store.connect("nyist.net",-1,request.getParameter("username") "%nyist.net",request .getParameter("password")); 獲取服務(wù)器端的信息,代碼如下: Folder folder = store.getFolder("INBOX"); Folder.open (Folder.READ_WRITE); Message message[]=folder.getMessages(); FetchProfile fp=new FetchProfile(); fp.add(FetchProfile.Item.ENVELOPE); fp.add(FetchProfile.Item.FLAGS); fp.add("X-Mailer"); folder.fetch(message,fp); 根據(jù)服務(wù)器上信息的不同格式,使用不同的方式來讀。 String contentbody=""; Object o=message[j].getContent(); 若其Type為tex/plain就可直接讀出,代碼如下: if (message[j].isMimeType("text/plain")) { contentbody=(String) " | ";
發(fā)送郵件代碼段 根據(jù)用戶輸入的內(nèi)容,獲取郵件頭信息代碼如下: String host = "nyist.net"; String from = request.getParameter("from"); String to = request.getParameter("to"); String subject = request.getParameter("subject"); String content = request.getParameter("content"); Properties props = System.getProperties(); //設(shè)置郵件服務(wù) props.put("mail.smtp.host", host); Session session2 =Session.getInstance(props, null); 設(shè)置郵件頭信息代碼如下: MimeMessage message =new MimeMessage(session2); message.setFrom(new InternetAddress(from)); message.addRecipient(Message.RecipientType.TO,new InternetAddress(to)); message.setSubject(subject); message.setSentDate(new Date()); // create the message part MimeBodyPart messageBodyPart =new MimeBodyPart(); 設(shè)置郵件內(nèi)容,構(gòu)建程序段如下: messageBodyPart.setText(content); Multipart multipart = new MimeMultipart(); multipart.addBodyPart(messageBodyPart); 用戶在發(fā)送郵件時(shí)常常帶有附件,就是將瀏覽器客戶端用戶本地的文件傳送到POP客戶端,實(shí)現(xiàn)代碼如下: for (int i=0;i com.jspsmart.upload.File myFile = mySmartUpload.getFiles().getFile(i); if (!myFile.isMissing()) { myFile.saveAs("/upload/" myFile.getFileName()); count ; } 在上傳附件的同時(shí),對上傳文件的數(shù)量進(jìn)行統(tǒng)計(jì),并通過out.println("上傳了" count "個(gè)文件")將其在屏幕上顯示出來。 在發(fā)送的信件中如果有附件,使用如下代碼進(jìn)行發(fā)送: for(int i=0;request.getParameter("file" i)!=null;i ) { messageBodyPart = new MimeBodyPart(); File file=new File("/home/mengyu/ROOT/upload/",request.getParameter("file" i)); DataSource source =new FileDataSource(file); messageBodyPart.setDataHandler(new DataHandler(source)); messageBodyPart.setFileName(request.getParameter("file" i)); multipart.addBodyPart(messageBodyPart); } // Put parts in message message.setContent(multipart); 調(diào)用Transport的send方法,將構(gòu)造好MIME Message對象發(fā)送出去,代碼如下: Transport.send(message); 刪除電子郵件代碼段 在通過Web界面使用電子郵件過程中,經(jīng)常要對接收到垃圾郵件或已查看過的郵件進(jìn)行刪除,這也是電子郵件中必不可少的一個(gè)功能,所以我們設(shè)計(jì)了Web界面中刪除電子郵件的相應(yīng)功能,主要程序代碼段如下: Folder folder=store.getFolder("INBOX"); folder.open(Folder.READ_WRITE); Message message[]=folder.getMessages(); String msg[]=request.getParameterValues("msg"); for(int i=0,n=msg.length;i folder.close(true); 用戶管理 在使用系統(tǒng)運(yùn)行的過程中,通過管理界面添加用戶,刪除不必要的用戶,修改用戶的密碼,這是程序運(yùn)行過程中必要的模塊,代碼如下: //添加用戶 Runtime.getRuntime().exec("/home/vpopmail/bin/vadduser" request.getParameter("username") "@nyist.net " request.getParameter("passwd")); //刪除用戶 Runtime.getRuntime().exec("/home/vpopmail/bin/vdeluser" request.getParameter("username") "@nyist.net"); //修改用戶密碼 Runtime.getRuntime().exec("/home/vpopmail/bin/vpasswd" request.getParameter("username") "@nyist.net " request.getParameter("passwd")); 總結(jié) Java簡化了企業(yè)解決方案的開發(fā)、部署和管理等相關(guān)的復(fù)雜問題,它是面向?qū)ο蟮木幊陶Z言,同時(shí)也是具有平臺獨(dú)立性、高性能的服務(wù)器端編程語言。它提供的標(biāo)準(zhǔn)系統(tǒng)框架和服務(wù)適合團(tuán)體開發(fā),可控制性好,與其它資源的集成性好。采用Java為編程工具開發(fā)高性能、高可用性的WebMail服務(wù)器具有非常重要的意義。 |
分享:在J2ME網(wǎng)絡(luò)編程中使用CMWAP代理在中國移動(dòng)提供的網(wǎng)絡(luò)連接中,分為CMNET和CMWAP兩種,其中CMNET可以無限制的訪問互聯(lián)網(wǎng)絡(luò),資費(fèi)比較貴。CMWAP類似一個(gè)HTTP的代碼,只能訪問支持HTTP的應(yīng)用,但是資費(fèi)便宜,穩(wěn)定性比較
相關(guān)JSP教程:
- jsp response.sendRedirect不跳轉(zhuǎn)的原因分析及解決
- JSP指令元素(page指令/include指令/taglib指令)復(fù)習(xí)整理
- JSP腳本元素和注釋復(fù)習(xí)總結(jié)示例
- JSP FusionCharts Free顯示圖表 具體實(shí)現(xiàn)
- 網(wǎng)頁模板:關(guān)于jsp頁面使用jstl的異常分析
- JSP頁面中文傳遞參數(shù)使用escape編碼
- 基于jsp:included的使用與jsp:param亂碼的解決方法
- Java Web項(xiàng)目中連接Access數(shù)據(jù)庫的配置方法
- JDBC連接Access數(shù)據(jù)庫的幾種方式介紹
- 網(wǎng)站圖片路徑的問題:絕對路徑/虛擬路徑
- (jsp/html)網(wǎng)頁上嵌入播放器(常用播放器代碼整理)
- jsp下顯示中文文件名及絕對路徑下的圖片解決方法
- 相關(guān)鏈接:
- 教程說明:
JSP教程-使用JSP開發(fā)WebMail系統(tǒng)。