Загрузка страниц JSP из пользовательских источников
Возможно ли выполнить страницу JSP и захватить ее вывод за пределы веб-приложения? В частности, в моем случае обычное веб-приложение все еще существует, но оно загружает страницы JSP не из пути к классам, а из произвольного источника. Кажется, что я не могу просто получить RequestDispatcher и указать его на файл JSP на диске.
2 ответа
Я думаю, что вам лучше использовать шаблонизатор, такой как скорость. Это обеспечивает чистую инфраструктуру для динамического контента, которая явно отличается от jsp / servlet, о котором вы спрашивали ранее.
Тем не менее, я видел приложения, которые копируют jsps в развернутый каталог, чтобы контейнер мог их забрать и перевести. Если вы сделаете это, обратите внимание, что это ограничивает ваши будущие возможности:
- вы полагаетесь на то, что ваше приложение будет "взорвано" - например, оно не может работать непосредственно из архива WAR (это может ограничить ваши возможности развертывания)
- редактирование jsps во время выполнения может открыть дыры в безопасности, если вы не отключите скриптлеты (также, если вы отключите, но это будет несколько сложнее...). Отключение скриптлетов запрещает настоящий код Java в jsps, тогда вы ограничены библиотеками тегов.
- Вам понадобится Java-компилятор, доступный во время выполнения, который вам может не понадобиться в производственных системах - например, вы не можете предварительно скомпилировать свой jsps перед развертыванием. Кроме того, вы платите обычный штраф за перевод jsp во время выполнения в вашей продуктивной системе.
Конфигурация web.xml для отключения скриптов:
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<scripting-invalid>true</scripting-invalid>
</jsp-property-group>
</jsp-config>
Я надеюсь, что этот фрагмент web.xml прошел, предварительный просмотр не показал его правильно...
Обновление: попытался правильно отобразить xml-фрагмент.
Поправь меня, если я ошибаюсь, но я думаю, ты имеешь в виду, что хочешь захватить HTML... а не JSP. JSP обрабатывается (в файл JAVA) на сервлет-движке (сервере веб-приложений) и после того, как HTML-форматируется и подается запросчику через веб-сервер (не такой, как сервер веб-приложений). Вы не можете заставить RequestDispatcher работать на прямой JSP с диска, потому что он еще не был обработан сервером веб-приложений. Теперь можно получить выходные данные JSP (в HTML), но я никогда раньше этого не делал. Могут быть некоторые хитрые API-интерфейсы, которые более понятны, чем я могу адресовать, но HTTP обычно делается на порте 80, поэтому я думаю, что можно было бы читать / записывать на порт 80 на сокете TCPIP. Наверное, есть еще кое-что, что нужно сделать, но, по крайней мере, стоит начать с этого.
Извините, я не могу предоставить более подробную информацию, но, черт возьми... это все теория для меня на данный момент.