用Servlet進(jìn)行文件上傳的原理和實(shí)現(xiàn).doc

用Servlet進(jìn)行文件上傳的原理和實(shí)現(xiàn).doc

ID:50887717

大?。?07.45 KB

頁數(shù):16頁

時(shí)間:2020-03-15

用Servlet進(jìn)行文件上傳的原理和實(shí)現(xiàn).doc_第1頁
用Servlet進(jìn)行文件上傳的原理和實(shí)現(xiàn).doc_第2頁
用Servlet進(jìn)行文件上傳的原理和實(shí)現(xiàn).doc_第3頁
用Servlet進(jìn)行文件上傳的原理和實(shí)現(xiàn).doc_第4頁
用Servlet進(jìn)行文件上傳的原理和實(shí)現(xiàn).doc_第5頁
資源描述:

《用Servlet進(jìn)行文件上傳的原理和實(shí)現(xiàn).doc》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。

1、用Servlet進(jìn)行文件上傳的原理和實(shí)現(xiàn)Servlet是用Java編寫的、協(xié)議和平臺(tái)都獨(dú)立的服務(wù)器端組件,使用請(qǐng)求/響應(yīng)的模式,提供了一個(gè)基于Java的服務(wù)器解決方案。使用Servlet可以方便地處理在HTML頁面表單中提交的數(shù)據(jù),但Servlet的API沒有提供對(duì)以mutilpart/form-data形式編碼的表單進(jìn)行解碼的支持,因而對(duì)日常應(yīng)用中經(jīng)常涉及到到文件上傳等事務(wù)無能為力。如何用Servlet進(jìn)行文件的上傳,必須編程實(shí)現(xiàn)。一、基本原理通過HTML上載文件的基本流程如下圖所示。瀏覽器端提供了供用戶選擇提交

2、內(nèi)容的界面(通常是一個(gè)表單),在用戶提交請(qǐng)求后,將文件數(shù)據(jù)和其他表單信息編碼并上傳至服務(wù)器端,服務(wù)器端(通常是一個(gè)cgi程序)將上傳的內(nèi)容進(jìn)行解碼了,提取出HTML表單中的信息,將文件數(shù)據(jù)存入磁盤或數(shù)據(jù)庫。二、各過程詳解A)填寫表單并提交通過表單提交數(shù)據(jù)的方法有兩種,一種是GET方法,另一種是POST方法,前者通常用于提交少量的數(shù)據(jù),而在上傳文件或大量數(shù)據(jù)時(shí),應(yīng)該選用POST方法。在HTML代碼中,在

標(biāo)簽中添加以下代碼可以頁面上顯示一個(gè)選擇文件的控件。

3、e01">在頁面中顯示如下(可能隨瀏覽器不同而不同)可以直接在文本框中輸入文件名,也可以點(diǎn)擊按鈕后彈出供用戶選擇文件的對(duì)話框。B)瀏覽器編碼在向服務(wù)器端提交請(qǐng)求時(shí),瀏覽器需要將大量的數(shù)據(jù)一同提交給Server端,而提交前,瀏覽器需要按照Server端可以識(shí)別的方式進(jìn)行編碼,對(duì)于普通的表單數(shù)據(jù),這種編碼方式很簡(jiǎn)單,編碼后的結(jié)果通常是field1=value2&field2=value2&…的形式,如name=aaaa&Submit=Submit。這種編碼的具體規(guī)則可以在rfc2231里查到,通常使用的表單也是采用這種

4、方式編碼的,Servlet的API提供了對(duì)這種編碼方式解碼的支持,只需要調(diào)用ServletRequest類中的方法就可以得到用戶表單中的字段和數(shù)據(jù)。這種編碼方式(application/x-www-form-urlencoded)雖然簡(jiǎn)單,但對(duì)于傳輸大塊的二進(jìn)制數(shù)據(jù)顯得力不從心,對(duì)于傳輸這類數(shù)據(jù),瀏覽器采用了另一種編碼方式,即"multipart/form-data"的編碼方式,采用這種方式,瀏覽器可以很容易的表單內(nèi)的數(shù)據(jù)和文件一起。這種編碼方式先定義好一個(gè)不可能在數(shù)據(jù)中出現(xiàn)的字符串作為分界符,然后用它將各個(gè)數(shù)據(jù)段

5、分開,而對(duì)于每個(gè)數(shù)據(jù)段都對(duì)應(yīng)著HTML頁面表單中的一個(gè)Input區(qū),包括一個(gè)content-disposition屬性,說明了這個(gè)數(shù)據(jù)段的一些信息,如果這個(gè)數(shù)據(jù)段的內(nèi)容是一個(gè)文件,還會(huì)有Content-Type屬性,然后就是數(shù)據(jù)本身。這里,我們可以編寫一個(gè)簡(jiǎn)單的Servlet來看到瀏覽器到底是怎樣編碼的。實(shí)現(xiàn)流程:·重載HttpServlet中的doPost方法·調(diào)用request.getContentLength()得到Content-Length,并定義一個(gè)與Content-Length大小相等的字節(jié)數(shù)組buf

6、fer。·從HttpServletRequest的實(shí)例request中得到一個(gè)InputStream,并把它讀入buffer中?!な褂肍ileOutputStream將buffer寫入指定文件。代碼清單//ReceiveServlet.javaimportjava.io.*;importjavax.servlet.*;importjavax.servlet.http.*;//示例程序:記錄下Form提交上來的數(shù)據(jù),并存儲(chǔ)到Log文件中publicclassReceiveServletextendsHttpServl

7、et{publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsIOException,ServletException{//1intlen=request.getContentLength();bytebuffer[]=newbyte[len];//2InputStreamin=request.getInputStream();inttotal=0;intonce=0;while((total

8、=0)){once=in.read(buffer,total,len);total+=once;}//3OutputStreamout=newBufferedOutputStream(newFileOutputStream("Receive.log",true));byte[]breaker="rNewLog:-------------------->

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。