版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、 第六講 JSP中的文件操作(2)教學目的 本講繼續(xù)講述JSP中使用Java輸入、輸出流實現(xiàn)文件的讀寫操作 。1 文件上傳2 文件下載3 分頁讀取文件 第六講 JSP中的文件操作(2)這一講繼續(xù)介紹有關JSP中文件操作的內(nèi)容。6.1 文件上傳 客戶通過一個JSP頁面,上傳文件給服務器時,該JSP頁面必須含有File類型的表單,并且表單必須將ENCTYPE的屬性值設成“multipart/form-data”,F(xiàn)ile類型表單如下所示:Form action= “接受上傳文件的頁面” method= “post” ENCTYPE=“ multipart/form-data” JSP引擎可以讓內(nèi)置
2、對象request調(diào)用方法getInputStream()獲得一個輸入流,通過這個輸入流讀入客戶上傳的全部信息,包括文件的內(nèi)容以及表單域的信息。 下面的例子1中,客戶通過Example6_1.jsp頁面上傳如下的文本文件A.txt。A.txt:你好,我們正在學習文件的上傳,request調(diào)用getInpuStream()可以獲得一個輸入流,通過這個輸入流可以讀取客戶上傳的全部信息,包括表單的頭信息以及上傳文件的內(nèi)容。以后將討論如何去掉表單的信息,獲取文件的內(nèi)容。 在accept.jsp頁面,內(nèi)置對象request調(diào)用方法getInputStream()獲得一個輸入流in、用FileOutput
3、Stream創(chuàng)建一個輸出流o。輸入流in讀取客戶上傳的信息,輸出流o將讀取的信息寫入文件B.txt,該文件B.txt被存放于服務器的F:/2000中。B.txt的內(nèi)容如圖6.3所示。 文件B.txt的前4行(包括一個空行)以及倒數(shù)5行(包括一個空行)是表單域的內(nèi)容,中間部分是上傳文件A.txt的內(nèi)容。例子1(效果如圖6.1、6.2、6.3所示)Example6_1.jsp: 選擇要上傳的文件: accept.jsp: 在下面的例子2中,客戶上傳一個圖象文件,還可以連接到showImage.jsp頁面查看這個上傳圖象的效果。我們可以允許客戶將文件上傳到服務器的任何一個目錄,為了讓客戶能查看上傳圖
4、象的效果,下面的例子2將上傳文件保存到一個web服務目錄D:/tomcat/jakarta-tomcat-4.0/webapps/examples中,假設服務器的IP是:00。例子2(效果如圖6.4、6.5、6.6所示)圖6.4 選擇上傳的圖象文件圖6.6 顯示上傳的圖象文件圖6.5 接收上傳的圖象文件 選擇要上傳的文件: FORM action= method=post ENCTYPE=multipart/form-data Example6_2.jsp:acceptFile.jsp: %try /用客戶的session的id建立一個臨時文件: String tempFileName=(St
5、ring)session.getId(); /建立臨時文件f1: File f1=new File(D:/Tomcat/jakarta-tomcat-4.0/webapps/examples/,tempFileName); FileOutputStream o=new FileOutputStream(f1); /將客戶上傳的全部信息存入f1: InputStream in=request.getInputStream(); byte b=new byte10000; int n; while( (n=in.read(b)!=-1) o.write(b,0,n); o.close();in.c
6、lose(); /讀取臨時文件f1,從中獲取上傳文件的名字,和上傳的文件的內(nèi)容: RandomAccessFile random=new RandomAccessFile(f1,r); /讀出f1的第2行,析取出上傳文件的名字: int second=1; String secondLine=null; while(second=2) secondLine=random.readLine(); second+; /獲取第2行中目錄符號最后出現(xiàn)的位置 int position=secondLine.lastIndexOf(); /客戶上傳的文件的名字是: String fileName=seco
7、ndLine.substring(position+1,secondLine.length()-1); random.seek(0); /再定位到文件f1的開頭。 /獲取第4行回車符號的位置: 續(xù)前頁:續(xù)前頁: long forthEndPosition=0; int forth=1; while(n=random.readByte()!=-1&(forth=4) if(n=n) forthEndPosition=random.getFilePointer(); forth+; /根據(jù)客戶上傳文件的名字,將該文件存入磁盤: File f2=new File(D:/Tomcat/jakarta-
8、tomcat-4.0/webapps/examples/,fileName); session.setAttribute(Name,fileName);/供showImage.jsp頁面使用。 RandomAccessFile random2=new RandomAccessFile(f2,rw); /確定出文件f1中包含客戶上傳的文件的內(nèi)容的最后位置,即倒數(shù)第6行。續(xù)前頁: while(startPoint 查看上傳的圖象效果 FORM action= showImage.jsp:% String name=(String)session.getAttribute(Name); if(nam
9、e=null) name=; out.print( 在下面的例子3中,客戶在Example6_3頁面點擊超鏈接下載一個zip文檔。例子3(效果如圖6.7、6.8所示)圖6.8下載文件圖6.7 選擇下載文件Example6_3.jsp:點擊超鏈接下載Zip文檔book.Zip 下載book.zip loadFile.jsp:續(xù)前頁:6.3 分頁讀取文件 當讀取一個較大的文件時,比如想讓客戶閱讀一部小說,我們希望分頁地讀取該文件??梢越柚鷖ession對象實現(xiàn)分頁讀取文件。當客戶向JSP頁面發(fā)出請求時,JSP頁面建立一個指向該文件的輸入流,通過文件流每次讀取文件的若干行。 我們已經(jīng)知道HTTP協(xié)議
10、是一種無狀態(tài)協(xié)議。一個客戶向服務器發(fā)出請求(request)然后服務器返回響應(respons),連接就被關閉了。在服務器端不保留連接的有關信息,因此當下一次連接時,服務器已沒有以前的連接信息了,無法判斷這一次連接和以前的連接是否屬于同一客戶。也就是說,如果我們請求每次讀取10行,那么第一次請求會讀取文件的前10行,當我們第2次請求時,JSP頁面會重新將輸入流指向文件,這樣,我們第2次讀取的內(nèi)容和第一次讀取的完全相同,仍是文件的前10行。因此,必須使用會話來記錄有關連接的信息。當客戶第一次請求該頁面時,創(chuàng)建指向文件的輸入流連接,然后將這個輸入流保存到客戶的會話中,當客戶再次請求這個頁面時,直接
11、使用客戶會話中的輸入流繼續(xù)讀取的文件的后續(xù)10行就可以了。例子4readFileByLine.jsp:% String s=request.getParameter(g); /獲取客戶提交的信息(是否重新讀取文件) if(s=null) s=; byte b=s.getBytes(ISO-8859-1); s=new String(b); File f=null; FileReader in=null; BufferedReader buffer=null; long startTime=session.getCreationTime(); long endTime=session.getLa
12、stAccessedTime(); if(endTime-startTime=0) /當?shù)谝淮握埱笤擁撁鏁r,建立和文件的輸入流連接。 f=new File(f:/2000,A.txt); in=new FileReader(f); buffer=new BufferedReader(in); session.setAttribute(file,f); session.setAttribute(in,in); session.setAttribute(buffer,buffer); if(s.equals(重新讀取文件) /當請求重新讀取文件時,建立和文件的輸入流連接。 f=new File(f:/2000,A.txt); in=new FileReader(f); buffer=new BufferedReader(in); session.setAttribute(file,f); session.setAttribute(in,in); session.setAttribute(buffer,b
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 電腦培訓室相關管理制度
- 學校團校培訓第一課制度
- 幼兒園睡眠培訓制度
- 員工上崗前培訓管理制度
- 鄉(xiāng)鎮(zhèn)幼兒園園本培訓制度
- 中心校培訓制度匯編
- 基金會培訓制度
- 教師培訓費用制度
- 繪畫培訓班制度
- 2026年阿里巴市場部招聘試題解析
- 設備、管道、鋼結(jié)構(gòu)施工方案
- 2021-2026年中國沉香木行業(yè)發(fā)展監(jiān)測及投資戰(zhàn)略規(guī)劃研究報告
- 數(shù)學-華中師大一附中2024-2025高一上學期期末試卷和解析
- 2024-2030年中國海南省廢水污染物處理資金申請報告
- 新能源汽車技術(shù) SL03維修手冊(第4章)-電氣-4.2.2~4.2.12電器集成
- 教科版科學教材培訓
- 甲狀腺的中醫(yī)護理
- 商住樓項目總體規(guī)劃方案
- 2022儲能系統(tǒng)在電網(wǎng)中典型應用
- 互聯(lián)網(wǎng)+物流平臺項目創(chuàng)辦商業(yè)計劃書(完整版)
- IABP主動脈球囊反搏課件
評論
0/150
提交評論