Как связать файл отчета с Jasper под Spring MVC?

Рейтинг: 1Ответов: 1Опубликовано: 11.11.2014

Пишу на Java с использованием Spring MVC. Хочу создать файл отчета в формате PDF(именно файл, а не форму). В WEB-INF у меня лежит папка jrxml c report.jrxml. Использую Jasper, но не могу связать Jasper c этим файлом. В команде

jasperReport = JasperCompileManager.compileReport("/jrxml/report.jrxml")

получаю ошибку "файл не найден". Подозреваю, что надо как-то property настроить, но как? Я в Spring, можно сказать, чайник. Подскажите, пожалуйста.

Попробовала полное имя задать: "http:\localhost:8080\myApp\WEB-INF\jrxml\report.jrxml", ошибка: "неверный синтаксис имени файла, папки или носителя".

Ответы

▲ 1

Попробовала полное имя задать: "http:\localhost:8080\myApp\WEB-INF\jrxml \report.jrxml", ошибка: "неверный синтаксис имени файла, папки или носителя".

Ну, тут точно нужно не url, а путь к файлу в файловой системе.

Обновление

Попробуйте такой хак, напишите в коде строчки:

 File file = new File("");
 System.out.println(file.getAbsolutePath());

Таким образом узнаете, в какой директории находитесь. Можно ещё попробовать так:

jasperReport =  JasperCompileManager.compileReport("classpath:jrxml/report.jrxml")

или так:

JasperCompileManager.compileReport("classpath:report.jrxml")

Обновление 2

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

Обновление 3

Конечно. Ваш проект ведь тоже на сервере, только на локальном. Точно также будет и там. Можете поэкспериментировать с этим, собрав war файл и положив его в директорию вашего локального веб-сервера, на котором запускаете приложение. Деплой это уже отдельная задача в общем-то.

Обновление 4

Томкат в Идее не будет его кидать в папку томката, поэтому на С: да. Поэтому можете попробовать собрать war, как я уже сказал и положить в директорию томката, в папку webapps, запустить томкат, и попробовать просто из браузера проделать необходимые действия.