用servlet進行文件上傳的原理和實現(xiàn)

用servlet進行文件上傳的原理和實現(xiàn)

ID:34482905

大小:95.43 KB

頁數(shù):16頁

時間:2019-03-06

用servlet進行文件上傳的原理和實現(xiàn)_第1頁
用servlet進行文件上傳的原理和實現(xiàn)_第2頁
用servlet進行文件上傳的原理和實現(xiàn)_第3頁
用servlet進行文件上傳的原理和實現(xiàn)_第4頁
用servlet進行文件上傳的原理和實現(xiàn)_第5頁
資源描述:

《用servlet進行文件上傳的原理和實現(xiàn)》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在工程資料-天天文庫。

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

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

標簽中添加以下代碼可以頁面上顯示一個選擇文件的控件。在頁面

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

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

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

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

7、ServletRequestrequest,HttpServletResponseresponse)throwsIOException,ServletException{//1intlen=request.getContentLength();bytebuffer[]=newbyte[len];//2InputStreamin=request.getInputStream();inttotal=0;intonce=0;while((total=0)){once=in.read(buffer,tot

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

當前文檔最多預覽五頁,下載文檔查看全文

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

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