Как разобрать страницу JSP и получить результат в виде строки? - PullRequest
2 голосов
/ 18 октября 2011

У меня есть FrontController, который возвращает представление в самодельной среде REST. У меня есть некоторые XmlRepresentation, JsonRepresentation, и я хотел бы сейчас JspRepresentation. UserJspRepresentation может быть примером страницы или фрагмента, который представляет пользователя. Тогда Jsp будет шаблоном, который может использовать

Я мог бы сделать кое-что вперед / включить, но я бы хотел что-то более изолированное и получить результат как объект. Метод forward () возвращает void.

Что-то вроде:

HttpServletRequest request = getHttpServletRequest();
User user = getUser();
request.setAttribute("user", user); // The Jsp will be aware of the user
JspRepresentation representation = new JspRepresentation(request, "userPage.jsp");
String result = representation.toString();// this is hard to get the displayed page !!!

Вопрос в том, как получить страницу Jsp в виде объекта String?

Пока я могу рассмотреть только использование java-клиента, который не является легковесным ... Я также посмотрел в API Jasper, но не нашел ничего ясного.

1 Ответ

1 голос
/ 18 октября 2011

Вы не можете. JSP не является движком шаблонов. Это просто технология просмотра. Вы ищете шаблонизатор, такой как Velocity , Freemarker , Sitemesh и т. Д.

Лучшее, что вы можете сделать с JSP, - это самостоятельно отправить полноценный HTTP-запрос на конкретный URL.

InputStream input = new URL("http://localhost:8080/context/userPage.jsp").openStream();
// ...

Вы не можете передать ему только атрибуты запроса. Однако вы можете поместить его в сеанс и позволить JSP получить его оттуда. Вам нужно только отправить JSESSIONID cookie вместе с:

URLConnection connection = new URL("http://localhost:8080/context/userPage.jsp").openConnection();
connection.setRequestProperty("Cookie", "JSESSIONID=" + session.getId());
InputStream input = connection.getInputStream();
// ...

В качестве альтернативы, вы также можете просто перенаправить запрос в JSP «обычным способом» вместо того, чтобы получать его HTML-вывод в виде String и записать его в ответ самостоятельно. Таким образом, JSP будет выполнять свою работу по генерации HTML на основе текущего запроса и отправке его в ответ без необходимости собирать этот HTML и писать в ответ самостоятельно.

request.getRequestDispatcher("/WEB-INF/userPage.jsp").forward(request, response);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...