Выполните JSP непосредственно от Java

func scrollToTop() {
        NSIndexPath *topItem = [NSIndexPath indexPathForItem:0 inSection:0];
        [tableView scrollToRowAtIndexPath:topItem atScrollPosition:UITableViewScrollPositionTop animated:YES];
}

вызывайте эту функцию везде, где вы хотите, чтобы UITableView прокручивал вверх

.
19
задан 2 July 2009 в 18:01
поделиться

4 ответа

Вам понадобится контейнер. JSP - это абстракция сервлета. Сервлеты зависят от жизненного цикла, обеспечиваемого контейнером. Контейнер необходим для обеспечения жизненного цикла.

4
ответ дан 30 November 2019 в 04:37
поделиться

Если вам нужно записать вывод JSP в виде строки, это достаточно просто (хотя и далеко от идеала с точки зрения дизайна) из в Контейнер сервлетов:
1. Расширьте javax.servlet.HttpServletResponseWrapper и переопределите методы getWriter () / getOutputStream () для предоставления ваших собственных буферизованных версий (например, StringWriter)
2. Вызвать метод include () объекта RequestDisparcher, заключив исходный ответ в свой собственный.
3. Захватите содержимое буфера.

Теперь, если вам нужно сделать то же самое вне контейнера сервлетов, вам действительно нужно спросить себя: «Почему?». Возможно, вам следует использовать механизм шаблонов (FreeMarker / Velocity / StringTemplate / и т. Д.) Вместо JSP? Если ваши JSP представляют собой правильно сформированные файлы XML и не используют вставки кода Java, может быть достаточно тривиально преобразовать их в шаблоны FreeMarker (FreeMarker поддерживает пользовательские библиотеки тегов JSP), что значительно упростит вашу задачу.

Тем не менее, если это абсолютно жесткое требование, наиболее простые варианты:
1. Запустите внешний контейнер сервлетов и позвольте ему обработать интерпретацию JSP. Ваша программа будет отправлять ему HTTP-запросы и фиксировать результат.
2. То же, что и выше, но вы можете запустить встроенный контейнер сервлетов (например, Jetty).

Если ваши JSP доступны во время сборки, вы можете предварительно скомпилировать их через Jasper, как предлагается в других ответах.

Я бы настоятельно посоветовал не пытаться реализовать собственный контейнер сервлетов - вы попадете в мир боли.

19
ответ дан 30 November 2019 в 04:37
поделиться

Это возможно без контейнера сервлета. Для этого нужно сделать два шага.

Первый - это создание исходного кода. Если вы посмотрите исходный код задачи jspc ant, это можно сделать прямо в коде. Или вы можете просто вызвать задачу муравья.

Сгенерированный код - это просто сервлет, и можно вызывать методы на сервлете вне контейнера:

Просто создайте его экземпляр и затем вызовите doGet (request, ответ). Я не совсем уверен, для чего вам это нужно, но ваша жизнь станет проще, если использовать Spring mock-объекты для HTTP-запроса и ответа.

Это заполнит объект Response. затем вы можете получить результат с помощью:

res.getContentAsString();

См. пример здесь:

http://ytreyvus.blogspot.com/2007/03/private-void-cloneplaneffectrelationshi.html

0
ответ дан 30 November 2019 в 04:37
поделиться

Попробуйте MockRunner , чтобы запустить его. Однако сначала вам нужно скомпилировать JSP. Я использую для этого Maven 2 (и плагин JSP Compiler )

0
ответ дан 30 November 2019 в 04:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: