无法导入 javax.servlet.annotation.WebServlet

2022-09-01 06:23:39

我已经开始编写可以在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

我试图导入Eclipse,但仍然相同,也试图构建和清理项目。我不会在我的Eclipse上使用Tomcat,只在我的Netbeans上使用它。我该如何解决问题?servlet-api.jar


答案 1

我试图导入servlet-api.jar日食,但仍然试图构建和清理项目。我不会在我的日食上使用tomcat,只在我的网豆上使用它。我该如何解决这个问题。

不要将 放在项目中。这只是自找麻烦。如果动态 Web 模块分面设置为 3.0 版,则需要签入项目属性的“项目分面”部分。您还需要确保您的(如果有)被声明符合 Servlet 3.0 规范。即,根声明必须与以下内容匹配:servlet-api.jar/WEB-INF/web.xml<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">

为了能够导入内容,您需要在 Eclipse 中集成一个像 Tomcat 这样功能齐全的 servletcontainer,然后在项目属性的目标运行时中引用它。您可以对Google App Engine执行相同的操作。javax.servlet

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

另请参阅:


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


答案 2

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

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 等)不支持注释。


推荐