在servlet之间共享上传的文件

时间:2012-01-04 11:41:56

标签: java jsp servlets javabeans

目前,我有一个jsp文件,一些java bean类和两个servlet。 第一个servlet负责上传文件并打印出它的上下文。 第二个servlet负责获取java bean代码,执行它并在jsp上打印结果。然而,这结束了在servlet中复制代码。重复的代码实际上是需要重新上传文件才能调用bean:

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,但我并没有真正做到这一点。

1 个答案:

答案 0 :(得分:2)

  

如果我可以将文件路径存储在变量中,并将其从第一个servlet调用到第二个没有   重复的代码。

所以你只是获取文件路径,然后从第二个servlet再次读取文件。

session.setAttribute("filePath",yourCalculatedFilePath);

使用

从不同的servlet中检索它
session.getAttribute("filePath");

您只需在会话属性中设置filePath,即可在整个会话中访问它。但是将整个文件放入会话并不是一个好主意,只要想象用户放置一个大小为1MB的文件,并且一次有1000个在线用户(仅举例)它将花费1GB的服务器内存。