2012-01-04 38 views
0

目前,我有一個jsp文件,一些java bean類和兩個servlet。 第一個servlet負責上傳文件並打印出它的上下文。 第二個servlet負責獲取java bean代碼,執行它並在jsp上打印結果。然而,這到了重複servlet中的代碼。重複的代碼實際上是該文件需要爲了調用豆重新上傳:在servlets之間共享上傳的文件

FileItemFactory factory = new DiskFileItemFactory(); 
ServletFileUpload upload = new ServletFileUpload(factory); 
Iterator<FileItem> iterator = upload.parseRequest(request).iterator(); 
File uploadedFile = null; 
String dirPath = "C:\\fileuploads"; 

while (iterator.hasNext()) { 

    FileItem item = iterator.next(); 

    if (!item.isFormField()) { 

     String fileNameWithExt = item.getName(); 
     File filePath = new File(dirPath); 

     if (!filePath.exists()) { 
      filePath.mkdirs(); 
     } 

     uploadedFile = new File(dirPath + "/" + fileNameWithExt); 
     item.write(uploadedFile); 
    } else { 
     String otherFieldName = item.getFieldName(); 
     String otherFieldValue = item.getString(); 
    } 
} 

FileInputStream fstream = new FileInputStream(uploadedFile); 
DataInputStream in = new DataInputStream(fstream); 
BufferedReader br = new BufferedReader(new InputStreamReader(in)); 

接下來是該servlet與Java bean的連接代碼。這有效,但我的問題是分享這個上傳的文件的最佳方式是什麼?如果我可以將文件路徑存儲在一個變量中,並將其從第一個servlet調用到第二個,並且沒有重複的代碼。

在此先感謝。

P.S我也讀過這個問題,Share uploaded file between servlets in session,但我沒有真正設法做到這一點。

回答

2

如果我可以將文件路徑存儲在變量中,並將其從第一個servlet調用到第二個,並且沒有 重複代碼。

因此,您只需獲取文件路徑,然後從第二個servlet重新讀取文件即可。

session.setAttribute("filePath",yourCalculatedFilePath); 

,並使用

session.getAttribute("filePath"); 

只需將文件路徑中的會話屬性,您可以在會話訪問它從不同的servlet檢索。但是將整個文件放入會話並不是一個好主意,只要想象一個用戶放置一個大小爲1MB的文件,並且一次有1000個用戶在線(僅舉例),則會花費1GB的服務器內存。