2013-06-04 3 views
-2

Я работаю над распорками 2.0. Я разрабатываю веб-приложение. Я использую отчет Jasper в своем приложении. Я хочу получить доступ к файлам *.jrxml в своем классе действий. Я не хочу давать жесткий путь к файлам. Поэтому, чтобы получить путь динамически, я искал его и получил решение, которое я могу получить, используя метод getRealPath(). Но я нашел два осуществления делает это:лучший подход к реализации getRealPath()

  1. Использование HttpSession, чтобы получить объект ServletContext и используя getRealPath() метод ServletContext объекта. Как это:

    HttpSession session = request.getSession(); 
    String realPath = session.getServletContext().getRealPath("/"); 
    
  2. Второй подход, чтобы сделать это непосредственно, используя статический метод getServletContext() из ServletActionContext. И тогда мы можем получить реальный путь приложения, используя метод getRealPath(). Как это:

    String realPath = ServletActionContext.getServletContext().getRealPath("/");

Скажите, пожалуйста, есть ли какая-то разница между двумя выше и также скажите, пожалуйста, есть ли какой-либо другой способ, чтобы получить путь?

+0

Связанный: http://stackoverflow.com/questions/12160639/what-does-mean-in-the-function-servletcontext-getrealpath и http://stackoverflow.com/questions/14843615/servlet-failing-to -write-uploaded-image-to-disk – BalusC

+0

Почему вы не помещаете свои файлы в webapp? –

+0

@AleksandrM Эти файлы находятся в моем webapp. Но есть три места, где мы развертываем наше приложение. localhost, чтобы разработать и протестировать приложение, а затем демонстрационный сервер нашей компании и живой сервер. И если я дам жестко закодированный путь в каталоге '/ WebContent/reports /', тогда я должен менять его каждый раз, когда я его разворачиваю на сервер. И я хочу, чтобы мне не приходилось менять его каждый раз. – Vicky

ответ

0

Ничего не значит «лучше», и я бы сказал, что и это не очень хорошо.

Я мог бы попробовать получить путь к контексту в сервлет инициализации и вставить его в контекст приложения, а затем сделать ваши действия (0) ApplicationAware и получить значение с карты.

Это дает дополнительное преимущество в том, чтобы помогать тестированию и удалять статические ссылки в действии.

Это говорит о том, что я вижу нулевую причину, чтобы пройти дополнительную механику вашего первого подхода: она добавляет много шума для получения никакой ощутимой выгоды; Я даже не знаю, почему это будет рассмотрено.

Я также опасаюсь привязать ваши действия к пути, подобному этому, если нет реальной потребности, каково конкретное использование? В общем, вам не нужно будет обращаться к ресурсам внутри приложения по их пути.

+0

Я использую JasperReports в своем приложении, путь необходим для доступа к файлам jasper в классе действия, а также я использую строку пути как поле, чтобы я мог получить доступ к изображениям, необходимым для отчета. Все, что я делаю, - это избегать статического пути. – Vicky

Смежные вопросы