Реализация JSP (Jasper) и поддержка прокси#
Реализация JSP#
Tomcat использует JSP engine 2 (Jasper 2) для реализации механизма Jakarta pages версии 4.0.
Jasper 2 обладает более высокой производительностью по сравнению с Jasper и имеет следующие отличия:
Объединение пользовательских тегов JSP в пул — объекты Java, созданные для пользовательских тегов JSP, можно объединять в пул и использовать повторно. Это значительно повышает производительность страниц JSP, использующих пользовательские теги.
Фоновая компиляция JSP-страниц — при изменении уже скомпилированных JSP-страниц, Jasper 2 может перекомпилировать данную страницу в фоновом режиме. Ранее скомпилированная JSP-страница по-прежнему будет доступна для обработки запросов. После успешной компиляции новой страницы она заменит старую. Это помогает повысить доступность JSP-страниц на рабочем сервере.
Перекомпиляция JSP при изменении включенной страницы — Jasper 2 может определять, когда страница, включенная во время компиляции из JSP, изменилась, и перекомпилировать родительский JSP.
Для компиляции страниц JSP используется JDT (Java Eclipse JDT) – в Jasper 2 JDT используется для компиляции исходного кода JSP. Данный компилятор загружает исходные зависимости из загрузчика классов контейнера. Использование
Antиjavacостается доступным.
Поддержка прокси#
При использовании стандартных конфигураций Tomcat веб-приложения могут запрашивать имя сервера и номер порта, на который был направлен запрос для обработки. Когда Tomcat работает автономно с HTTP/1.1 Connector. Он сообщает имя сервера, указанное в запросе, и номер порта, на котором Connector ожидает подключения. Для данной цели используются следующие методы API сервлетов:
ServletRequest.getServerName()- возвращает имя хоста сервера, на который был отправлен запрос;ServletRequest.getServerPort()- возвращает номер порта сервера, на который был отправлен запрос;ServletRequest.getLocalName()- возвращает имя хоста интерфейса IP, на который был получен запрос;ServletRequest.getLocalPort()- возвращает номер порта интерфейса IP, на который был получен запрос.
Когда Tomcat работает вместе с прокси-сервером (или веб-сервером, настроенным как прокси-сервер), иногда требуется управлять значениями, возвращаемыми методами, указанными выше. Номер порта в данном случае должен отражать значение, указанное в исходном запросе, а не то, на котором Connector ожидает подключения. Для настройки значений можно использовать атрибуты proxyName и proxyPort в элементе Connector.
Когда запросы проксируются через Tomcat, веб-сервер будет записывать их в свой журнал доступа. При проксировании данным образом все запросы к настроенным веб-приложениям будет обрабатывать Tomcat (включая запросы статического контента). Для повышения производительности можно использовать веб-коннектор mod_jk вместо mod_proxy. mod_jk настраивается так, чтобы веб-сервер обслуживал статический контент, не обрабатываемый фильтрами или ограничениями безопасности, определенными в дескрипторе развертывания веб-приложения (/WEB-INF/web.xml).