我无法制作一个非常简单的maven java web应用程序

时间:2014-04-05 18:53:20

标签: java java-ee tomcat web-applications

我有一个非常简单的java Web应用程序,我使用maven进行构建过程并尝试在Tomcat上部署它。

我使用的是tomcat 7.0.5332,maven 2.2.1版。

这是我非常简单的网络应用程序:

的pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.tugay.anotherwebapp</groupId>
  <artifactId>another-webapp</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>another-webapp Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
      <dependency>
          <groupId>javax</groupId>
          <artifactId>javaee-api</artifactId>
          <version>6.0</version>
      </dependency>
  </dependencies>
    <build>
        <finalName>another-webapp</finalName>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

这是我的web.xml:

<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">
    <servlet>
        <servlet-name>MyServletName</servlet-name>
        <servlet-class>MyServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>MyServletName</servlet-name>
        <url-pattern>/index.html</url-pattern>
    </servlet-mapping>
</web-app>

和MyServlet类:

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * User: Tugay
 * Date: 4/5/14
 * Time: 9:14 PM
 */


public class MyServlet extends HttpServlet {

    @Override
    public void doGet(HttpServletRequest httpServletRequest,
                      HttpServletResponse httpServletResponse) throws IOException {
        System.out.println("Hello World!");
    }
}

所以

mvn clean install 

工作正常并产生战争。但是当部署在Tomcat上时,我得到了这个:

- jar not loaded. See Servlet Spec 3.0, section 10.7.2. Offending class: /javax/servlet/Servlet.class

我做错了什么?

3 个答案:

答案 0 :(得分:2)

我认为您应该将此依赖关系设置为:

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

因为它已经存在于tomcat共享类加载器

答案 1 :(得分:0)

这很正常。 Servlet容器提供自己的servlet-api实现类。所以战争中包含的类(来自javaee-api)与tomcat提供的类冲突。

要避免这种情况,请将javaee-api依赖关系的范围设置为provided

这样,依赖项提供的类将在编译时可见,但jar本身不会包含在生成的战争中。

答案 2 :(得分:0)

如果你看一下Servlet规范3.0,第10.7.2节 - 你会发现问题似乎是你正在尝试加载容器已经提供的Servlet类(Tomcat)。请检查servlet-api是否在你的战争中(它不应该是)并使用javaee-api提供的范围。