Ответ 1
Убедитесь, что у вас есть правильный Eclipse и сервер
Убедитесь, что вы используете Eclipse IDE для разработчиков Java EE (с помощью EE). Он содержит средства разработки для создания динамических веб-проектов и легко интегрирует servletcontainers (эти инструменты являются частью Web Tools Platform, WTP). Если у вас уже есть Eclipse IDE для Java (без EE) и вручную установлены некоторые связанные с EE плагины, то, скорее всего, это было сделано неправильно. Вам лучше всего мусор и захватить реальную среду Eclipse для Java EE.
Вам также необходимо убедиться, что на вашем компьютере уже установлен сервлетконтейнер, который реализует по крайней мере ту же версию API сервлета, что и сервлетконтейнер в рабочей среде, например Apache Tomcat, Oracle GlassFish, JBoss AS/WildFly и т.д. Обычно достаточно просто загрузить ZIP файл и извлечь его. В случае Tomcat не загружайте формат EXE, это только для производственных сред Windows. См. Также a.o. Несколько портов (8005, 8080, 8009), требуемых Tomcat Server на локальном хосте, уже используются.
Сервлетконтейнер представляет собой конкретную реализацию API сервлета. Обратите внимание, что Java EE SDK, загружаемый на Oracle.com, в основном содержит GlassFish. Так что если вы уже загрузили Java EE SDK, то у вас в основном уже есть GlassFish. Также обратите внимание, что, например, GlassFish и JBoss AS/WildFly - это больше, чем просто сервлетконтейнер, они также поддерживают JSF, EJB, JPA и все другие возможности Java EE. См. Также a.o. Что такое Java EE?
Интегрируйте сервер в Eclipse и свяжите его с Project
После установки как Eclipse для Java EE, так и servletcontainer на вашем компьютере выполните следующие шаги в Eclipse:
-
Интегрировать servletcontainer в Eclipse
а. Просмотр через сервер
- Откройте представление "Серверы" в нижнем поле.
- Щелкните правой кнопкой мыши и выберите "Создать" > "Сервер".
-
Выберите подходящую make-версию и версию браузера сервлета и пройдите через мастер.
б. Или, используя настройки Eclipse
-
Связать сервер с проектом
а. В новом проекте
- Откройте Project Navigator/Explorer с левой стороны.
- Щелкните правой кнопкой мыши и выберите "Создать" > "Проект", а затем в меню "Веб" > "Динамический веб-проект".
-
В мастере установите целевую рабочую среду на интегрированный сервер.
б. Или в существующем проекте
- Проект Rightclick и выберите "Свойства".
-
В разделе Целевые сроки выполнения выберите интегрированный сервер.
В любом случае 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
и т.д. с помощью библиотек, специфичных для сервлетов, в неосторожной попытке исправить ошибки компиляции:
- java.lang.NullPointerException в org.apache.jsp.index_jsp._jspInit
- java.lang.NoClassDefFoundError: javax/el/ELResolver
- java.lang.NoSuchFieldError: IS_DIR
- java.lang.NoSuchMethodError: javax.servlet.jsp.PageContext.getELContext() Ljavax/el/ELContext;
- java.lang.AbstractMethodError: javax.servlet.jsp.JspFactory.getJspApplicationContext(Ljavax/servlet/ServletContext;) Ljavax/servlet/jsp/JspApplicationContext;
- org.apache.jasper.JasperException: метод getJspApplicationContext (ServletContext) undefined для типа JspFactory
- java.lang.VerifyError: (класс: org/apache/jasper/runtime/JspApplicationContextImpl, метод: createELResolver signature:() Ljavax/el/ELResolver;) Несовместимый аргумент функции
- jar не загружен. См. Раздел Servlet Spec 2.3, раздел 9.7.2. Класс нарушения: javax/servlet/Servlet.class