2012-01-04 23 views
0

現在、jspファイル、Java Beanクラス、および2つのサーブレットがあります。 最初のサーブレットはファイルをアップロードし、そのコンテキストを出力します。 2番目のサーブレットは、Java Beanコードをフェッチして実行し、結果をjspに出力します。しかし、これはサーブレットでコードを複製することになります。重複したコードは、ファイルが豆を呼び出すために再アップロードする必要があること、実際にある:サーブレット間でアップロードされたファイルを

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

次のJava Beanとサーブレットを接続するコードがあります。これは動作しますが、私の質問は、このアップロードされたファイルを共有する最良の方法は何ですか?変数にファイルパスを格納して、最初のサーブレットから重複したコードなしで2番目のサーブレットに呼び出すことができます。

ありがとうございます。

P.S私はこの質問もよく読んでいますが、Share uploaded file between servlets in sessionですが、本当にそれを行うことはできませんでした。

答えて

2

私は変数にファイルパスを保存していない 重複したコードで秒に最初のサーブレットから呼び出すことができます。

ファイルパスを取得するだけで、2番目のサーブレットから再度ファイルを読み取ることになります。

session.setAttribute("filePath",yourCalculatedFilePath); 

とあなただけのセッション属性にファイルパスを指定して設定することができますし、セッション全体にアクセスすることができます

session.getAttribute("filePath"); 

を使用して別のサーブレットからそれを取り出します。しかし、ファイル全体をセッションに入れることは、ユーザーが1MBのファイルを置いて、一度にオンラインで1000人のユーザーがいると想像するのは良い考えではありません。サーバーのメモリが1GB必要です。

関連する問題