невозможно импортировать javax.servlet.annotation.WebServlet; - PullRequest
34 голосов
/ 29 сентября 2011

Я начал писать приложение, которое может работать на Google App Engine.
Но когда я захотел использовать свой код от Netbeans до Eclipse, у меня были ошибки:

 import javax.servlet.annotation.WebServlet;

и

 @WebServlet(name = "MyServlet", urlPatterns = {"/MyServlet"})

ошибки:

The import javax.servlet.annotation cannot be resolved
WebServlet cannot be resolved to a type

Я пытался импортировать servlet-api.jar в Eclipse, но все равно, пытался собрать и очистить проект.
Я не использую Tomcat на своем Eclipse, только на Netbeans.
Как я могу решить проблему?

Ответы [ 11 ]

56 голосов
/ 29 сентября 2011

Я попытался импортировать servlet-api.jar, чтобы затмить, но все равно тоже попытался построить и очистить проект. Я не использую tomcat на моем затмении, только на моем net-bean. Как я могу решить проблему.

Не не вставьте servlet-api.jar в ваш проект. Это только напрашивается на неприятности. В разделе Project Facets свойств вашего проекта необходимо проверить, установлен ли фасет Dynamic Web Module на версию 3.0. Вы также должны убедиться, что ваш /WEB-INF/web.xml (если есть) был объявлен в соответствии со спецификацией Servlet 3.0. То есть корневое объявление <web-app> должно соответствовать следующему:

<web-app
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    version="3.0">

Чтобы иметь возможность импортировать javax.servlet материал, вам необходимо интегрировать полноценный сервлет-контейнер, такой как Tomcat, в Eclipse, а затем ссылаться на него в Targeted Runtimes свойств проекта. Вы можете сделать то же самое для Google App Engine .

Еще раз, не копируйте библиотеки, относящиеся к контейнеру, в проект веб-приложения, как предлагают другие. Это сделало бы ваше веб-приложение неисполняемым на производственных контейнерах другой марки / версии. Вы получите ошибки / исключения, связанные с classpath, во всех цветах.

Смотри также:


Не имеет отношения к конкретному вопросу: GAE не поддерживает Servlet 3.0. Базовый контейнер Jetty 7.x поддерживает только max Servlet 2.5.

16 голосов
/ 29 сентября 2011

Убедитесь, что номер версии вашего servlet-api.jar не менее 3,0.В файле META-INF/manifest.mf есть номер версии в файле *1002*:

Implementation-Version: 3.0.1

Если его версия меньше 3.0, загрузите 3.0.1 из Maven Central: http://search.maven.org/#artifactdetails|javax.servlet|javax.servlet-api|3.0.1|jar

Спецификации бывшего сервлета(2.5, 2.4 и т. Д.) Не поддерживают аннотации.

11 голосов
/ 26 февраля 2015

Если вы используете Maven и не хотите связывать Tomcat в Targeted Runtime в Eclipse, вы можете просто добавить зависимость с областью действия , предоставленной , в свой файл pom.xml.:

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>
</dependency>
3 голосов
/ 18 сентября 2014

Перейдите на

window->Preference->server->runtime environment

и выберите свой сервер Tomcat.Если ошибка все еще существует, тогда

right click project->properties>Targeted Runtimes

, затем проверьте сервер

2 голосов
/ 30 июня 2014
import javax.servlet.annotation.*;

(никто не написал это, но нужно импортировать это как WebInitparam не распознается другими пакетами)

2 голосов
/ 28 мая 2014

У меня была та же проблема, оказалось, что мой проект настроен так, как многие из вас указали выше, но проблема не исчезла, поэтому я углубился и обнаружил, что я использую Apache Tomcat 6 в качестве моего Runtime Server, поэтомуИсправление было простым, я просто обновил проект для использования Apache Tomcat 7, и все, наконец, в IDE была распознана javax.servlet.annotation.WebServlet аннотация.

1 голос
/ 14 апреля 2015

Если вы используете IBM RAD, убедитесь, что удалили любой j2ee.jar в пути сборки вашего проекта -> вкладка библиотеки, а затем нажмите «добавить внешний jar» и выберите j2ee.jar, который поставляется с RAD.

1 голос
/ 04 февраля 2013

Добавьте библиотеку 'Server Runtime' к вашему пути сборки Java, и это решит проблему.

0 голосов
/ 08 марта 2019

Просто добавьте ниже в ваш проект maven pom.xml flie:

<dependencies>
          <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-web-api</artifactId>
            <version>6.0</version>
            <scope>provided</scope>
         </dependency>
  </dependencies>
0 голосов
/ 01 июля 2014

У меня была та же проблема с использованием Spring, которая была решена добавлением Tomcat Server Runtime для построения пути.

...