Spring MVC — загрузка файлов, создание (генерация) Excel и PDF документов

Рассмотрим как можно загрузить файл в приложении Spring MVC. Также рассмотрим создание .xls и .pdf документов с помощью Spring MVC.

Обзор приложения Spring MVC + AngularJS + Bootstrap + HTML5
Используемые технологии и библиотеки
  • Spring MVC 4.2.4.Release
  • Apache commons file upload 1.3.1
  • Apache POI 3.12
  • iText 2.1.15
  • Maven 3.2.5
  • IntelliJ IDEA 15.0.2

1. Описание задачи

Рассмотреть каким образом можно загружать на сервер различные файлы в приложении на основе Spring MVC. Изучить применение библиотек Apache POI и iText для создания документов Microsoft и PDF соответственно.

2. Структура проекта

Структура проекта

Для этой задачи были добавлены java классы для загрузки файла (FileUploadController), создания excel и pdf документов (ExcelDocument, PDFDocument), класс-модель (Cat) и контроллер, который будет обрабатывать запросы с jsp страницы (ExcelPDFController). Для отображения результата используется представление /file/file.jsp. Дополнительно, начиная с этой части, будет использоваться шаблоны для формирования jsp страниц, чтобы не дублировать повторяющиеся части страницы (здесь header и footer вынесены в шаблон).

3. Подключение зависимостей pom.xml

Для выполнения задачи нам понадобятся три библиотеки. Комментарии поясняют для чего каждая зависимость необходима:

pom.xml со всеми зависимостями:

4. Настройка конфигурации Spring MVC

Для загрузки файлов нам понадобится прописать в mvc-config.xml интерфейс MultipartResolver. Для создания pdf, excel документов был добавлен отдельный xml конфигурационный файл и с помощью XmlViewResolver был подключен к конфигурации спринг. Обратите внимание, что относительно предыдущей части была добавлена строчка <mvc:annotation-driven/>, которая «включит» наши @Component бины.

Настройки mvc-config.xml для этой части:

excel-pdf-config.xml:

В этом конфигурационном файле указываются два бина из пакета ../mvc, которые будут использоваться для работы с документами.

Полный файл mvc-config.xml:

Файл application-context.xml остался без изменений.

5. web.xml

Для работы с русскими символами вам нужно добавить в дескриптор развертывания фильтр, который на лету будет преобразовывать их в кодировку UTF-8. В противном случае вы получите что-то вроде ???###?.

6. Java классы для работы с PDF, Excel, FileUpload

6.1. Загрузка файла

Для загрузки файла Spring MVC используется свой интерфейс MultipartResolver (мы будем использовать реализующий его класс CommonsMultipartResolver). Работа с ним очень простая. Всё что нужно сделать — указать маппинг, по которому контроллер перехватит запрос на закачку файла. Далее в классе используется стандартная работа с потоками байт и запись файла.

FileUploadController:

6.2. Создание PDF, Excel документов

Для работы с документами от майкрософт (xls, doc..) мы используем библиотеку от Apache. Для работы с PDF документами будет использоваться библиотека iText.

Хочу отметить, что iText использует встроенный в spring класс org.springframework.web.servlet.view.document.AbstractPdfView, но есть более современная библиотека для работы с PDF — iTextPDF 5.5.1 (она не поддерживает библиотеки из этого примера). Работа с iTextPDF 5.5.1 показана в похожей статье Spring Web Flow — создание PDF и Excel документов.

Нам понадобится создать два класса, в которых будет генерироваться соответствующий документ, а так же контроллер, который будет обрабатывать запросы от клиента. Дополнительно был создан класс-заглушка Cat чисто для формирования таблиц. Описывать подробно классы не буду, т.к. все названия методов и переменных показывают их назначение (pdfHeader, addCell и т.п.).

ExcelDocument:

PDFDocument:

ExcelPDFController:

Cat:

7. JSP представление

7.1 Использование шаблонов

Начиная с этой части в приложении будут использованы шаблоны для построения страниц. Т.к. на всех страницах у нас повторяется header и footer, то они были вынесены в файл template.tag. Описание применения шаблонов не входит в тему статьи, но кратко опишу на что обратить внимание. В начале .tag или .jsp страницы прописывается такая конструкция:

7.2. JSP представление по загрузке и генерации файлов

Результат работы будет выводиться на странице file.jsp.

Обратите внимание на использование тегов jsp:page (указывает на файл шаблона, см. описание тега в начале страницы) и jsp:body (контент внутри этого тега будет вставлен в необходимое место, указанное в шаблоне).

8. Запуск приложения

Результаты работы приложения можно увидеть на этих скриншотах:

Общий вид страницы:

excelPdfPage

Созданный xls файл:

excelDoc

PDF документ:

pdfDoc

После загрузки файла:

fileUploaded

 

Исходные коды

MVC_AngularJS_Html5 full project — полный проект Spring MVC + AngularJS + Bootstrap + HTML5.

2. Upload File, Pdf, Excel — код для этой части

Обзор приложения Spring MVC + AngularJS + Bootstrap + HTML5

 

Share Button
16
16246 Total Views 1 Views Today

4 thoughts on “Spring MVC — загрузка файлов, создание (генерация) Excel и PDF документов

  1. Ильдар:

    я все сломал, не грузятся стили и при переходе по ссылкам выдает

    Servlet.init() for servlet dispatcherServlet threw exception

    exception

    root cause

  2. msk:

    Я так понимаю в artifacs не добавились библиотеки для загрузки файлов… Я удалил его и добавил заново… и все заработало )

  3. danieljust:

    Привет, надеюсь, ты еще поддерживаешь этот офигенский сайт. Столкнулся с такой проблемой.
    Сделал по образу и подобию, но когда пытаюсь зайти на ../uploadFile в лицо вылетает
    HTTP Status 405 — Request method ‘GET’ not supported.
    Попробовал взять архив с сайта, та же проблема. Не знаешь, с чем может быть связано?
    _____
    Разобрался, понял, что нужно сначала было проследовать на file.html. А от туда уже по клику идет  Get на uploadFiles.
    PS Вчера была такая же ошибка, так что одним пониманием двух зайцев 😉

  4. Vic38:

    Добрый день!
    Спасибо большое за этот ресурс! Только недавно начал изучать Spring.
    Предыдущий пример работает нормально, а в этом и последующих начинаются проблемы.
    Использую Idea 21016.1.4 ,  беру сразу ваши исходники для данного примера.
    Maven сразу подчеркивает красным зависимости, соответственно проект не компилируется.
    Удаление-вставка не помогают. Подскажите, пожалуйста, в какую сторону рыть.
    _________
    Сам себе отвечу! Пути к Maven были неправильные!

Добавить комментарий