1 / 36

第 12 章 JSP的檔案與電子郵件處理

第 12 章 JSP的檔案與電子郵件處理. 12-1 伺服端的檔案處理 12-2 伺服端檔案的讀取與寫入 12-3 客戶端的檔案上傳 12-4 JavaMail 寄送電子郵件. 12-1 伺服端的檔案處理. 12-1-1 建立檔案 12-1-2 顯示檔案資訊 12-1-3 更改檔名與檔案刪除 12-1-4 顯示檔案和資料夾清單. 12-1 伺服端的檔案處理.

orla-greene
Download Presentation

第 12 章 JSP的檔案與電子郵件處理

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第12章 JSP的檔案與電子郵件處理 • 12-1 伺服端的檔案處理 • 12-2 伺服端檔案的讀取與寫入 • 12-3 客戶端的檔案上傳 • 12-4 JavaMail寄送電子郵件

  2. 12-1 伺服端的檔案處理 • 12-1-1 建立檔案 • 12-1-2 顯示檔案資訊 • 12-1-3 更改檔名與檔案刪除 • 12-1-4 顯示檔案和資料夾清單

  3. 12-1 伺服端的檔案處理 • 伺服端的檔案處理是處理位在Web應用程式所在電腦的檔案,而不是客戶端瀏覽程式所在電腦的檔案。在JSP程式是使用Java I/O套件的File類別在伺服端建立檔案、顯示指定的檔案資訊、更改檔案名稱、刪除檔案或取得指定資料夾的檔案和子資料夾清單。 • 換句話說,在本節的JSP程式之前需要使用page指引的import屬性匯入java.io.*套件,如下所示: <%@ page contentType="text/html; charset=MS950" import="java.io.*"%>

  4. 12-1-1 建立檔案 • JSP程式建立伺服端的檔案是使用File類別方法,首先需要使用建構子建立File物件,如下所示: File file = new File(path + "Ch12_1_1.txt"); • 上述File物件的建構子參數是檔案的絕對路徑,我們可以使用application物件的getRealPath()方法來取得,如下所示: String path = application.getRealPath("/"); • 上述程式碼可以取得Web應用程式根目錄的實際路徑。在建立好File物件後,就可以使用createNewFile()方法建立新檔案,如下所示: file.createNewFile();

  5. 12-1-2 顯示檔案資訊 • File物件提供相關方法可以取得檔案或資料夾的相關資訊,如下表所示:

  6. 12-1-3 更改檔名與檔案刪除 • File物件提供相關方法可以更改檔案或資料夾名稱,和刪除檔案,如下表所示:

  7. 12-1-4 顯示檔案和資料夾清單 • 在JSP程式只需建立File物件,就可以進一步使用list()方法取得檔案和資料夾清單,例如:取得File物件file的所有檔案和子資料夾,如下所示: filenames = file.list(); • 上述filenames是String字串陣列,每一個陣列元素就是此路徑取得的一個檔案或資料夾名稱。

  8. 12-2 伺服端檔案的讀取與寫入 • 12-2-1 寫入文字檔案 • 12-2-2 讀取文字檔案 • 12-2-3 檔案複製 • 12-2-4 二進位檔案的讀寫

  9. 12-2 伺服端檔案的讀取與寫入 • JSP程式可以使用Java I/O套件的FileWriter和FileReader類別執行文字檔案的讀寫,這是一種檔案串流(Stream),串流如同水管的水流,當程式開啟一個來源的輸入串流(例如:檔案、記憶體和緩衝區等),JSP程式可以從輸入串流依序讀取資料。 • 程式輸出資料是開啟一個目的(同樣可以是檔案、記憶體和緩衝區等)的輸出串流,然後將資料寫入串流。例如:檔案複製程式開啟來源檔案的輸入串流和目的檔案的輸出串流,接著從來源串流讀取資料後,馬上寫入輸出串流的目的檔案,就可以完成檔案複製。

  10. 12-2-1 寫入文字檔案 • 在JSP程式可以使用FileWriter物件開啟檔案串流來寫入資料,如下所示: FileWriter output = new FileWriter(path); • 上述程式碼的參數path是檔案路徑字串。第2個參數是檔案寫入方式,如下所示: FileWriter output = new FileWriter(path, true); • 上述參數值true表示新增檔案資料,也就是將資料寫入檔尾。在開啟output檔案串流後,就可以使用write()方法將字串寫入檔案,當使用write()方法完成資料寫入後,別忘了!使用close()方法關閉檔案串流,如下所示: output.close();

  11. 12-2-2 讀取文字檔案 • 在JSP程式可以使用FileReader物件開啟檔案串流讀取檔案內容,檔案使用BufferedReader緩衝器串流加速資料處理且使用readLine()方法一行一行的讀取資料,如下所示: BufferedReader input = new BufferedReader(new FileReader(file)); • 在開啟檔案輸入串流後,就可以使用while迴圈配合readLine()方法讀取檔案內容,如下所示: while ( (str = input.readLine()) != null ) { …… }

  12. 12-2-3 檔案複製 • 在JSP程式使用FileReader和FileWriter串流分別開啟來源和目的檔案串流,就可以使用while迴圈複製檔案內容,如下所示: while ( (ch = input.read()) != -1 ) output.write(ch); • 上述程式碼使用read()方法讀取一個整數,如果傳回-1,表示讀到檔尾,然後使用write()方法馬上將整數寫入目的檔案,等到迴圈結束,就完成檔案複製。

  13. 12-2-4 二進位檔案的讀寫 • 對於是二進位檔案,JSP程式是使用InputStream/OutputStream類別的位元組串流來處理檔案讀取和寫入,InputStream/OutputStream類別提供對應Reader/Writer類別的方法,可以讀取和寫入位元組或位元組陣列,如下表所示:

  14. 12-3 客戶端的檔案上傳 • 12-3-1 HTML的檔案欄位標籤 • 12-3-2 使用Java I/O類別上傳檔案 • 12-3-3 使用JSP檔案上傳套件上傳檔案

  15. 12-3-1 HTML的檔案欄位標籤 • HTML檔案欄位可以在瀏覽程式檢視或選擇客戶端的檔案清單,選擇的檔案是儲存在客戶端電腦,然後將選擇檔案以HTTP POST方法上傳到Web伺服器,其基本語法如下所示: <input type="FILE" name="field_name"> • 檔案欄位的主要目的是上傳檔案,所以表單<form>標籤需要設定enctype屬性,如下所示: <form action="filename.jsp" method="post" enctype="multipart/form-data"> • 表單的處理程式為JSP程式,使用post方法送出,encytype屬性為上傳檔案資料的編碼方式。

  16. 12-3-2 使用Java I/O類別上傳檔案-開啟串流 • 在建立上傳檔案的HTML表單後,表單處理的JSP程式可以使用Java I/O類別將上傳檔案資料寫成伺服端的檔案。首先取得輸入串流,如下所示: ServletInputStream in = request.getInputStream(); • 程式碼使用request物件的getInputStream()方法取得ServletInputStream的輸入串流,這就是客戶端上傳檔案的送出的檔案串流。 • 接著可以在伺服端開啟檔案輸出串流,如下: PrintWriter pw = new PrintWriter( new BufferedWriter(new FileWriter(name)));

  17. 12-3-2 使用Java I/O類別上傳檔案-上傳檔案 • 最後使用while迴圈建立伺服端檔案,如下所示: while ((ch = in.read()) != -1) pw.print((char) ch); • 上述while迴圈使用read()方法從ServletInputStream讀入資料後,馬上將它使用print()方法寫入PrintWriter串流的伺服端檔案。

  18. 12-3-3 使用JSP檔案上傳套件上傳檔案-下載與安裝O’Reilly上傳套件 • O’Reilly上傳套件是由Jason Hunter開發的Java套件,可以免費下載使用在非商業用途的Web應用程式,免費下載網址如下所示: http://www.servlets.com/cos/ • 上述網址可下載最新版的上傳套件,下載檔案是ZIP格式壓縮檔,在書附光碟的版本是2002年11月版,檔案名稱為cos-05Nov2002.zip。 • O’Reilly上傳套件的安裝十分簡單,只需將檔案解壓縮到Web應用程式的「WEB-INF」資料夾即可,這是一些安裝在classes資料夾下,屬於com.oreilly.servlet.*套件的Java類別檔。

  19. 12-3-3 使用JSP檔案上傳套件上傳檔案-建立MultipartRequest物件 使用O’Reilly上傳套件同時上傳多個檔案 • JSP程式可以使用page指引元素匯入套件的MultipartRequest類別,如下所示: <%@ page import="com.oreilly.servlet.MultipartRequest“ %> • 接下來可以建立MultipartRequest物件取得上傳檔案和檔案的相關資訊,如下所示: MultipartRequest mreq = new MultipartRequest( request,path,maxSize,"MS950");

  20. 12-3-3 使用JSP檔案上傳套件上傳檔案-MultipartRequest物件方法

  21. 12-3-3 使用JSP檔案上傳套件上傳檔案-處理多個上傳檔案 • 在HTML表單上傳的檔案可能不只一個,JSP程式可以使用getFileNames()方法取得所有HTML檔案標籤name屬性值的Enumeration物件,然後配合while迴圈取出所有上傳檔案的相關資訊,如下所示: Enumeration files = mreq.getFileNames(); while ( files.hasMoreElements() ) { String name = (String)files.nextElement(); …………. }

  22. 12-4 JavaMail寄送電子郵件 • 12-4-1 JavaMail API • 12-4-2 使用JavaMail寄送電子郵件 • 12-4-3 電子郵件的附檔處理

  23. 12-4-1 JavaMail API-JavaMail的基礎 • JavaMail是昇陽API套件,其相關類別可以輕鬆建立電子郵件系統,內建支援郵件通訊協定POP3、SMTP和IMAP4。簡單的說,JavaMail API套件的相關類別是在模擬一套郵件工具,其主要類別,如下所示: • javax.mail.Session類別。 • javax.mail.Message類別。 • javax.mail.Transport類別。 • javax.mail.Folder類別。 • javax.mail.Store類別。 • 在本節主要說明電子郵件的寄送,所以只會使用Session、Message和Transport三個類別。

  24. 12-4-1 JavaMail API-下載 • 在昇陽網站可以免費下載JavaMail API,本書使用的版本是1.3.2,其下載網址,如下所示: http://java.sun.com/products/javamail/downloads/index.html • 在上述網址可以下載ZIP格式的壓縮檔:javamail-1_3_2.zip。JavaMail API需要配合JavaBeans Activation Framework(JAF)處理附檔,所以我們還需要下載JAF,本書使用的版本是1.0.2,其下載網址,如下所示: http://java.sun.com/products/javabeans/glasgow/jaf.html • 上述網址可以下載ZIP格式的壓縮檔:jaf-1_0_2-upd.zip。

  25. 12-4-1 JavaMail API-安裝 • 安裝JavaMail API的第一步是使用解壓縮工具從壓縮檔取出2個JAR檔案,如下所示: • mail.jar檔案:從JavaMail API下載檔案javamail-1_3_2.zip取出mail.jar檔案。 • activation.jar檔案:從JAF下載檔案jaf-1_0_2-upd.zip取出activation.jar檔案。 • 第二步在Resin的JSP容器安裝JavaMail,就是將mail.jar和activation.jar兩個檔案複製到Resin安裝目錄的「C:\resin-3.0.9\lib」資料夾。

  26. 12-4-2 使用JavaMail寄送電子郵件-匯入套件與伺服器設定 • 在JSP程式使用JavaMail API需要匯入一些套件,如下所示: <%@ page import="java.util.*, java.io.*"%> <%@ page import="javax.mail.*"%> <%@ page import="javax.mail.internet.*"%> • 在匯入上述套件後,JSP程式需要先設定系統使用的郵件伺服器和通訊協定,如下所示: Properties props = new Properties(); props.put("mail.host", "ms2.hinet.net"); props.put("mail.transport.protocol", "smtp");

  27. 12-4-2 使用JavaMail寄送電子郵件-取得Session物件 • 在建立MimeMessage的電子郵件前,JSP程式需要先取得Session物件,如下所示: Session s = Session.getInstance(props, null); • 上述程式碼使用getInstance()方法取得Session物件,參數是前述Properties物件。

  28. 12-4-2 使用JavaMail寄送電子郵件- 建立MimeMessage物件 • 在取得Session物件後,就可以建立MimeMessage物件,即一封電子郵件,如下所示: MimeMessage msg = new MimeMessage(s); • 上述程式碼使用Session物件的建構子參數建立MimeMessage物件,然後使用MimeMessage物件的方法指定郵件內容。

  29. 12-4-2 使用JavaMail寄送電子郵件- MimeMessage物件方法

  30. 12-4-2 使用JavaMail寄送電子郵件- Transport物件 • Transport物件使用類別方法send()來寄送電子郵件,如下所示: Transport.send(msg); • 上述程式參數是MimeMessage物件,可以將參數的電子郵件寄送出去。

  31. 12-4-3 電子郵件的附檔處理-說明 • 對於HTML格式或附檔郵件來說,在MIME郵件內容需要分成多個區段,多區段MIME郵件內容是一個MimeMultipart物件,每一個區段是一個MimeBodyPart物件,如下所示: • 一般郵件區段:MIME郵件的文字內容部分,這是MimeBodyPart物件,可以指定郵件內容是一般文字或HTML文件。 • 附檔區段:MIME郵件的附檔部分也是MimeBodyPart物件,我們需要使用JAF的DataHandler類別來處理附檔。

  32. 12-4-3 電子郵件的附檔處理-建立MimeMultipart物件 • 寄送MimeMessage物件的郵件擁有多區段MIME郵件內容,需要建立MimeMultipart物件儲存郵件內容,如下所示: MimeMultipart mm = new MimeMultipart(); • 上述程式碼在建立好MimeMultipart物件後,就可以分別建立各區段的MimeBodyPart物件,然後使用addBodyPart()方法新增MimeBodyPart物件的郵件區段。

  33. 12-4-3 電子郵件的附檔處理-HTML格式郵件 • 對於多區段的MIME郵件來說,文字內容部分是一個MimeBodyPart物件,如下所示: MimeBodyPart mbp1 = new MimeBodyPart(); mbp1.setContent(text, type); • setContent()方法可以指定郵件內容,第2個參數是字串內容的MIME型態,值"text/html;charset=Big5"為HTML格式,值"text/plain;charset=Big5"是一般文字內容。 • 接著將區段新增到MimeMultipart物件的多區段郵件內容,如下所示: mm.addBodyPart(mbp1);

  34. 12-4-3 電子郵件的附檔處理-附檔處理1 • 在電子郵件如果擁有附檔,檔案需要先上傳到伺服器,才能將附檔內容新增到電子郵件中,JSP程式可以使用MultipartRequest物件上傳檔案後,然後使用getParameter()方法取得郵件內容,對於附檔來說是取得附檔名稱,如下所示: String filename = mreq.getFilesystemName("file"); • 上述程式碼取得附檔檔名後,就可以建立附檔的MimeBodyPart物件的區段,如下所示: MimeBodyPart mbp2 = new MimeBodyPart();

  35. 12-4-3 電子郵件的附檔處理-附檔處理2 • 在建立MimeBodyPart物件後,需要使用FileDataSource物件取得附檔的資料來源,如下所示: FileDataSource fds = new FileDataSource(path+filename); mbp2.setDataHandler( new DataHandler(fds)); mbp2.setFileName(fds.getName()); • 在建立好區段的內容後,就可以將區段新增到MimeMultipart物件的多區段郵件內容,如下所示: mm.addBodyPart(mbp2);

  36. 12-4-3 電子郵件的附檔處理-指定MimeMessage物件的郵件內容 • 現在的MimeMultipart物件一共擁有mbp1和mbp2兩個區段,最後,可以指定MimeMessage物件的郵件內容,如下所示: msg.setContent(mm); • 上述程式碼使用MimeMessage物件的setContent()方法指定參數MimeMultipart物件的郵件內容。

More Related