Я хочу розвиватись із сервлетами в Eclipse, але це говорить про те, що пакет javax.servlet
не може бути вирішений. Як я можу додати javax.servlet
пакет до свого проекту Eclipse?
Я хочу розвиватись із сервлетами в Eclipse, але це говорить про те, що пакет javax.servlet
не може бути вирішений. Як я можу додати javax.servlet
пакет до свого проекту Eclipse?
Відповіді:
Переконайтесь, що ви використовуєте принаймні Eclipse IDE для розробників Enterprise Java (з Enterprise ). Він містить інструменти розробки для створення динамічних веб-проектів та легкої інтеграції сервлетконтейнерів (ці інструменти є частиною платформи веб-інструментів, 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 для Enterprise Java та серверний контейнер, виконайте наступні дії у програмі Eclipse:
Інтегруйте сервлет-контейнер у Eclipse
а. Перегляд через сервери
Виберіть відповідну марку та версію серветки та пройдіться майстром.
б. Або через налаштування Eclipse
Пов'язати сервер з проектом
а. У новому проекті
У майстрі встановіть цільовий час виконання на інтегрованому сервері.
б. Або в існуючому проекті
У розділі Цільове виконання виберіть інтегрований сервер.
У будь-якому випадку, Eclipse автоматично прийме бібліотеки сервлет-контейнера в шлях збірки. Таким чином ви зможете імпортувати та використовувати API сервлетів.
У будь-якому випадку у вас не повинно виникати необхідності поспішати у властивості проекту " Шлях побудови". Ви повинні перш за все ніколи не вручну копіювати / завантажити / переміщати / включати окремі 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
і т. Д., Використовуючи специфічні бібліотеки сервлетконтейнера, при необережній спробі виправити помилки компіляції:
<property name="tomcat.home" value="D:\\Program Files\\Apache Software Foundation\\apache-tomcat-6.0.36"/>
maven-archetype-webapp
не включають JAR сервлет-api як залежність? Проект має index.jsp з помилкою компіляції. (Eclipse , Місяць збірки ID: 20140612-0600, JDK 8, M2eclipse)
servlet-api
забезпечуються середовищами виконання сервлетів, такими як Tomcat, Wildfly, Glassfish тощо.,. Ніколи не включайте його як частину вашої програми, оскільки є хороша можливість, щоб він зіткнувся з оточенням.
Перейдіть до властивостей свого проекту (за допомогою клавіші Alt+ Enterабо правий клацання)
перевірити Apache Tomcat v7.0 в цільовому режимі виконання, і він працює.
The import javax.servlet cannot be resolved
.
Трохи відмінність від Харі:
Клацніть правою кнопкою миші на проект ---> Властивості ---> Шлях збірки Java ---> Додати бібліотеку ... ---> Час виконання сервера ---> Apache Tomcat ----> Готово.
Включіть сервер-api.jar зі своєї папки lib сервера.
Зробіть цей крок
Додайте залежність javax.servlet у pom.xml. Ваша проблема буде вирішена.
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
Швидке виправлення - це спрацювало в Eclipse - Клацніть правою кнопкою миші на проект -> Властивості -> Шлях збірки Java (Tab) -> Додати зовнішні JAR -> знайдіть реалізацію пакету api сервлета (якщо Tomcat - його назвав servlet-api.jar) -> натисніть кнопку ОК. Це воно !!
servlet-api.jar
, jsp-api.jar
, el-api.ja
г, j2ee.jar
, javaee.jar
і т.д. Це призвело б лише до майбутньої мобільності, сумісності та ремонтопридатності класів проблем.
Ви можете просто скопіювати servlet-api.jar
та скопіювати файли jar у папку lib, що знаходиться у WEB-INF. то просто очистіть і побудуйте ваш проект, ваші помилки будуть вирішені.
**OR**
ви можете безпосередньо додати jar файли до бібліотеки, виконавши наступні кроки.
servlet-api.jar
файлу.servlet-api.jar
, jsp-api.jar
, javaee.jar
і т.д. Це призведе лише до майбутньої переносимості, сумісності, і шлях до класів ремонтопридатності неприємностей.
Я знаю, що це стара публікація. Однак я помітив ще один випадок, коли до проекту вже додано Tomcat, але ми все одно отримуємо цю помилку. Це дозволило вирішити це:
Alt + Введіть
грані проекту
Справа, поруч із деталями, розташована ще одна вкладка "Час виконання". Встановлений сервер 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;
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.
Для 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
та додайте до свого проекту.
Я отримував нульовий виняток вказівника під час створення проекту, пов'язаного з "Динамічним веб-модулем".
Щоб скомпілювати проект (тобто javax.servlet
імпортувати успішно), мені довелося перейти до властивостей проекту , вибрати бічні грані проекту на бічній панелі, поставити галочку Динамічний веб-модуль та натиснути Застосувати .
Дивно, але цього разу грань "Динамічний веб-модуль" встановлена правильно, а імпорт почав працювати.
У моєму випадку, коли я перейшов до екрана "Цільові режими виконання" , Tomcat 7 не був внесений до списку (відключений), незважаючи на те, що його встановлено.
Для виправлення мені довелося перейти до Налаштування-> Сервер-> Середовища виконання, а потім видалити та перевстановити Tomcat 7.
Багато хто з нас розвиваються в Eclipse за допомогою проекту Maven. Якщо так, ви можете включити залежності від Tomcat в Maven через банки tomcat-servlet-api
та tomcat-jsp-api
банки. Один існує для кожної версії Tomcat. Зазвичай, provided
достатньо додати їх із обсягом до вашої POM. Це дозволить зберегти вашу конструкцію більш портативною.
Якщо ви в майбутньому оновите Tomcat, ви також просто оновите версію цих банок.
Ви, перш за все, не повинні ніколи вручну копіювати / завантажувати / переміщувати / включати окремі спеціальні бібліотеки сервлет-контейнерів, такі як servlet-api.jar
@BalusC,
Я вважаю за краще використовувати саме ті класи, які використовуватиме моя програма, а не те, яке надає Eclipse (коли я відчуваю себе розробником параноїків).
Іншим рішенням буде використовувати Eclipse "Налаштувати збірний шлях"> Бібліотеки> Додати зовнішні Jars та додати сервієтні api будь-якого контейнера, який вирішить використовувати.
І дотримуйтесь рішення @kaustav datta, коли використовуєте мурахи для побудови - мати властивість на зразок tomcat.home або weblogic.home. Однак це вводить ще одне обмеження, що розробник повинен встановити Weblogic на свою локальну машину, якщо використовується weblogic! Будь-яке інше чистіше рішення?
Це також може бути причиною. я придумав наступне 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>