Как импортировать API javax.servlet в мой проект Eclipse?

320

Я хочу разрабатывать с сервлетами в Eclipse, но он говорит, что пакет javax.servletне может быть решен. Как я могу добавить javax.servletпакет в свой проект Eclipse?

Том
источник
я пытаюсь запустить простой привет сервлет типа слова, обычно, если я хочу сделать графический интерфейс, я бы импортировал Java ...... Swing. *; я не могу найти правильный импорт для сервлета
Том

Ответы:

415

Убедитесь, что вы правильно выбрали Eclipse и Server

Убедитесь, что вы используете хотя бы Eclipse IDE для разработчиков Enterprise Java (вместе с Enterprise ). Он содержит инструменты разработки для создания динамических веб-проектов и простой интеграции контейнеров сервлетов (эти инструменты являются частью Web Tools Platform, WTP). Если у вас уже была Eclipse IDE для Java (без Enterprise) и вы вручную установили некоторые связанные плагины, то есть вероятность, что это было сделано неправильно. Лучше всего отказаться от него и взять настоящую Eclipse IDE для Enterprise Java.

Вам также необходимо убедиться, что на вашем компьютере уже установлен контейнер сервлетов, который реализует по крайней мере ту же версию API сервлетов, что и контейнер сервлетов в производственной среде, например Apache Tomcat , Oracle GlassFish , JBoss AS / WildFly и т. Д. Обычно просто скачать ZIP-файл и распаковать его достаточно. В случае Tomcat не загружайте формат EXE, это только для производственных сред на базе Windows. См. Также ao Несколько портов (8005, 8080, 8009), необходимых для сервера Tomcat на локальном хосте, уже используются .

Контейнер сервлетов - это конкретная реализация API сервлетов. Обратите внимание, что загрузка Java EE SDK на Oracle.com в основном содержит GlassFish. Так что, если вы уже скачали Java EE SDK, у вас уже есть GlassFish. Также обратите внимание, что, например, GlassFish и JBoss AS / WildFly - это больше, чем просто контейнер сервлетов, они также поддерживают JSF, EJB, JPA и все другие возможности Java EE. Смотрите также ao Что такое Java EE?


Интегрировать сервер в Eclipse и связать его с Project

После того, как вы установили Eclipse для Enterprise Java и сервлет-контейнер на свою машину, выполните в Eclipse следующие шаги:

  1. Интегрировать сервлетконтейнер в Eclipse

    а. Через серверы

    • Откройте представление « Серверы» в нижней части окна.

    • Щелкните правой кнопкой мыши там и выберите New> Server .

    • Выберите подходящую марку и версию сервлет-контейнера и пройдите мастер.

      введите описание изображения здесь

    б. Или через настройки Eclipse

    • Откройте « Окно»> «Установки»> «Сервер»> «Среды выполнения» .

    • Вы можете добавлять , редактировать и удалять серверы здесь.

      введите описание изображения здесь

  2. Ассоциировать сервер с проектом

    а. В новом проекте

    • Откройте Project Navigator / Explorer на левой стороне.

    • Щелкните правой кнопкой мыши там и выберите New> Project, а затем в меню Web> Dynamic Web Project .

    • В мастере установите Target Runtime для встроенного сервера.

      введите описание изображения здесь

    б. Или в существующем проекте

    • Щелкните правой кнопкой мыши проект и выберите « Свойства» .

    • В разделе « Целевые среды выполнения » выберите интегрированный сервер.

      введите описание изображения здесь

    В любом случае, Eclipse автоматически примет библиотеки контейнеров сервлетов в пути сборки. Таким образом, вы сможете импортировать и использовать Servlet API.


Никогда не носите с собой свободные JAR-файлы, специфичные для сервера

В любом случае вам не нужно возиться в свойстве Build Path проекта. Вы должны прежде всего никогда не вручную копировать / загрузить / перемещать / включать отдельные servletcontainer-специфичные библиотеки servlet-api.jar, jsp-api.jar, el-api.jar, j2ee.jar, javaee.jarи т.д. Это только приведет к будущей мобильности, совместимости, путь к классам и ремонтопригодности неприятностей, потому что ваш веб - приложение не будет работать , когда это развернут в контейнер сервлетов другой марки / версии, чем те, из которых эти библиотеки были изначально получены.

В случае, если вы используете Maven, вам необходимо убедиться, что библиотеки, зависящие от servletcontainer, которые уже предоставлены целевой средой выполнения, помечены как <scope>provided</scope>.

Вот несколько типичных исключений, которые вы можете получить, когда мусор /WEB-INF/libили даже /JRE/lib, /JRE/lib/extи т. Д. С библиотеками servletcontainer для небрежной попытки исправить ошибки компиляции:

BalusC
источник
4
@BalusC Если я использую Apache Ant для создания своего проекта, как мне динамически включить папку /lib(servlet-api.jar & jsp-api.jar) контейнера сервлета? Или мне нужно жестко <property name="tomcat.home" value="D:\\Program Files\\Apache Software Foundation\\apache-tomcat-6.0.36"/>
прописать
1
@BalusC, почему проекты maven создаются с использованием архетипа, maven-archetype-webappне включая JAR-файл servlet-api в качестве зависимости? В проекте есть index.jsp с ошибкой компиляции. (Eclipse Luna Build id: 20140612-0600, JDK 8, M2eclipse)
Арун,
1
@arun servlet-apiзависимости предоставляются средами выполнения Servlet, такими как Tomcat, Wildfly, Glassfish и т. д.,. Никогда не включайте его как часть вашего приложения, так как есть большая вероятность того, что оно вступит в конфликт с окружающей средой.
просит
@BalusC, 1) Является ли javax.servlet-api-3.1.0.jar равным tomcat8 / lib / servlet-api.jar? Я декомпилирую две банки, а затем нахожу, что большинство классов / интерфейсов одинаковы. 2) Является ли javax.servlet-api-3.1.0.jar контейнерно-нейтральным (не для библиотек servletcontainer)?
gfan
@gfan: техническая проблема не в том, являются ли библиотеки, предоставляемые контейнером, «нейтральными по отношению к контейнеру», а в приоритетах и ​​порядке загрузки классов. Если предоставляемые контейнером библиотеки загружаются неправильным загрузчиком классов (например, через загрузчик классов webapp), все может пойти не так, даже если это «совпадение» точно такой же версии. Только не предоставляйте предоставляемые контейнером библиотеки из дублирующих мест вне контейнера. Период.
BalusC
220

импорт javax.servlet

ШАГ 1

Перейти к свойствам вашего проекта (с Alt+ Enterили правой кнопкой мыши)

ШАГ 2

проверьте Apache Tomcat v7.0 под Targeted Runtime, и он работает.

prayagupd
источник
2
Помог мне добавить мою среду выполнения JBOSS. Мой список был пуст.
пролет
2
Это было решением для меня. Я установил tomcat 6.0 в качестве среды развертывания (в качестве сервера в затмении), но не учел указывать его в качестве среды выполнения ... Я предполагаю, что это означает, что он может найти .jars в моей папке tomcat / lib во время выполнения, но не во время компиляции.
Paul
Спасибо! Но как я могу удалить копии серверов мю? У меня есть Apache Tomcat v7.0 (2) и (3), которые я хочу удалить. Кто-нибудь знает как?
Роббен
Не помогло мне решить проблему с The import javax.servlet cannot be resolved.
mrgloom
1
Это работает! Спасибо, @mrgloom, вы можете удалить сервер и создать новый сервер на вашем локальном
Фредди Фабрегас
81

Немного отличия от Хари:

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

ivanLam
источник
3
Привет ivanLam, Apache Tomcat не отображается после запуска сервера? Что делать сейчас!
Сандип Паттанаик
15

Включите servlet-api.jar из папки lib вашего сервера.введите описание изображения здесь

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

введите описание изображения здесь

Сарат
источник
1
Решение не работает для меня, все еще получая ошибку ниже. Дочерний контейнер не был запущен во время запуска вестник]]
Майя
13

Добавьте зависимость javax.servlet в pom.xml. Ваша проблема будет решена.

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>
</dependency>
Зеешан Ахтер
источник
12

Быстрое исправление - Это работало в Eclipse - Правый клик по проекту -> Свойства -> Путь сборки Java (вкладка) -> Добавить внешние JAR -> найти реализацию api jar сервлета (если Tomcat - его имя servlet-api.jar) -> нажмите ОК Это оно !!

Хари Гудигундла
источник
14
Что касается выше BalusC поста никогда не вручную копировать / загрузки / перемещение / включать отдельные servletcontainer-специальные библиотеки , такие как servlet-api.jar, jsp-api.jar, el-api.jaг, j2ee.jar, javaee.jarи т.д. Это привело бы только к будущей мобильности, совместимости и ремонтопригодности классам проблемам.
Аникет Кулькарни,
5

Вы можете просто скопировать servlet-api.jarи скопировать эти файлы jar в папку lib, которая находится в WEB-INF. тогда просто почистите и постройте свой проект, ваши ошибки будут решены.

  **OR**

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

  1. Щелкните правой кнопкой мыши на проекте.
  2. Перейти к свойствам.
  3. Перейти к Java Build Path.
  4. Выберите опцию Добавить библиотеку на вкладках.
  5. Добавить файлы Jar
  6. укажите путь к вашему servlet-api.jarфайлу.
  7. Очистите и постройте свой проект.
Митул Махешвари
источник
Downvoting, со ссылкой выше пост BalusC и Aniket Кулкарни комментарий, никогда не вручную копировать / загрузить / перемещать / включать отдельные servletcontainer-специальные библиотеки , такие как servlet-api.jar, jsp-api.jar, javaee.jarи т.д. Это приведет лишь к будущей переносимости, совместимости, и путь к классам ремонтопригодности неприятностей.
Эль-Тиди
5

Я знаю, что это старый пост. Тем не менее, я наблюдал еще один случай, когда в проект уже добавлен Tomcat, но мы все еще получаем эту ошибку. Сделал это, чтобы решить, что:
Alt + Enter
Facets Project
Справа, рядом с деталями, находится еще одна вкладка «Runtime». Установленный сервер Tomcat будет указан там. Выберите это.
Сохраните конфигурацию и СДЕЛАНО!

Надеюсь, это кому-нибудь поможет.

ПКН
источник
3

Из википедии .

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloWorld extends HttpServlet {
  public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    PrintWriter out = response.getWriter();
    out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " +
                "Transitional//EN\">\n" +
                "<html>\n" +
                "<head><title>Hello WWW</title></head>\n" +
                "<body>\n" +
                "<h1>Hello WWW</h1>\n" +
                "</body></html>");
  }
}

Это, конечно, работает, только если вы добавили servlet-api.jarпуть сборки Eclipse. Обычно ваш сервер приложений (например, Tomcat ) будет иметь правильный файл JAR.

Юха Сыряля
источник
3

Для проектов Maven добавить следующую зависимость:

<!-- https://mvnrepository.com/artifact/javax.servlet/servlet-api -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>
</dependency>

Ссылка

Для gradle проектов:

dependencies {
providedCompile group: 'javax.servlet', name: 'javax.servlet-api', version: '3.0.1'
}

или скачайте javax.servlet.jarи добавьте в свой проект.

Джоби Уилсон Мэтьюз
источник
2

Я получаю исключение нулевого указателя при создании проекта, связанного с «Динамическим веб-модулем».

Чтобы получить проект для компиляции (то есть, чтобы javax.servletуспешно импортировать), мне нужно было перейти в « Свойства проекта» , выбрать « Фасеты проекта» на боковой панели, отметить « Динамический веб-модуль» и нажать « Применить» .

Удивительно, но на этот раз фасет «Динамический веб-модуль» был установлен правильно, и импорт начал работать.

Иван Вучица
источник
2

В моем случае, когда я перешел на экран Targetted Runtimes , Tomcat 7 не был указан (отключен), несмотря на то, что был установлен.

Чтобы исправить это, мне нужно было перейти в « Настройки» -> «Сервер» - «Среда выполнения», затем удалить и переустановить Tomcat 7.

Пол ЛеБо
источник
2

Многие из нас развиваются в Eclipse через проект Maven. Если это так, вы можете включить зависимости Tomcat в Maven через jar tomcat-servlet-apiи tomcat-jsp-api. Один существует для каждой версии Tomcat. Обычно достаточно добавить их в область видимости providedвашего POM. Это сделает вашу сборку более переносимой.

Если вы обновите Tomcat в будущем, вы также просто обновите версию этих jar-файлов.

Эрика Кейн
источник
0

Прежде всего, вы никогда не должны вручную копировать / загружать / перемещать / включать отдельные библиотеки для servletcontainer, такие как servlet-api.jar

@BalusC,

Я бы предпочел использовать именно те классы, которые будет использовать мое приложение, а не класс, предоставленный Eclipse (когда я чувствую себя параноидальным разработчиком).

Другое решение состоит в том, чтобы использовать Eclipse «Configure Build Path»> Libraries> Add External Jars и добавить api сервлетов для любого контейнера, который вы выберете.

И следуйте решению @kaustav datta при использовании ant для сборки - имейте свойство как tomcat.home или weblogic.home. Однако это вводит другое ограничение, что разработчик должен установить Weblogic на свой локальный компьютер, если он используется! Любое другое чистое решение?

RuntimeException
источник
0

Это может быть также причиной. Я придумал следующее pom.xml.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>

Нерешенная проблема была из-за исключения spring-boot-starter-tomcat. Просто удалите <exclusions>...</exclusions>зависимость, это решит проблему, но убедитесь, что это также исключит встроенный сервер Tomcat.

Если вам нужен встроенный сервер Tomcat, вы можете добавить ту же зависимость с compile scope.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>compile</scope>
</dependency>
Мухаммед Усман
источник