繁体   English   中英

无法导入 javax.servlet.annotation.WebServlet

[英]Can't import javax.servlet.annotation.WebServlet

我已经开始编写可以在 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 但仍然相同,还尝试构建和清理项目。 我没有在我的 Eclipse 上使用 Tomcat,我的 Netbeans 上只有它。 我该如何解决问题?

我尝试将 servlet-api.jar 导入到 Eclipse,但仍然尝试构建和清理项目。 我没有在我的 eclipse 上使用 tomcat,只有在我的 net-beans 上才有它。 我该如何解决问题。

不要servlet-api.jar在您的项目。 这只是自找麻烦。 如果动态 Web 模块方面设置为 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东西,你需要在 Eclipse 中集成一个完整的 servletcontainer,比如 Tomcat,然后在项目属性的Targeted Runtimes中引用它。 您可以对Google App Engine执行相同的操作。

再次强调,不要像其他人建议的那样将特定于容器的库复制到 webapp 项目中。 它会使您的 webapp 在不同品牌/版本的生产容器上无法执行。 您将获得所有颜色的与类路径相关的错误/异常。

也可以看看:


无关的具体问题:GAE支持Servlet 3.0。 其底层 Jetty 7.x 容器仅支持最大 Servlet 2.5。

检查您的servlet-api.jar的版本号是否至少为 3.0。 META-INF/manifest.mf文件中的 jar 中有一个版本号:

Implementation-Version: 3.0.1

如果它小于 3.0,则从 Maven Central 下载 3.0.1: http ://search.maven.org/#artifactdetails|javax.servlet|javax.servlet-api|3.0.1|jar

以前的 servlet 规范(2.5、2.4 等)不支持注释。

如果您正在使用 Maven 并且不想在 Eclipse 的目标运行时中链接 Tomcat,您可以简单地添加具有 pom.xml 中提供的范围的依赖项:

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>
</dependency>

window->Preference->server->runtime environment

然后选择你的tomcat服务器。 如果错误仍然存​​在,那么

right click project->properties>Targeted Runtimes

然后检查服务器

只需将以下内容添加到您的 maven 项目 pom.xml flie 中:

<dependencies>
          <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-web-api</artifactId>
            <version>6.0</version>
            <scope>provided</scope>
         </dependency>
  </dependencies>

我遇到了同样的问题,结果我的项目按照上述许多人进行了配置,但问题仍然存在,所以我深入了解并发现我使用 Apache Tomcat 6 作为我的运行时服务器,因此修复很简单,我只是将项目升级为使用 Apache Tomcat 7,仅此而已,IDE 终于识别出了javax.servlet.annotation.WebServlet注释。

import javax.servlet.annotation.*;

(没有人写过这个,但需要导入它,因为其他包无法识别WebInitparam

将库“服务器运行时”添加到您的 java 构建路径,它将解决该问题。

如果您使用的是 IBM RAD,请确保删除项目构建路径中的任何 j2ee.jar -> 库选项卡,然后单击“添加外部 jar”并选择 RAD 附带的 j2ee.jar。

从您的 tomcat 服务器lib文件夹中复制servlet-api.jar

在此处输入图片说明

将其粘贴到WEB-INF > lib文件夹

在此处输入图片说明

错误已解决!!!

我在使用 Spring 时遇到了同样的问题,通过添加 Tomcat Server Runtime 来构建路径来解决。

您需要将 servlet-api.jar 添加到项目的构建路径中。 看看这里如何做到这一点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM