2013-08-09 2 views
4

Я разрабатываю приложение с использованием Java и Spring MVC. Как обычно, хранится один JSP-файл в/WEB-INF/view/folder, который работает как View для всех запросов.Создание JSP-шаблонов (просмотров) динамически из базы данных

Обычно у нас есть JSP с жестким кодированием, который также имеет некоторые коды для обработки Модели (теги и EL). До сих пор все работает нормально.

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

Вот код, чтобы объяснить, что я пытаюсь сделать (я знаю, что это не путь, а только для иллюстрации).

/WEB-INF/views/index.jsp

<%@ page import="com.example.domain.Template" %> 
<%@ page import="com.example.dao.TemplateStore" %> 

<!-- Following code is supposed to return complete JSP template from the database as uploaded by the user. --> 

<%= TemplateStore.getUserTemplate("userTemplate") %> 

Я искал Интернет по этой теме, но не смогли найти ничего.

Любая помощь в том, как добиться этого, будет высоко оценена.

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

ВАЖНО: Я задал этот вопрос несколько дней назад, но некоторые члены его отметили как «вне темы». Я еще не понял, как этот вопрос выходит из темы - https://stackoverflow.com/questions/18026092/creating-content-of-jsp-views-in-web-inf-views-dynamically-from-the-database.

+0

Это не по теме, потому что вы не задаете конкретный вопрос («Я пытался это сделать, но обнаружил эту ошибку»), но общий («Я хочу это сделать»), без кода, чтобы объяснить, что вы сделали это до сих пор.Учитывая, что написание файла на диск вряд ли является новой вещью, вы должны лучше описать проблему, которая у вас есть. – SJuan76

+0

И в любом случае написание JSP-кода кажется неправильным; подход MVC (браузер вызывает сервлет, который перенаправляет на JSP, который рисует ответ) в сочетании с CSS является более стандартным решением. – SJuan76

+0

@ SJuan76 - Спасибо. Я не могу писать в файловую систему, так как я использую GAE, и это не позволяет. Да, я использую MVC-подход, но я хочу, чтобы представление, то есть само представление JSP, должно генерироваться динамически из базы данных. – TechExplorer

ответ

3

Если шаблоны просмотра должны быть динамически извлечены из базы данных, вы не должны думать о JSP. JSPs скомпилированы в классы сервлетов, и нет никакой поддержки для этого, кроме стандартного (статические файлы где-то под вашим корнем webapp).

Поэтому просто подумайте о переключении технологии просмотра (по крайней мере, для динамической части) в какую-либо библиотеку шаблонов общего назначения, такую ​​как Velocity или Freemarker. Это связано с бонусом за безопасность, поскольку в таком шаблоне меньше одного, чем из кода JSP.

Вы даже можете поддерживать несколько технологий просмотра (возможно, что-то, что Spring MVC поддерживает из коробки, кроме JSP) и позволяет пользователям выбирать тип шаблона при загрузке.

Затем вы можете написать собственный пользовательский разрешающий инструмент, который будет делегировать соответствующий стандартный преобразователь (Velocity, Freemarker, XSLT, любой ...) с выбранным пользователем шаблоном.

Однако, если JSP является жестким требованием, я думаю, что один уродливый обходной путь для JSP (который должен работать в любом контейнере сервлетов) может состоять в том, чтобы извлекать контент из БД и создавать фактический файл (например, WEB-INF/templates/${primarky-key}.jsp) под вашим взорванным веб-приложением root, затем RequestDispatcher.forward().

+0

Спасибо. Исследуемый Freemarker немного, и я предполагаю, что интерфейс TemplateLoader может мне помочь. Хотя мне все еще интересно узнать, возможно ли это в JSP любыми способами. – TechExplorer

+0

Я отредактировал ответ с чем-то, я думаю, мог бы работать (хотя я бы настоятельно рекомендовал против, если вы в состоянии выбрать). –

+0

Я собираюсь развернуть приложение в Google App Engine, которое не позволяет писать в файловой системе. – TechExplorer

0

Возможно, вы не сможете это сделать с помощью JSP, но вы можете, конечно, скомпилировать Java-код в памяти и затем вызвать его.

http://www.java2s.com/Code/Java/JDK-6/CompilingfromMemory.htm

Конечно происходит из JSP в сервлет будет просто еще один шаг.

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