2

我有一个 Maven 项目,它在 Eclipse 中完全按照预期工作。它还在 Eclipse 之外构建和运行,但是当我尝试调用前端(JSP 网页)时,我得到以下信息:

访问 / 时出现问题。原因:

javax.servlet.ServletContext.getJspConfigDescriptor()Ljavax/servlet/descriptor/JspConfigDescriptor;

造成的:

java.lang.NoSuchMethodError: javax.servlet.ServletContext.getJspConfigDescriptor()Ljavax/servlet/descriptor/JspConfigDescriptor; ...

我环顾四周,似乎此消息与 Servlet 2.5 和 Servlet 3.0 之间的不兼容有关。但是我的 pom 中已经有 Servlet 3.0 作为依赖项:

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

因此,即使构建本身成功,我也无法弄清楚为什么当我在 Eclipse 之外构建和部署时没有包含我需要的这种依赖关系。

知道是什么原因造成的以及如何解决吗?

编辑:在 web.xml 中没有配置 JSP 访问。index.jsp 文件是为码头服务器设置的欢迎文件,带有以下代码段:

// configure webapp
WebAppContext webroot = new WebAppContext();
webroot.setResourceBase("src/main/webapp");
webroot.setContextPath("/");
webroot.setWelcomeFiles(new String[] {"index.jsp"});
webroot.setParentLoaderPriority(true);
server.setHandler(webroot);

剩下的几个 jsp 文件在 webapp 文件夹中。

编辑 2:我检查了打包项目时创建的 jar 的内容,似乎 jar 中有 javax/servlet/Servlet.class 的多个副本。这有点令人困惑。我假设我在 pom 中的这些其他依赖项(如下所列)必须添加额外的 Servlet.class 文件。

<dependency>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>jetty-server</artifactId>
  <version>8.1.8.v20121106</version>
</dependency>
<dependency>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>jetty-webapp</artifactId>
  <version>8.1.8.v20121106</version>
</dependency>
<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-jsp</artifactId>
    <version>8.1.8.v20121106</version>
</dependency>

但我不确定如何解决这个问题......

如果有人有任何想法,我很想听听他们的意见。我唯一真正的限制是我必须使用码头 8.1.8.v20121106。

4

1 回答 1

0

在我看来,您可能在 Tomcat 6 上部署了一个 servlet 3.0,它不受支持,会导致此异常。

另一种可能性是你在你的战争中导出额外的 .classes 会干扰 tomcat 的默认库。

于 2013-04-23T23:15:21.160 回答