Как импортировать 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 сервлетов. Обратите внимание, что загрузка 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 следующие шаги:
Интегрировать сервлетконтейнер в Eclipse
а. Через серверы
Откройте представление « Серверы» в нижней части окна.
Щелкните правой кнопкой мыши там и выберите New> Server .
Выберите подходящую марку и версию сервлет-контейнера и пройдите мастер.
Вы можете добавлять , редактировать и удалять серверы здесь.
Ассоциировать сервер с проектом
а. В новом проекте
Откройте 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 Если я использую 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
ШАГ 1
Перейти к свойствам вашего проекта (с Alt+ Enterили правой кнопкой мыши)
ШАГ 2
проверьте Apache Tomcat v7.0 под Targeted Runtime, и он работает.
Помог мне добавить мою среду выполнения 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 ----> Готово.
Быстрое исправление - Это работало в Eclipse - Правый клик по проекту -> Свойства -> Путь сборки Java (вкладка) -> Добавить внешние JAR -> найти реализацию api jar сервлета (если Tomcat - его имя servlet-api.jar) -> нажмите ОК Это оно !!
Что касается выше 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 в библиотеку, используя следующие шаги.
Downvoting, со ссылкой выше пост BalusC и Aniket Кулкарни комментарий, никогда не вручную копировать / загрузить / перемещать / включать отдельные servletcontainer-специальные библиотеки , такие как servlet-api.jar, jsp-api.jar, javaee.jarи т.д. Это приведет лишь к будущей переносимости, совместимости, и путь к классам ремонтопригодности неприятностей.
Эль-Тиди
5
Я знаю, что это старый пост. Тем не менее, я наблюдал еще один случай, когда в проект уже добавлен Tomcat, но мы все еще получаем эту ошибку. Сделал это, чтобы решить, что:
Alt + Enter Facets Project
Справа, рядом с деталями, находится еще одна вкладка «Runtime». Установленный сервер Tomcat будет указан там. Выберите это.
Сохраните конфигурацию и СДЕЛАНО!
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;publicclassHelloWorldextendsHttpServlet{publicvoid doGet(HttpServletRequest request,HttpServletResponse response)throwsServletException,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.
Я получаю исключение нулевого указателя при создании проекта, связанного с «Динамическим веб-модулем».
Чтобы получить проект для компиляции (то есть, чтобы javax.servletуспешно импортировать), мне нужно было перейти в « Свойства проекта» , выбрать « Фасеты проекта» на боковой панели, отметить « Динамический веб-модуль» и нажать « Применить» .
Удивительно, но на этот раз фасет «Динамический веб-модуль» был установлен правильно, и импорт начал работать.
Многие из нас развиваются в Eclipse через проект Maven. Если это так, вы можете включить зависимости Tomcat в Maven через jar tomcat-servlet-apiи tomcat-jsp-api. Один существует для каждой версии Tomcat. Обычно достаточно добавить их в область видимости providedвашего POM. Это сделает вашу сборку более переносимой.
Если вы обновите Tomcat в будущем, вы также просто обновите версию этих jar-файлов.
Прежде всего, вы никогда не должны вручную копировать / загружать / перемещать / включать отдельные библиотеки для servletcontainer, такие как servlet-api.jar
@BalusC,
Я бы предпочел использовать именно те классы, которые будет использовать мое приложение, а не класс, предоставленный Eclipse (когда я чувствую себя параноидальным разработчиком).
Другое решение состоит в том, чтобы использовать Eclipse «Configure Build Path»> Libraries> Add External Jars и добавить api сервлетов для любого контейнера, который вы выберете.
И следуйте решению @kaustav datta при использовании ant для сборки - имейте свойство как tomcat.home или weblogic.home. Однако это вводит другое ограничение, что разработчик должен установить Weblogic на свой локальный компьютер, если он используется! Любое другое чистое решение?
Нерешенная проблема была из-за исключения spring-boot-starter-tomcat. Просто удалите <exclusions>...</exclusions>зависимость, это решит проблему, но убедитесь, что это также исключит встроенный сервер Tomcat.
Если вам нужен встроенный сервер Tomcat, вы можете добавить ту же зависимость с compile scope.
Ответы:
Убедитесь, что вы правильно выбрали 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 следующие шаги:
Интегрировать сервлетконтейнер в Eclipse
а. Через серверы
Откройте представление « Серверы» в нижней части окна.
Щелкните правой кнопкой мыши там и выберите New> Server .
Выберите подходящую марку и версию сервлет-контейнера и пройдите мастер.
б. Или через настройки Eclipse
Откройте « Окно»> «Установки»> «Сервер»> «Среды выполнения» .
Вы можете добавлять , редактировать и удалять серверы здесь.
Ассоциировать сервер с проектом
а. В новом проекте
Откройте 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 для небрежной попытки исправить ошибки компиляции:источник
<property name="tomcat.home" value="D:\\Program Files\\Apache Software Foundation\\apache-tomcat-6.0.36"/>
maven-archetype-webapp
не включая JAR-файл servlet-api в качестве зависимости? В проекте есть index.jsp с ошибкой компиляции. (Eclipse Luna Build id: 20140612-0600, JDK 8, M2eclipse)servlet-api
зависимости предоставляются средами выполнения Servlet, такими как Tomcat, Wildfly, Glassfish и т. д.,. Никогда не включайте его как часть вашего приложения, так как есть большая вероятность того, что оно вступит в конфликт с окружающей средой.ШАГ 1
Перейти к свойствам вашего проекта (с Alt+ Enterили правой кнопкой мыши)
ШАГ 2
проверьте Apache Tomcat v7.0 под Targeted Runtime, и он работает.
источник
The import javax.servlet cannot be resolved
.Немного отличия от Хари:
источник
Включите servlet-api.jar из папки lib вашего сервера.
Сделать этот шаг
источник
Добавьте зависимость javax.servlet в pom.xml. Ваша проблема будет решена.
источник
Быстрое исправление - Это работало в Eclipse - Правый клик по проекту -> Свойства -> Путь сборки Java (вкладка) -> Добавить внешние JAR -> найти реализацию api jar сервлета (если Tomcat - его имя servlet-api.jar) -> нажмите ОК Это оно !!
источник
servlet-api.jar
,jsp-api.jar
,el-api.ja
г,j2ee.jar
,javaee.jar
и т.д. Это привело бы только к будущей мобильности, совместимости и ремонтопригодности классам проблемам.Вы можете просто скопировать
servlet-api.jar
и скопировать эти файлы jar в папку lib, которая находится в WEB-INF. тогда просто почистите и постройте свой проект, ваши ошибки будут решены.Вы можете напрямую добавить файлы JAR в библиотеку, используя следующие шаги.
servlet-api.jar
файлу.источник
servlet-api.jar
,jsp-api.jar
,javaee.jar
и т.д. Это приведет лишь к будущей переносимости, совместимости, и путь к классам ремонтопригодности неприятностей.Я знаю, что это старый пост. Тем не менее, я наблюдал еще один случай, когда в проект уже добавлен Tomcat, но мы все еще получаем эту ошибку. Сделал это, чтобы решить, что:
Alt + Enter
Facets Project
Справа, рядом с деталями, находится еще одна вкладка «Runtime». Установленный сервер Tomcat будет указан там. Выберите это.
Сохраните конфигурацию и СДЕЛАНО!
Надеюсь, это кому-нибудь поможет.
источник
Из википедии .
Это, конечно, работает, только если вы добавили
servlet-api.jar
путь сборки Eclipse. Обычно ваш сервер приложений (например, Tomcat ) будет иметь правильный файл JAR.источник
Для проектов Maven добавить следующую зависимость:
Ссылка
Для gradle проектов:
или скачайте
javax.servlet.jar
и добавьте в свой проект.источник
Я получаю исключение нулевого указателя при создании проекта, связанного с «Динамическим веб-модулем».
Чтобы получить проект для компиляции (то есть, чтобы
javax.servlet
успешно импортировать), мне нужно было перейти в « Свойства проекта» , выбрать « Фасеты проекта» на боковой панели, отметить « Динамический веб-модуль» и нажать « Применить» .Удивительно, но на этот раз фасет «Динамический веб-модуль» был установлен правильно, и импорт начал работать.
источник
В моем случае, когда я перешел на экран Targetted Runtimes , Tomcat 7 не был указан (отключен), несмотря на то, что был установлен.
Чтобы исправить это, мне нужно было перейти в « Настройки» -> «Сервер» - «Среда выполнения», затем удалить и переустановить Tomcat 7.
источник
Многие из нас развиваются в Eclipse через проект Maven. Если это так, вы можете включить зависимости Tomcat в Maven через jar
tomcat-servlet-api
иtomcat-jsp-api
. Один существует для каждой версии Tomcat. Обычно достаточно добавить их в область видимостиprovided
вашего POM. Это сделает вашу сборку более переносимой.Если вы обновите Tomcat в будущем, вы также просто обновите версию этих jar-файлов.
источник
@BalusC,
Я бы предпочел использовать именно те классы, которые будет использовать мое приложение, а не класс, предоставленный Eclipse (когда я чувствую себя параноидальным разработчиком).
Другое решение состоит в том, чтобы использовать Eclipse «Configure Build Path»> Libraries> Add External Jars и добавить api сервлетов для любого контейнера, который вы выберете.
И следуйте решению @kaustav datta при использовании ant для сборки - имейте свойство как tomcat.home или weblogic.home. Однако это вводит другое ограничение, что разработчик должен установить Weblogic на свой локальный компьютер, если он используется! Любое другое чистое решение?
источник
Это может быть также причиной. Я придумал следующее
pom.xml
.Нерешенная проблема была из-за исключения
spring-boot-starter-tomcat
. Просто удалите<exclusions>...</exclusions>
зависимость, это решит проблему, но убедитесь, что это также исключит встроенный сервер Tomcat.Если вам нужен встроенный сервер Tomcat, вы можете добавить ту же зависимость с
compile scope
.источник