Як імпортувати API javax.servlet в проект Eclipse?


320

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


я намагаюся запустити простий серветт типу привіт, звичайно, якби я хотів зробити gui, я імпортував би Java ...... гойдалки. *; Я не можу знайти потрібний імпорт для сервлета
том

Відповіді:


415

Переконайтеся, що ви правильні Eclipse та Server

Переконайтесь, що ви використовуєте принаймні Eclipse IDE для розробників Enterprise JavaEnterprise ). Він містить інструменти розробки для створення динамічних веб-проектів та легкої інтеграції сервлетконтейнерів (ці інструменти є частиною платформи веб-інструментів, WTP). Якщо ви вже мали ID Eclipse для Java (без Enterprise) і вручну встановили деякі пов’язані плагіни, то ймовірно, що це не було зроблено належним чином. Найкраще скинути його та схопити справжній Eclipse IDE для Enterprise Java.

Вам також потрібно переконатися, що у вас вже встановлений серверний контейнер на вашій машині, який реалізує принаймні таку саму версію API сервлетів, що і сервлетконтейнер у виробничому середовищі, наприклад Apache Tomcat , Oracle GlassFish , JBoss AS / WildFly тощо. Зазвичай просто завантажити ZIP-файл і витягнути його достатньо. У випадку з Tomcat не завантажуйте формат EXE, це стосується лише виробничих середовищ на базі Windows. Дивіться також ao Деякі порти (8005, 8080, 8009), необхідні Tomcat Server у localhost, вже використовуються .

Сервлет-контейнер - це конкретна реалізація API сервлетів. Зауважте, що завантаження SDK Java EE на 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

    а. Перегляд через сервери

    • Відкрийте подання Сервери в нижньому полі.
    • Клацніть правою кнопкою миші та виберіть Створити> Сервер .
    • Виберіть відповідну марку та версію серветки та пройдіться майстром.

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

    б. Або через налаштування Eclipse

    • Відкрийте вікно> Налаштування> Сервер> Середовища виконання .
    • Тут можна додавати , редагувати та видаляти сервери.

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

  2. Пов'язати сервер з проектом

    а. У новому проекті

    • Відкрийте навігатор проекту / Провідник ліворуч.
    • Клацніть правою кнопкою миші та виберіть Створити> Проект, а потім у меню Веб> Динамічний веб-проект .
    • У майстрі встановіть цільовий час виконання на інтегрованому сервері.

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

    б. Або в існуючому проекті

    • Клацніть правою кнопкою миші проект та виберіть Властивості .
    • У розділі Цільове виконання виберіть інтегрований сервер.

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

    У будь-якому випадку, Eclipse автоматично прийме бібліотеки сервлет-контейнера в шлях збірки. Таким чином ви зможете імпортувати та використовувати API сервлетів.


Ніколи не носіть із собою вільних файлів JAR, що стосуються конкретного сервера

У будь-якому випадку у вас не повинно виникати необхідності поспішати у властивості проекту " Шлях побудови". Ви повинні перш за все ніколи не вручну копіювати / завантажити / переміщати / включати окремі servletcontainer-специфічні бібліотеки servlet-api.jar, jsp-api.jar, el-api.jar, j2ee.jar, javaee.jarі т.д. Це тільки призведе до майбутньої мобільності, сумісності, шлях до класам і ремонтопридатності неприємностей, тому що ваш веб - програма не буде працювати , коли це розгорнутий у контейнер сервлетів іншого маркування / версії, ніж ті, з яких ці бібліотеки отримані спочатку.

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

Ось декілька типових винятків, які ви можете отримати, коли ви засмічуєте /WEB-INF/libабо, навіть /JRE/lib, /JRE/lib/extі т. Д., Використовуючи специфічні бібліотеки сервлетконтейнера, при необережній спробі виправити помилки компіляції:


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-archetype-webappне включають JAR сервлет-api як залежність? Проект має index.jsp з помилкою компіляції. (Eclipse , Місяць збірки ID: 20140612-0600, JDK 8, M2eclipse)
Arun

1
Залежності @arun servlet-apiзабезпечуються середовищами виконання сервлетів, такими як 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 контейнер нейтральним (не для бібліотек, що стосуються сервлет-контейнерів)?
gfan

@gfan: технічна проблема полягає не в тому, чи є бібліотеки, надані контейнерами, "нейтральними для контейнерів", а в пріоритеті та упорядкуванні в класі. Якщо бібліотеки, що надаються контейнерами, завантажуються неправильним завантажувачем класів (наприклад, через webapp classloader), це може призвести до хаосу, навіть якщо це "випадково" точно та сама версія. Просто не надайте надані контейнери бібліотеки з повторюваних місць поза контейнером. Період.
BalusC

220

імпорт javax.servlet

КРОК 1

Перейдіть до властивостей свого проекту (за допомогою клавіші Alt+ Enterабо правий клацання)

КРОК 2

перевірити Apache Tomcat v7.0 в цільовому режимі виконання, і він працює.


2
Допоміг мені додати час виконання JBOSS. Мій список був порожнім.
проліт

2
Це було рішенням для мене. Я встановив tomcat 6.0 як своє середовище розгортання (як сервер у затемненні), але знехтував вказати його як моє середовище виконання ... Я здогадуюсь, що це означає, що він міг би знайти .jars у моїй папці tomcat / lib під час виконання, але не під час компіляції.
Павло

Дякую! Але як я можу видалити копії серверів mu? У мене є Apache Tomcat v7.0 (2) та (3), які я хочу видалити. Хтось знає як?
Роббен

Не допомогли мені вирішити проблему The import javax.servlet cannot be resolved.
mrgloom

1
Це працює! Дякуємо, @mrgloom, можливо, ви захочете видалити сервер і створити новий сервер у своєму локальному господарі
Фредді Фабрегас

81

Трохи відмінність від Харі:

Клацніть правою кнопкою миші на проект ---> Властивості ---> Шлях збірки Java ---> Додати бібліотеку ... ---> Час виконання сервера ---> Apache Tomcat ----> Готово.


3
Привіт ivanLam, Apache Tomcat не відображається після запуску сервера? Що ж тепер робити!
Sandeep Pattanaik

15

Включіть сервер-api.jar зі своєї папки lib сервера.введіть тут опис зображення

Зробіть цей крок

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


1
Розв’язання не працює для мене, як і раніше, нижче помилки. Під час запуску java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: не вдалося запустити компонент [StandardEngine [Catalina] .StandardHost [localhost] .StandardContext [/ посланник]]
Майя Мохіте

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 (Tab) -> Додати зовнішні JAR -> знайдіть реалізацію пакету api сервлета (якщо 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і т.д. Це призведе лише до майбутньої переносимості, сумісності, і шлях до класів ремонтопридатності неприємностей.
el-teedee

5

Я знаю, що це стара публікація. Однак я помітив ще один випадок, коли до проекту вже додано Tomcat, але ми все одно отримуємо цю помилку. Це дозволило вирішити це:
Alt + Введіть
грані проекту
Справа, поруч із деталями, розташована ще одна вкладка "Час виконання". Встановлений сервер 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>

Довідково

Для градаційних проектів:

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

або завантажте javax.servlet.jarта додайте до свого проекту.


2

Я отримував нульовий виняток вказівника під час створення проекту, пов'язаного з "Динамічним веб-модулем".

Щоб скомпілювати проект (тобто javax.servletімпортувати успішно), мені довелося перейти до властивостей проекту , вибрати бічні грані проекту на бічній панелі, поставити галочку Динамічний веб-модуль та натиснути Застосувати .

Дивно, але цього разу грань "Динамічний веб-модуль" встановлена ​​правильно, а імпорт почав працювати.


2

У моєму випадку, коли я перейшов до екрана "Цільові режими виконання" , Tomcat 7 не був внесений до списку (відключений), незважаючи на те, що його встановлено.

Для виправлення мені довелося перейти до Налаштування-> Сервер-> Середовища виконання, а потім видалити та перевстановити Tomcat 7.


2

Багато хто з нас розвиваються в Eclipse за допомогою проекту Maven. Якщо так, ви можете включити залежності від Tomcat в Maven через банки tomcat-servlet-apiта tomcat-jsp-apiбанки. Один існує для кожної версії Tomcat. Зазвичай, providedдостатньо додати їх із обсягом до вашої POM. Це дозволить зберегти вашу конструкцію більш портативною.

Якщо ви в майбутньому оновите Tomcat, ви також просто оновите версію цих банок.


0

Ви, перш за все, не повинні ніколи вручну копіювати / завантажувати / переміщувати / включати окремі спеціальні бібліотеки сервлет-контейнерів, такі як servlet-api.jar

@BalusC,

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

Іншим рішенням буде використовувати Eclipse "Налаштувати збірний шлях"> Бібліотеки> Додати зовнішні Jars та додати сервієтні api будь-якого контейнера, який вирішить використовувати.

І дотримуйтесь рішення @kaustav datta, коли використовуєте мурахи для побудови - мати властивість на зразок tomcat.home або weblogic.home. Однак це вводить ще одне обмеження, що розробник повинен встановити Weblogic на свою локальну машину, якщо використовується weblogic! Будь-яке інше чистіше рішення?


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>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.