Поделиться загруженным файлом среди сервлетов - PullRequest
0 голосов
/ 04 января 2012

В настоящее время у меня есть один JSP-файл, несколько классов Java-бинов и два сервлета.Первый сервлет отвечает за загрузку файла и распечатывает его контекст.Второй сервлет отвечает за выборку кода Java-бина, его выполнение и вывод результата на jsp.Однако это приводит к дублированию кода в сервлетах.Дублированный код на самом деле заключается в том, что файл должен быть повторно загружен для вызова 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));

Далее идет код, который соединяет сервлет с Java-бинами.Это работает, но мой вопрос, каков наилучший способ поделиться этим загруженным файлом?Если я могу сохранить путь к файлу в переменной и вызывать его от первого сервлета до второго без дублированного кода.

Заранее спасибо.

PS Я также читал этот вопрос, Обмен загруженным файлом между сервлетами в сеансе , но мне действительно не удалось это сделать.

1 Ответ

2 голосов
/ 04 января 2012

Если я смогу сохранить путь к файлу в переменной и вызвать его от первого сервлета до второго без дублированного кода.

Таким образом, вы просто получите путь к файлу ивторой сервлет, вы будете снова читать файл.

session.setAttribute("filePath",yourCalculatedFilePath);

и извлекать его из другого сервлета, используя

session.getAttribute("filePath");

Вы можете просто установить filePath в атрибуте сеанса и получить к нему доступ черезсессия.но помещать весь файл в сессию не очень хорошая идея, просто представьте, что пользователь помещает файл размером 1 МБ, и одновременно на него подключаются 1000 пользователей (только пример), это будет стоить 1 ГБ памяти сервера.

...