【问题标题】:Share uploaded file among servlets在 servlet 之间共享上传的文件
【发布时间】:2012-01-04 11:41:55
【问题描述】:

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

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

【问题讨论】:

    标签: java jsp servlets javabeans


    【解决方案1】:

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

    因此,您将只是获取文件路径,然后您将再次从第二个 servlet 读取文件。

    session.setAttribute("filePath",yourCalculatedFilePath);
    

    并使用从不同的 servlet 中检索它

    session.getAttribute("filePath");
    

    你可以在 session 属性中设置 filePath 并且你可以在 session 中访问它。但是将整个文件放到会话中并不是一个好主意,想象一下用户放置一个大小为 1MB 的文件,并且一次有 1000 个用户在线(仅作为示例),这将花费 1GB 的服务器内存。

    【讨论】:

      猜你喜欢
      • 2011-08-16
      • 1970-01-01
      • 1970-01-01
      • 2011-08-16
      • 2017-08-17
      • 2014-03-29
      • 2011-11-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多