Захватить вывод JSP, сохранить в файл - PullRequest
5 голосов
/ 13 марта 2009

Мне поручено попытаться создать сайт, который будет создавать пользовательские шаблоны HTML. Настройки основаны на пользовательском вводе. В настоящее время я использую Tomcat / JSP для остальной части интерфейса. Я хочу создать HTML-шаблоны в JSP для вывода условного HTML-кода, но вместо того, чтобы отображать этот HTML-вывод пользователю, я бы хотел сохранить этот код в нескольких файлах (которые затем будут заархивированы и доставлены в пользователь, наряду с изображениями, CSS-файлами, JS-файлами). Мне нужно знать, как создать поддельный контейнер, который будет выполнять файл JSP (процесс включает и оценивает переменные).

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

Спасибо!

Ответы [ 5 ]

4 голосов
/ 13 марта 2009

Вот идея. Создайте сервлет, чтобы принять ввод от пользователя, из сервлета используйте java.net.HttpURLConnection, чтобы передать ввод на страницу JSP и получить результат.

URL urlPage = new URL(url);
HttpURLConnection conn = (HttpURLConnection)urlPage.openConnection();
conn.connect();
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));

//then loop through lines of webpage with br.readLine();

Затем в вашем сервлете вы можете сжать все извлеченные вами файлы и вернуть их пользователю

1 голос
/ 13 марта 2009

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


    RequestDispatcher d = getServletContext().getRequestDispatcher(jspName);
    d.forward(request, response);

Пусть jsp покажет интерфейс с введенными пользователем значениями формы / формы. Когда форма заполнена, отправьте форму. В этот момент jsp вернет контекст сервлету, где вы сможете проанализировать значения, определить, какие файлы создать и вернуть пользователю. Как только вы определили, что вы хотите отобразить пользователю, бросьте его в другой jsp и передайте контекст этому jsp.

Вы можете сделать это двумя способами. Вы можете создать другой jsp для разных типов файлов, которые вы хотите вернуть, и просто вызвать нужный. Или Вы можете передать любые структуры / значения, которые вы хотите, в ваш jsp, встраивая их в запрос и затем получая их внутри вашего jsp. Вы можете использовать этот факт для создания единой jsp, которая на основе переданных параметров (встроенных в запрос) будет отображать правильную информацию.

Если я полностью пропустил суть вашего вопроса, не стесняйтесь удалить этот ответ.

Редактировать: В любом случае вам придется встраивать свои значения в запрос.

1 голос
/ 13 марта 2009

У вас может быть сервлет, который вызывает JSP, открыв URLConnection и затем считав в выводе временный файл или буфер. Это тогда застегнуло бы это и выписало бы почтовый индекс.

0 голосов
/ 14 марта 2009

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

0 голосов
/ 13 марта 2009

Почему бы не использовать wget? Вы можете загрузить страницы в реальный контейнер, а затем извлечь сгенерированные страницы из контейнера с помощью wget.

--input-file=FILE read URLs from file.

Использование этой опции в wget возьмет список URL-адресов из файла и загрузит их для вас так же, как текст будет отображаться в view-src браузера.

Также доступен wget для Windows и Linux.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...