Стрелка Alt-Up перемещает текущий выбор строка, Стрелка Alt-Down спускает его. Я также использую Стрелку Alt-Shift-Up/Down все время. Ctrl-K и Ctrl-Shift-K довольно удобны, находя следующее/предыдущее возникновение текущего выбора (или последняя Находка, если ничто не выбрано).
Мне нужна страница JSP для программного рендеринга.
Каковы все же функциональные требования? Вы явно ищете решение в неправильном направлении. Что это, проблема / требование, для которой вы думаете, что это решение? Мы можем предложить лучшие предложения.
Вам, например, нужен только его вывод ? Если это так, то java.net.URLConnection
может быть достаточно.
Редактировать : вы редактировали свой вопрос:
Я хочу каким-то образом изменить исходный JSP перед компиляцией (точнее, объединить два JSP вместе), поэтому мне нужен способ скомпилировать результат JSP из InputStream (или Reader) напрямую с помощью компилятора JSP.
Хорошо, это бит более понятен. Но зачем вам это нужно? Что на самом деле представляют собой эти JSP? Для чего предполагается использовать конечный результат?
Вы, например, просто хотите включить один JSP в другой? Например, включение head.jsp
в main.jsp
? Если да, то
может быть достаточно. Или, что еще хуже, содержат ли они необработанный код Java с каким-то конкретным кодом, который вы хотели использовать повторно? Если это так, то вы должны использовать для этого простые классы Java и, если необходимо, библиотеки тегов.
Редактировать 2 : как вы прокомментировали:
Но теперь нам нужен способ использовать эти страницы JSP (которые хранятся в память между прочим) в качестве макетов для всех страниц JSP, запрашиваемых пользователем
Просто сохраните файлы JSP в файловой системе диска внутри webapp '
Возможно, вы могли бы использовать задачу Tomcat JspC ant ?
JSTL - это просто библиотека тегов, используемых внутри файлов JSP.
По какой причине вы должны это делать? Если вам нужно объединить 2 файла jsp для обработки, можно использовать include Или вам нужны другие идеи? Не могли бы вы дать образец по вашему запросу?
Если JSP уже был предварительно скомпилирован сервером приложений, вы можете найти сгенерированный файл .class. В Tomcat это должно быть в каталоге $ CONTEXT_ROOT / org / apache / jsp /. Возможно, вам удастся каким-то образом запустить этот класс и сгенерировать свой вывод.
РЕДАКТИРОВАТЬ: Пропущено ваше изменение об изменении источника JSP.
Взгляните на org.apache.jasper.compiler.AntCompiler (включен в jasper.jar в Tomcat). Существует защищенный метод под названием generateClass, который вы можете переопределить и использовать:)
Я не совсем уверен, что это именно то, что вы ищете, но структура DWR содержит метод под названием WebContext.forwardToString
, который пересылает текущий запрос плюс объект поддельного ответа на URL-адрес, а затем считывает содержимое буфера в память. Вот пример кода:
StringWriter sout = new StringWriter();
StringBuffer buffer = sout.getBuffer();
HttpServletResponse realResponse = getHttpServletResponse();
HttpServletResponse fakeResponse = new SwallowingHttpServletResponse(realResponse, sout, realResponse.getCharacterEncoding());
HttpServletRequest realRequest = getHttpServletRequest();
realRequest.setAttribute(WebContext.ATTRIBUTE_DWR, Boolean.TRUE);
getServletContext().getRequestDispatcher(url).forward(realRequest, fakeResponse);
return buffer.toString();
Вы можете использовать это, чтобы получить результаты rednering jsp и сохранить их в памяти. Вы можете скачать исходный код по указанной выше ссылке, чтобы увидеть, как работает SwallowingHttpServletResponse.