it-swarm.com.ru

банка не загружена. См. 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, но это не сработало. Дайте мне знать, что должно быть сделано в моем случае.

96
dreambigcoder

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

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

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

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

В спецификациях Servlet сказано, что вам не разрешено иметь servlet.jar в каталоге 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, поскольку контейнер уже предоставил jar сервлета сам по себе.

21
Lucky

Чтобы исправить это, установите scope в условии. Это говорит 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
Sandeep Kumar

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

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

Maven Dependency Scope

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

2
yuceel

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

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

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

1
iaforek

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

1
Fred Ondieki

Исключения и зависимости 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>
0
lmiguelmh

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

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 уже имеет встроенную версию этого jar, поэтому он не будет использовать ваш. Как правило, это не вызывает проблемы.

Однако, если он говорит WEB-INF/lib/my_jar.jar - jar not loaded...Offending class: javax/servlet/Servlet.class

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

$ mvn зависимость: дерево

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

 <dependency>
    ...
    <exclusions>
      <exclusion>
        <groupId>org.Apache.Tomcat</groupId>
        <artifactId>Tomcat-servlet</artifactId>
      </exclusion>
    </exclusions> 
</dependency>
0
rogerdpack

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

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

0
Phyo Thinza

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

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

0
Faiz