Вывести переформатированный текст в файл, включенный в JSP - PullRequest
1 голос
/ 29 апреля 2010

У меня есть несколько HTML-файлов, которые я хотел бы включить с помощью тегов в мое веб-приложение.

В некоторых файлах у меня есть псевдодинамический код - специально отформатированные биты текста, которые во время выполнения я хотел бы преобразовать в соответствующие биты данных в таблице MySQL.

Например, файл HTML может содержать строку, которая говорит:

Welcome, [username].

Я хочу, чтобы это было разрешено (через данные пользователя):

Welcome, user@domain.com.

Это было бы просто сделать в файле JSP, но требования диктуют, что файлы будут создаваться людьми, которые знают базовый HTML, но не JSP. Однако такие простые текстовые теги должны быть достаточно легкими, чтобы я мог им объяснить.

У меня есть код, настроенный для таких разрешений строк, но кто-нибудь может придумать, как сделать это для файлов? На самом деле мне не нужно изменять файл на диске - просто загрузите содержимое, измените его и выведите его в / в содержащий JSP-файл.

Я пытался загрузить файлы в строки через apache readFileToString, но я не могу понять, как загружать файлы из определенной папки в каталоге содержимого веб-приложения без жесткого кодирования и беспокоиться о его поломке, если в будущем я разверну его на другой системе.

1 Ответ

1 голос
/ 29 апреля 2010

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

Если эти файлы находятся в веб-контенте, используйте ServletContext#getRealPath(), чтобы преобразовать относительный веб-путь в абсолютный путь к файловой системе диска. Это работает, если WAR взорван на сервере приложений (большинство делает это по умолчанию, только Weblogic не делает этого по умолчанию, но это настраивается IIRC). Внутри сервлетов вы можете получить ServletContext унаследованным getServletContext() методом.

String relativeWebappURL = "/html/file.html";
String absoluteFilePath = getServletContext().getRealPath(relativeWebappURL);
File file = new File(absoluteFilePath);
// ...

Кроме того, вы можете поместить его в classpath веб-приложения и использовать ClassLoader#getResource():

String relativeClasspathURL = "/html/file.html";
URL absoluteClasspathURL = Thread.currentThread().getContextClassLoader().getResource(relativeClasspathURL);
File file = new File(absoluteClasspathURL.toURI());
// ...

Что касается полной картины, я спрашиваю, рассматривали ли вы когда-либо существующую шаблонную среду, такую ​​как Freemarker или Скорость , чтобы облегчить всю работу?

...