通過AJAX或多線程發送郵件實現頁面不滯留

來源:互聯網
上載者:User

IT程式員開發必備-各類資源下載清單,史上最全IT資源,個人收藏總結。
由於發送帶有附件的郵件會耗費很多的時間,所以如果單純用訪問Servlet的形式發送郵件的話,那麼會造成用戶端頁面滯留的效果,這樣不是很好,所以我們一般採用Ajax的形式發送頁面,實現頁面無重新整理,或者通過通過建立另一個線程,主線程返回用戶端,讓子線程發送郵件,這樣可以實現頁面提前返回。

  程式碼

  MailByThreadServletServlet.java

package edu.servlet.mail;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class MailByThreadServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {    response.setContentType("text/html;charset=utf-8");             SendMailThread smt = new SendMailThread();             Thread thread = new Thread(smt);             thread.start();             response.getWriter().print("郵件正在發送中,請稍等......");}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {           doGet(request, response);}}
子線程SendMailThread.java

package edu.servlet.mail;import java.io.FileInputStream;import javax.mail.Message;import javax.mail.Session;import javax.mail.Transport;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeMessage;import javax.mail.internet.MimeUtility;import javax.naming.Context;import javax.naming.InitialContext;public class SendMailThread implements Runnable{@Overridepublic void run() {try{           Context initCtx = new InitialContext();           //tomcat將建立的環境容器放在初始化容器中,需要通過"java:comp/env"(固定)尋找           Context envCtx = (Context) initCtx.lookup("java:comp/env");           //在環境參數容器中通過"mail/Dog"尋找到Session對象           Session session = (Session) envCtx.lookup("mail/Dog");                     /*            * 驗證這裡tomcat的類載入器(envCtx.lookup("mail/Dog"))與應用程式的類載入器(Session)的不同            * 但是這裡不知道為什麼是一樣的結果,按說是不一樣的,反正也不是很重要            * 都是 org.apache.catalina.loader.StandardClassLoader            */           System.out.println(envCtx.lookup("mail/Dog").getClass().getClassLoader().getClass().getName());           System.out.println(Session.class.getClassLoader().getClass().getName());           //設定Debug的方式列印執行過程       session.setDebug(true);     //建立代表郵件內容的Message對象。  Message msg = new MimeMessage(session,new FileInputStream("C:\\Documents and Settings\\Administrator\\案頭\\SendMultipartMessageDemo3.eml"));     Transport transport = session.getTransport();  transport.connect("smtp.163.com", 25, "xh216319","xiaoxiao");  transport.sendMessage(msg, InternetAddress.parse(     MimeUtility.encodeText("ITSTAR")+"<itstar1965@sina.com>,"+MimeUtility.encodeText("肖華")+"<xh216319@163.com>"));}catch (Exception e) {           }finally{}}  }
訪問:http://localhost:8080/JavaMail_02/servlet/MailByThreadServlet,則馬上就會返回




聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.