Tomcat: возможно ли исключить jars во время развертывания приложения?

8

По умолчанию Tomcat не позволяет веб-приложениям загружать несколько файлов .jar, которые являются частью дистрибутива Tomcat (например, сервлет и API-интерфейсы JSP). Можно ли настроить другие, которые также будут исключены?

Если это невозможно сделать только с помощью конфигурации, предоставляет ли Tomcat какие-либо точки расширения для проверки ресурса?

Я хочу использовать разделяемые библиотеки журналов и должен убедиться, что ошибочное приложение не загромождает конфигурацию.

пример

Вот что я имею в виду (из журнала запуска Tomcat):

Oct 1, 2011 5:53:40 AM org.apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(D:\tomcat\myapp\WEB-INF\lib\servlet-api.jar) - jar not loaded.
See Servlet Spec 2.3, section 9.7.2.
Offending class: javax/servlet/Servlet.class
Дмитрий
источник
Я не думаю, что tomcat Исключить любую вещь как таковую, просто вопрос последовательности загрузки классов, которая jar стоит на первом месте в classpath. Вы можете быть после этого. stackoverflow.com/questions/267953/managing-libraries-in-tomcat
@Shahzeb: я добавил пример. Дело не в том, как взаимодействуют разные загрузчики классов - я хочу иметь возможность проверять ресурсы, которые веб-приложения пытаются загрузить.
Дмитрий

Ответы:

6

Вы проверяете / фильтруете, какие веб-приложения загружаются, используя пользовательский загрузчик, начиная с org.apache.catalina.loader.WebappClassLoaderупомянутого в документации Tomcat .

Проверьте реализацию Tomcat (7.0.19) стандарта,WebAppClassLoader который реализует фильтрациюjavax.servlet.Servlet для начала. Вероятно, достаточно переопределить этот класс и просто добавить еще несколько записей в protected String[]поля triggersи packageTriggers.

Филипп Рейхарт
источник
1
Конечно, ваш пользовательский интерфейс WebappClassLoaderдолжен входить в собственный JAR- TOMCAT_HOME/libфайл вдали от ваших веб-приложений, просто чтобы заявить очевидное :)
Philipp Reichart