Jar не загружен. См. Раздел Servlet Spec 2.3, раздел 9.7.2. Класс нарушения: javax/servlet/Servlet.class

Я запускаю проект Maven, который также является динамичным веб-проектом. Я использовал все библиотеки spring в maven. Я создал web.xml, но когда я запускаю свой tomcat 7-сервер, я получаю следующее сообщение:

INFO: validateJarFile(C:\Users\mibvzd0\workspace\.metadata\.plugins\
org.eclipse.wst.server.core\tmp2\wtpwebapps\hapi_hl7\WEB-INF\lib\
servlet-api-2.4.jar) - jar not loaded.
See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class

Я попытался удалить сервлет из webapp/lib, но это не сработало. Позвольте мне знать, что должно быть сделано в моем случае.

Ответ 1

Файл .jar API сервлета не должен быть встроен в webapp, поскольку, очевидно, контейнер уже имеет эти классы в своем пути к классам: он реализует интерфейсы, содержащиеся в этой банке.

Зависимость должна находиться в области provided, а не в области по умолчанию compile, в вашем Maven pom:

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>

Ответ 2

Вы получите это предупреждающее сообщение, когда файл api jar сервлета уже загружен в контейнер, и вы попытаетесь загрузить его еще раз из каталога lib.

В спецификациях Servlet вам не разрешено иметь servlet.jar в ваш каталог webapps lib.

  • Избавьтесь от предупреждения, просто удалив servlet.jar из каталога lib.
  • Если вы не найдете банку в сканировании каталога lib для своего пути сборки и удалите банку.

C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\project\WEB-INF\lib

Если вы выполняете проект maven, измените зависимость javax.servlet-api на область provided в pom.xml, поскольку контейнер уже предоставил сам ящик сервлета.

Ответ 3

Чтобы исправить это, установите область . Это говорит Maven использовать код servlet-api.jar только для компиляции и тестирования, но НЕ включать его в WAR файл. Развернутый контейнер будет "предоставлять" servlet-api.jar во время выполнения.

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.5</version>
    <scope>provided</scope>
</dependency>

Ответ 4

Вы можете найти следующую командную строку Windows, полезную для отслеживания файла-нарушителя. он создает индекс всех файлов классов во всех баночках в папке. Выполните из папки lib вашего развернутого приложения, затем выполните поиск в файле index.txt для класса-нарушителя.

for /r %X in (*.jar) do (echo %X & jar -tf %X) >> index.txt

Ответ 5

Maven Dependency Scope

. Это очень похоже на компиляцию, но указывает, что ожидать JDK или контейнер для предоставления зависимость во время выполнения. Например, при создании веб-приложения для Java Enterprise Edition вы будет устанавливать зависимость от API сервлета и связанных с ним API Java EE для области при условии, поскольку веб-контейнер предоставляет эти классы. Эта область видимости доступна только на пути компиляции и тестирования, и не является транзитивным.

Ответ 6

Проверьте в следующей директории файл jar el-api.jar: C:\apache-tomcat-7.0.39\lib\el-api.jar, если он существует, тогда в этом каталоге вашего веб-приложения WEB-INF\lib\el-api.jar следует удалить банку

Ответ 7

Я боролся с этой проблемой, и я пробовал множество "решений".

Однако, в конце концов, единственный, который работал, и это заняло всего несколько секунд, это: удалить и добавить новый экземпляр сервера!

В принципе, я щелкнул правой кнопкой мыши мой сервер Tomcat в Eclipse под серверами и удалил его. Затем я добавил новый сервер Tomcat. Убрал и переустановил приложение, и я избавился от этой ошибки.

Ответ 8

когда ваш шаблон URL неверен, эта ошибка может возникнуть.

например. Если вы написали @WebServlet ( "login" ), эта ошибка будет показана. Правильным является @WebServlet ( "/login" ).

Ответ 9

Исключения и provided зависимости не будут работать в дочерних проектах.

Если вы используете наследование в проектах Maven, вы должны включить эту конфигурацию в родительский pom.xml файл. У вас будет раздел <parent>...</parent> в вашем pom.xml, если вы используете наследование. Таким образом, у вас будет что-то подобное в вашем родителе pom.xml:

<groupId>some.groupId</groupId>
<version>1.0</version>
<artifactId>someArtifactId</artifactId>
<packaging>pom</packaging>
<modules>
    <module>child-module-1</module>
    <module>child-module-2</module>
</modules>
<dependencies>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>jsp-api</artifactId>
        <version>2.1</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

Ответ 10

Библиотека зависимостей JAX-WS "jaxws-rt.jar" отсутствует.

Перейдите сюда http://jax-ws.java.net/. Загрузите дистрибутив JAX-WS RI. Разархивируйте его и скопируйте "jaxws-rt.jar" в папку библиотеки Tomcat "{$ TOMCAT}/lib". Перезапустите Tomcat.

Ответ 11

Обычно, когда вы видите это сообщение, оно доброкачественное. Если он говорит

INFO: validateJarFile(/<webapp>/WEB-INF/lib/servlet-api-2.5.jar) - jar not loaded. 
See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class

Это означает, что он игнорирует ваш servlet-api-2.5.jar, потому что tomcat уже имеет встроенную версию этой банки, поэтому он не будет использовать ваш. Обычно это не вызывает проблемы.

Если, однако, сказано WEB-INF/lib/my_jar.jar - jar not loaded...Offending class: javax/servlet/Servlet.class

то что вы можете сделать (в моем случае, это затененная банка) выполняется

$mvn dependency: tree

и обнаружите, что у вас есть транзитивная зависимость от "чего-то", которая зависит от банки, которая является либо servlet-api, либо чем-то вроде этого (ex: tomcat-servlet-api-9.0.0). Поэтому добавьте исключение к этому вашему pom, например: (в моем случае, tomcat, в вашем случае, возможно, упомянутые в других ответах):

 <dependency>
    ...
    <exclusions>
      <exclusion>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>tomcat-servlet</artifactId>
      </exclusion>
    </exclusions> 
</dependency>

Ответ 12

Удалите servlet.jar из исходной папки web-inf/lib, поскольку она доступна в папке tomcat lib, тогда она отлично работает