Должен ли я иметь servlet.api в проекте eclipse в web-inf / lib? [Дубликат]

Я использую структуру Laravel 5 и ответ @Gambi, и работаю для меня, но с некоторыми изменениями для моего проекта.

У меня есть значения параметров в таблице базы данных, и я использую их с заявление foreach. Но перед заявлением я добавил параметр с предложенными настройками @Gambit, и он сработал.

Здесь мой пример:

@isset($keys)
  <select>
    <option  disabled selected value></option>
    @foreach($keys as $key)
      <option>{{$key->value)</option>
    @endforeach
  </select>
@endisset 

Я надеюсь, что это тоже поможет кому-то. Следите за хорошей работой!

289
задан BalusC 18 November 2010 в 12:38
поделиться

14 ответов

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

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

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

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


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

После установки Eclipse для Java EE и servletcontainer на вашем компьютере выполните следующие шаги в Eclipse:

  1. Интегрируйте servletcontainer в Eclipse a. Через просмотр серверов Откройте окно Серверы в нижнем поле. Щелкните правой кнопкой мыши и выберите Создать> Сервер . Выберите подходящую версию и версию сервлета контейнера и пройдите через мастер. b. Или, используя настройки Eclipse Откройте окно > Настройки> Сервер> Среды времени выполнения . Вы можете Добавить , Изменить и Удалить серверы здесь.
  2. Связанный сервер с проектом a. В новом проекте Откройте Project Navigator / Explorer с левой стороны. Щелкните правой кнопкой мыши и выберите Создать> Проект , а затем в меню Веб> Динамический веб-проект . В мастере установите целевое время выполнения на интегрированный сервер. b. Или в существующем проекте Rightclick project и выберите Properties . В разделе Targeted Runtimes выберите интегрированный сервер. В любом случае Eclipse автоматически автоматически загрузит библиотеки servletcontainer в путь сборки. Таким образом, вы сможете импортировать и использовать API сервлета.

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

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

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

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

378
ответ дан Community 19 August 2018 в 03:43
поделиться
  • 1
    @BalusC Если я использую Apache Ant для создания моего проекта, как я могу динамически добавить папку /lib(servlet-api.jar & amp; jsp-api.jar) в контейнер сервлета? Или мне нужно жестко закодировать путь к папке / lib, например - <property name="tomcat.home" value="D:\\Program Files\\Apache Software Foundation\\apache-tomcat-6.0.36"/> и т. Д. – kaustav datta 13 June 2013 в 16:13
  • 2
    @BalusC почему проекты maven, созданные с архетипом maven-archetype-webapp, не включая JAR сервлета-api как зависимость? Проект имеет index.jsp с ошибкой компиляции. (Eclipse Luna Build id: 20140612-0600, JDK 8, M2eclipse) – arun 20 September 2014 в 06:56
  • 3
    Зависимости @arun servlet-api предоставляются средами выполнения Servlet, такими как Tomcat, Wildfly, Glassfish и т. д.,. Никогда не включайте его как часть своего приложения, так как есть хорошая возможность столкновения с окружающей средой. – asgs 23 September 2015 в 09:27
  • 4
    @BalusC, 1) Является ли javax.servlet-api-3.1.0.jar равным tomcat8 / lib / servlet-api.jar? Я декомпилирую эти два баночки, а затем нахожу тупик классов / интерфейсов одинаковыми. 2) Является ли javax.servlet-api-3.1.0.jar контейнером-нейтральным (не специфичные для сервлетов библиотеки)? – gfan 28 October 2016 в 11:23
  • 5
    @gfan: техническая проблема заключается не в том, являются ли контейнеры-контейнеры «нейтральными контейнерами», но приоритет и порядок загрузки. Если библиотеки, поставляемые контейнерами, загружаются не соответствующим загрузчиком классов (например, через загрузчик классов Webapp), все может разрушиться, даже если это «случайно». точно такая же версия. Просто не предоставляйте библиотеки, предоставленные контейнерами, из дубликатов мест вне контейнера. Период. – BalusC 28 October 2016 в 11:43

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

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

2
ответ дан Erica Kane 19 August 2018 в 03:43
поделиться

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

11
ответ дан Hari Gudigundla 19 August 2018 в 03:43
поделиться
  • 1
    Со ссылкой на вышеприведенное сообщение BalusC никогда не копируйте вручную / не загружайте / не перемещайте / не включайте отдельные библиотеки, специфичные для сервлетконтейнеров, такие как servlet-api.jar, jsp-api.jar, el-api.ja r, j2ee.jar, javaee.jar и т. Д. Это приведет только к будущая мобильность, совместимость, путь к классам и проблемы с ремонтопригодностью. – Aniket Kulkarni 6 February 2013 в 18:17

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

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

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

2
ответ дан Ivan Vučica 19 August 2018 в 03:43
поделиться

Для проектов 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
ответ дан Joby Wilson Mathews 19 August 2018 в 03:43
поделиться

Из wikipedia .

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
ответ дан Juha Syrjälä 19 August 2018 в 03:43
поделиться

Я знаю, что это старый пост. Тем не менее, я наблюдал еще один пример, когда в проекте уже добавлен Tomcat, но мы все еще получаем эту ошибку. Это разрешило это: Alt + Ввести Границы проекта Справа рядом с деталями находится еще одна вкладка «Runtimes». Там будет указан установленный сервер tomcat. Выберите его. Сохраните конфигурацию и DONE!

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

5
ответ дан KNP 19 August 2018 в 03:43
поделиться

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

  **OR**

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

  1. Щелкните правой кнопкой мыши проект.
  2. Перейти к свойствам.
  3. Перейти к пути сборки Java.
  4. Выбрать вкладку «Добавить библиотеку» на вкладках.
  5. Добавить файлы Jar
  6. g4]
  7. укажите путь к вашему файлу servlet-api.jar.
  8. Очистите и создайте свой проект.
5
ответ дан Mitul Maheshwari 19 August 2018 в 03:43
поделиться

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

Чтобы исправить, мне нужно было перейти в Preferences-> Server-> Runtime Environments затем удалите и переустановите Tomcat 7.

2
ответ дан Paul LeBeau 19 August 2018 в 03:43
поделиться

import javax.servlet [/g3]

ШАГ 1

Перейти к свойствам вашего проекта (с помощью Alt + Enter или righ-click)

STEP 2

проверить на Apache Tomcat v7.0 под целевым временем выполнения и работает.

211
ответ дан prayagupd 19 August 2018 в 03:43
поделиться
  • 1
    Отлично, спасибо. – GG. 12 December 2013 в 12:25
  • 2
    Помогло мне добавить время выполнения JBOSS. Мой список пуст. – span 17 January 2014 в 15:35
  • 3
    Это решение для меня. Я установил tomcat 6.0 в качестве моей среды развертывания (как сервер в eclipse), но пренебрег тем, чтобы указать его как мою среду выполнения ... Я предполагаю, что это означает, что он может найти .jars в моей папке tomcat / lib во время выполнения, но не во время компиляции. – Paul 18 March 2014 в 12:29
  • 4
    Префект благодарит :) @Pryag Upd – Simmant 30 October 2014 в 17:43
  • 5
    Это помогло мне ... – MMMMS 21 February 2015 в 06:33

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

@ BalusC,

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

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

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

0
ответ дан RuntimeException 19 August 2018 в 03:43
поделиться

Включите servlet-api.jar из папки вашего сервера. enter image description here [/g0]

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

enter image description here [/g1]

12
ответ дан sarath 19 August 2018 в 03:43
поделиться
  • 1
    Решение не работает для меня, все еще получая ниже ошибки. Контент дочернего объекта не запущен во время запуска. Java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: не удалось запустить компонент [StandardEngine [Catalina] .StandardHost [localhost] .StandardContext [/ мессенджер]] – Maya Mohite 25 March 2017 в 10:49
  • 2
    Пожалуйста, помогите мне решить эту проблему. – Maya Mohite 25 March 2017 в 10:51

Небольшое отличие от Hari:

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

74
ответ дан Sujania 19 August 2018 в 03:43
поделиться
  • 1
    Привет, ivanLam, Apache Tomcat не отображается после выполнения Runtime Server? Что делать сейчас! – Sandeep Pattanaik 10 December 2015 в 07:43
  • 2
    Это сработало для меня. Спасибо! – Arvindh Mani 25 October 2017 в 15:29

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

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>
</dependency>
6
ответ дан Zeeshan Akhter 19 August 2018 в 03:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: