Несмотря на ваше утверждение, ServletContext
из вашего servlet-api-2.5.jar не может иметь рассматриваемый метод, если он действительно содержит спецификацию сервлета 2.5, как предлагается в имени файла.
ServletContext.getClassLoader
была введена в версии 3.0 спецификации сервлета:
/**
* Get the web application class loader associated with this ServletContext.
*
* @return The associated web application class loader
*
* @throws UnsupportedOperationException If called from a
* {@link ServletContextListener#contextInitialized(ServletContextEvent)}
* method of a {@link ServletContextListener} that was not defined in a
* web.xml file, a web-fragment.xml file nor annotated with
* {@link javax.servlet.annotation.WebListener}. For example, a
* {@link ServletContextListener} defined in a TLD would not be able to
* use this method.
* @throws SecurityException if access to the class loader is prevented by a
* SecurityManager
* @since Servlet 3.0
*/
public ClassLoader getClassLoader();
Поскольку Apache Tomcat 9 реализует Servlet 4.0 , вы не должны загрязнять путь к классам различными версиями API сервлета.
Tomcat уже поставляется с правильным servlet-api.jar
, указанным в каталоге apache-tomcat/lib
.Вы не должны добавлять какую-либо версию этого фляги в свое веб-приложение.Если вы используете maven, вы можете добавить ссылку на api сервлета 4 в области действия provided
, поэтому ваша IDE и инструмент сборки knwo будут доступны во время выполнения, но не должны поставляться с вашими артефактами:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
или в качестве альтернативы для точного соответствия выбранной версии Apache Tomcat:
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-servlet-api</artifactId>
<version>9.0.12</version>
<scope>provided</scope>
</dependency>