2010-01-11 2 views
1

В jsp/java, как вы можете вызвать страницу, которая выводит xml-файл в результате и сохранять его результат (xml-тип) в xml-файл на сервере. Оба файла (файл, который создает xml и файл, который мы хотим сохранить/перезаписать), находятся на одном сервере.Как сохранить содержимое вызова страницы в файл в jsp/java?

В основном я хочу, чтобы обновить свой test.xml каждый сейчас и потом, вызвав generate.jsp, который выводит результат типа XML.

спасибо.

ответ

2

Если запрос является тождественной, то просто использовать java.net.URL, чтобы получить InputStream в JSP вывод. Например.

InputStream input = new URL("http://example.com/context/page.jsp").openStream(); 

Если запрос не идемпотентен, то вам необходимо заменить PrintWriter ответ с пользовательской реализацией, которая копирует вывод в некоторый буфере/строитель. Я привел здесь пример кода: Capture generated dynamic content at server side

После того, как вы сделали вывод, просто напишите на диск обычный путь java.io, предполагая, что JSP уже находятся в формате XHTML.

+0

Что вы подразумеваете под «idempotent»? Также мне нужно использовать полный адрес в URL-адресе или я могу просто использовать «URL («/xml/generate.jsp »)»? – Zoheir

+0

idempotent = всегда тот же результат при вызове процедуры. В терминах HTTP это работает GET. Отправка одного URL-адреса всегда дает тот же результат. Это не относится к POST, поскольку вход/выход не контролируется только URL-адресом. И да, конечно, вам нужен полный адрес. В противном случае он не знал бы, где его найти. Однако вы можете построить его динамически на основе методов, предоставляемых 'HttpServletRequest'. – BalusC

+0

Спасибо, мне кажется, он ответил на мой вопрос. Хотя я не смог записать его в файл, поэтому я не знаю, действительно ли он считывал данные из InputStream. Еще раз спасибо. – Zoheir

1

Почему бы вам не использовать настоящий движок для шаблонов, как FreeMarker? Это было бы проще.

2
  1. Зарегистрировать фильтр, который добавит обертку к вашему отклику. То есть, он возвращает в цепочку новые объекты HttpServletResponse, расширяя оригинал HttpServletResponse и возвращая ваши собственные OutputStream и PrintWriter вместо оригинальных.
  2. Ваш OutputStream и PrintWriter называет оригинальный OutputStream и PrintWriter, но и записать в файл (с помощью нового FileOutputStream)
Смежные вопросы