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

Slides:



Advertisements
Similar presentations
第 4 章 配合 例子源代码一起使用 Power point 制作:耿祥义 张跃平 普通高等教育 “ 十一五 ” 国家级规划教材 JSP 内置对象.
Advertisements

第 4 章 JSP 内置对象 本章主要内容:  内置对象的概念  内置对象的作用域和生命期  内置对象的作用和关系  内置对象的使用方法.
第二章 JSP 编译指令. 课程目标  JSP 编译指令  JSP 页面的表达式  JSP 页面的注释  JSP 页面的声明  Scriptlets.
Java Web 开发 授课人:张鸽. 第三讲 JSP 内置对象  JSP 有以下九种内置对象,包括:  ·request ,请求对象  ·response ,响应对象  ·pageContext ,页面上下文对象  ·session ,会话对象  ·application ,应用程序对象.
基于 JSP 搭建 Web 应用程序. 第五章 Web 应用程序优 化 回顾 什么是会话跟踪技术 ? cookie 和 session 的区别是什么 ? 对象的四种作用域范围分别是什么?
第 4 课 使用 JSP 处理客户端请求.  掌握 Form 表单的请求处理  掌握 JSP 常用内置对象的用法 out 对象 request 对象 response 对象 本章目标.
LOGO 第 9 章 Java Servlet 和 JSP 编程 孙焘. 重点: servlet 编程原理 1 servlet 的基础类与编程实现 2 JSP 编程原理 3 JSP 的常用语法 4.
第 7 章 配合 例子源代码一起使用 Power point 制作:耿祥义 张跃平 普通高等教育 “ 十一五 ” 国家级规划教材 JSP 与 JavaBean.
Presentation by: Emil 用Java语言实现简单邮件系统 实训作品原理及功能说明.
动态Web开发技术--JSP.
第 4 章 PHP 基本語法.
檔案處理.
第五章 JSP内置对象 第4章学习了页面组成元素和使用方法。本章学习JSP内置对象的使用。使用JSP内置对象,可以方便操作页面,访问页面环境,实现页面内、页面间、页面与环境之间的通讯。 学习目标 熟悉主要内置对象的概念 理解主要内置对象的作用域和生命期 理解主要内置对象的作用和关系 熟悉主要内置对象的使用方法.
7.5 其他对象 JSP 视频教学课程.
基于JSP搭建Web应用程序.
上节课我们是讲解了request, response, session, application 等内置对象,有了它们,我们就可以编写一个完整的应用程序了。 我们来看ebank这个小应用程序的编写。
第 7 章 文 件.
SAE Java 实际应用 在这里写上你的标题 作者名字/日期
Web Programming 網際網路程式設計
第七章 电子商务系统的运营与维护.
第13章 FTP檔案上傳、 自動傳送 報告人 M9153314 李育旻.
認證與檔案上傳 學習目標 基本原理 資料庫連線與選擇 執行查詢 取回答案 SQL Injection.
第二章 JAVA语言基础.
例外與檔案處理 例外處理 拋出例外 串流 Stream FileReader、FileWriter
创意源自激情,技术成就梦想 畅翼创新俱乐部 2012年春俱乐部第三次技术培训 赵程.
11-1 JDBC的基礎-說明 昇陽公司提出的資料庫中介軟體(Middleware)稱為「JDBC」(Java Database Connectivity),這是一種開放標準的Java程式介面,可以讓Java程式連接資料庫管理系統, 以Java技術來說,就是實作JDBC驅動程式介面(JDBC Driver.
Hello World 體驗實作第一個JSP程式.
《ASP.NET数据库网站设计教程(C#版)》
第四章 網頁表單與資料傳遞.
第3章 分布式文件系统HDFS (PPT版本号:2017年2月版本)
2.1 基本資料型別 2.2 變數 2.3 運算式與運算子 2.4 輸出與輸入資料 2.5 資料型別轉換 2.6 實例
API设计实例分析 通用IO API.
Ch11 檔案上傳及電子郵件 WEB程式設計.
ASP.NET 網頁製作教本 – 從基本語法學起
数据库操作示例 import java.sql.*; //导入java.sql包 public class JDBCDemo {
专题4:JSP脚本和指令.
第 9 章 運用CDO物件寄發 電子郵件 製作.
Java 第28讲:建立删除文件 主讲教师:李焱 讲师.
Visual Basic 程序设计 第12章文件处理
2018/11/20 第一章 Java概述 武汉大学计算机学院计算机应用系 2018/11/20 14:33.
Multithread 多執行緒 I/O Lecturer:楊昌樺.
JAVA 程式設計與資料結構 第六章 輸出與輸入.
JAVA 编 程 技 术 主编 贾振华 2010年1月.
Lesson 5 :基礎應用二(留言版) (2004/08/20).
程式設計實作.
CH09 套件 物件導向程式設計(II).
西南科技大学网络教育系列课程 高级语程序设计(Java) 第九章 输入/输出流.
第六讲 JSP中的文件操作(2) 教学目的 本讲继续讲述JSP中使用Java输入、输出流实现文件的读写操作 。 1 文件上传 2 文件下载
PHP+MySQL互動式網頁程式設計班 檔案上傳程式設計 講師:林業峻 CSIE, NTU 7 / 3, 2010.
檔案上傳 所謂檔案上傳,就是將檔案由客戶端的主機,藉 由瀏覽器傳送到伺服器的資料夾上。
第14章 伺服器檔案、電子郵件處理與Ajax 14-1 資料夾與檔案操作 14-2 文字檔案的讀寫 14-3 電子郵件與附檔處理
檔案讀寫與例外處理 (File IO and Exception Handling)
第11章 Android客户端与服务器交互.
Google App Engine API.
第五讲 JSP中的文件操作(1) 教学目的 本讲主要讲述JSP中使用Java输入、输出流实现文件的读写 操作 。 知识要点
第4章 ASP.NET的HTTP物件、輸出入與Cookie處理
第3章 Java語法的JSP程式 3-1 Java語言的基礎 3-2 JSP程式的基本架構 3-3 Java的變數與資料型態
Chap5 PHP程式設計進階 授課講師:.
Ch09 在網頁之間傳遞資訊 網頁程式設計.
JSP程序设计 第9章 Servlet简介.
第5章 其他数据库对象.
1 Session对象的特性 Session 状态对象 Session 对象常用的方法有: Session 对象常用的属性有:
2019/5/3 JAVA Socket(UDP).
第6章 PHP的数据采集.
計算機程式 Visual BASIC 程式設計
助教:廖啟盛 JAVA Socket(UDP) 助教:廖啟盛
大数据应用人才培养系列教材 Python语言 刘 鹏 张 燕 总主编 李肖俊 主编 刘 河 钟 涛 副主编.
只要功夫深 铁杵磨成针 —— 写在前面的话.
HTML表单 JSP借由标签所构成的表单区块中,取得用户在其中特定字段输入的数据內容 。 JSP 动态网页新技术.
——彻底变革算法与程序设计的教学方式 湖北省水果湖高级中学 伍先军.
Presentation transcript:

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

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();

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

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

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

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

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

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();

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

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

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

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

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屬性為上傳檔案資料的編碼方式。

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)));

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

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類別檔。

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");

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

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

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

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三個類別。

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。

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」資料夾。

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");

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

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

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

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

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

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

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);

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

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);

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