Суперкласс «javax.servlet.http.HttpServlet» не найден в пути сборки Java

323

У меня есть проект, созданный интеграцией Maven в Eclipse. Все работает нормально, но в рабочем пространстве во всех файлах JSP есть следующее:

The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path

В первую строку, где место:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

Когда я создаю базовый динамический веб-проект и JSP - все в порядке, никаких ошибок.

  • 1
    Вам нужно добавить библиотеку в путь сборки. mkyong.com/maven/...
  • 8
    вы могли пропустить зависимость javax.servlet-api в pom.xml
Показать ещё 5 комментариев
Теги:
maven
jsp
web

15 ответов

495

Сначала добавьте среду выполнения и выберите свойства проекта. Затем проверьте имя сервера на вкладке "Runtimes", как показано на рисунке.

Изображение 6713

  • 9
    Можете ли вы объяснить, почему это работает? Как связаны целевая среда выполнения и отсутствующий http-сервлет? Мне было бы очень интересно, что происходит за кулисами.
  • 24
    Эта ошибка указывает на то, что http-сервлет недоступен в пути к классам проекта, как только мы добавим в проект target-runtime, http-сервлет будет доступен в пути к классам проекта.
Показать ещё 10 комментариев
196

Включите servlet-api-3.1.jar в свои зависимости.

  • Maven

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

    configurations {
        provided
    }
    sourceSets {
        main { compileClasspath += configurations.provided }
    }
    dependencies {
        provided 'javax.servlet:javax.servlet-api:3.1.0'
    }
    
  • 9
    лучшим ответом было бы Include servlet-api-xyjar in your dependencies. Я хоть 3.0 был последним.
  • 0
    Ошибка исчезла, но на другом компьютере мне не нужно это делать.
Показать ещё 11 комментариев
88

Проект → Свойства Целевые Runtimes → Apache Tomcat работал для меня. Нет никаких целевых Runtimes под гранями (я нахожусь Eclipse   v4.2 (Juno)).

  • 2
    Это сработало для меня.
  • 1
    Почему это сработало?
Показать ещё 5 комментариев
28

Проект → Свойства → Целевые сроки выполнения → * Apache Tomcat работал для меня. Нет никаких целевых Runtimes под гранями (я нахожусь Eclipse   v4.4 (Luna)).

28

Включить сервлет-api.jar из папки вашего сервера.

Изображение 6714

Сделайте этот шаг

Изображение 6715

Что это такое?

Файл JAR сервлета-api - это библиотека, которая содержит интерфейсы и классы спецификации API сервлета. Файл JAR сервлета-api содержит только интерфейс (API) спецификации сервлета, поэтому вы можете использовать его для разработки своего веб-приложения.

Где вы можете его получить?

Он предоставляется по следующей ссылке:

http://download.oracle.com/otndocs/jcp/servlet-3.0-fr-eval-oth-JSpec/

Где он содержится/в комплекте

Servlet-api.jar является частью загрузки Java EE, поэтому вы можете создавать свои веб-приложения (вы не смогли бы скомпилировать свой класс FirstServlet, если Java EE не будет содержать его).

Контейнеры сервлетов (например, Tomcat, JBoss, GlassFish и т. д.) также содержат сервлет-api.jar, иначе они не смогут запускать ваше веб-приложение, и, кроме того, они также содержат реализацию интерфейсов, которые являются частью API сервлета.

Имя не всегда одно и то же, и оно может даже не существовать как отдельный JAR-файл, классы API сервлета могут быть связаны в другом JAR-файле.

Однако вы можете загрузить отдельный JAR-файл, содержащий только API сервлета, если вы просто хотите создать веб-приложение для контейнера Servlet или хотите создать/написать свою собственную реализацию API сервлета. Посмотрите здесь:

http://download.oracle.com/otndocs/jcp/servlet-3.0-fr-eval-oth-JSpec/

Портативность

Вы можете скомпилировать свое веб-приложение, если у вас есть API-интерфейс Servlet, независимо от того, откуда он. После того, как вы скомпилировали свое веб-приложение, вы можете по желанию упаковать его в WAR-файл (WAR = Web ARchive), который представляет собой просто ZIP-файл, содержащий ваши статические файлы, ваши скомпилированные классы Java и файлы конфигурации, такие как web.xml и т.д. И вы будете иметь возможность запускать скомпилированное веб-приложение в любых контейнерах Servlet.

23

Для проекта Ant:

Убедитесь, что у вас есть servlet-api.jar в папке lib.

Для проекта Maven:

Убедитесь, что у вас есть зависимость, добавленная в POM.xml.

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

Другой способ сделать это:: обновить фасет проекта, чтобы выбрать правильный сервер.

Установите этот флажок в этом месте:

Проект → Свойства → Целевые сроки выполнения → Apache Tomcat (любой сервер)

  • 0
    Второе предложение сработало для меня. Проект был создан, но сервер Tomcat не был отмечен в «Target Runtimes».
  • 0
    Это сработало для меня. Спасибо :)
18

Добавление сервера Tomcat в рабочую среду сервера выполнит задание:

Свойства проекта → Целевые сроки выполнения → Выберите сервер из списка "Время выполнения JBoss" → Finish

В случае Apache вы можете выбрать время выполнения Apache.

Изображение 6716

12

Просто добавьте эти зависимости в ваш файл pom.xml:

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

<dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>javax.servlet.jsp-api</artifactId>
    <version>2.2.1</version>
    <scope>provided</scope>
</dependency>
  • 1
    Зачем нам нужна вторая зависимость? Пожалуйста, удалите второй! (JSP-API).
  • 0
    никого не достаточно
9

Эти шаги могут действительно помочь вам:

  • Если вы не установили сервер, вам необходимо выполнить следующие действия:

    Меню Окно Настройки Expend Server среда выполнения → Добавить → выберите имя и затем выберите путь к серверу Apache, который вы уже установили на свой компьютер (вы можете нажать и загрузить и установить) → FinishOK

Ссылка # для получения дополнительной информации нажмите здесь

  1. Добавьте сервер Tomcat:

    Свойства проекта Путь сборки Java Добавить библиотеку → Выберите "Время выполнения сервера" из списка * → Далее em> → Выберите "Apache Tomcat" → Finish

  2. Ссылка # Этот ответ

7

Добавление сервера Tomcat в рабочую среду сервера будет выполнять следующее задание:

Свойства проекта → Путь сборки Java Добавить библиотеку Выберите "Время выполнения сервера" из списка → Далее → Выберите "Apache Tomcat" → Готово.

4

Выберите проект → Свойства Границы проекта Целевые Runtimes → Сервер VMware.

Это сработало для меня.

2

Если вы не используете Maven, просто отпустите javax.servlet-api.jar в папке проекта lib.

2

Поскольку это не отвечает, я предполагаю, что что-то другое, кроме зависимостей Maven, ошибочно связано с сборкой ops.

Пока я не использую Maven, у меня такая же проблема время от времени, когда я воссоздал свою среду разработки из svn, и я всегда забываю, почему и нужно это понять. К сожалению, похоже, это проблема с Eclipse.

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

Щелкните правой кнопкой мыши веб-проект, выберите "build Path" -> "Configure Build Path". Перейдите на вкладку "Заказ и экспорт", затем выберите библиотеку или банку и переместите ее вверх или вниз. Я использовал Системную библиотеку JRE и переместил ее вверх.

Нажмите "ОК", и все это красное исчезнет!

0

И если ничего не по какой-либо причине, постройте его из командной строки:

ant -Dj2ee.server.home=D:\apache-tomcat-8.0.23 clean

ant -Dj2ee.server.home=D:\apache-tomcat-8.0.23 compile

ant -Dj2ee.server.home=D:\apache-tomcat-8.0.23 dist
-1

В случае JBoss ... щелкните правой кнопкой мыши по проекту → Построить путь Java → добавить внешние файлы JAR.

Затем перейдите в папку jboss → Common → lib → servlet-api.jar

. , Нажмите OK, обновите проект и запустите его ...

  • 0
    Почему это только на Jboss? Пожалуйста, удалите это!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню