在pom.xml中为Tomcat 7设置Servlet/JSP jar

cal*_*586 3 eclipse tomcat servlets maven

我使用的是JDK 1.6,Maven 2.2.1,Tomcat 7和Eclipse Juno(企业版).

尝试导入javax.servlet等包时.*; Eclipse抱怨说它没有在它的类路径(构建路径)中.

所以,我所做的是在我的pom.xml文件中包含以下依赖项:

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.3</version>
</dependency>

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jsp-api</artifactId>
    <version>2.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

在tomcat服务器启动期间:

INFO: Deploying web application archive C:\DevTools\tomcat\apache-tomcat-7.0.32\webapps\myapp.war
Dec 20, 2012 4:55:41 PM org.apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(C:\DevTools\tomcat\apache-tomcat-7.0.32\webapps\myapp\WEB-INF\lib\servlet-api-2.3.jar)
 - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
Run Code Online (Sandbox Code Playgroud)

为什么要记录此消息?

另外,我似乎无法在maven存储库中找到适合servlet-api 3.0或jsp 2.2的版本

http://mvnrepository.com/

请帮助我......

Per*_*ion 8

Web应用程序容器负责提供Servlet/JSP API和实现文件.使用当前的Maven设置,您将导致这些库文件捆绑在您的应用程序中,从而导致您在日志中看到的类加载器问题.

尝试导入javax.servlet等包时.*; Eclipse抱怨说它没有在它的类路径(构建路径)中.

是的,您需要在类路径中使用API​​库,以便编译依赖于它们的代码.您希望在构建类路径中包含这些库,同时不将它们包含在最终的可部署中.您可以通过scope将依赖库标识为Maven来完成此操作provided.这基本上意味着"编译需要这些库,但最终将由应用程序容器提供,因此实际上不要将它们包含在可部署的中".

另外,我似乎无法在maven存储库中找到适合servlet-api 3.0或jsp 2.2的版本

Servlet 3.0和JSP 2.2 API已捆绑在通用的JavaEE Web API中.这是您需要在POM中指定的依赖项.图说:

<dependencies>
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-web-api</artifactId>
        <version>6.0</version>
        <scope>provided</scope>
    </dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)