当应用程序部署在Eclipse之外时,调用JSP文件会产生NoSuchMethodError

时间:2013-04-23 23:09:40

标签: java jsp maven servlets web-applications

我有一个maven项目,完全按照预期在eclipse中运行。它也在eclipse之外构建和运行,但是当我尝试调用前端(JSP网页)时,我得到以下内容:

  

访问/的问题。原因是:

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

引起:

     

java.lang.NoSuchMethodError:   javax.servlet.ServletContext.getJspConfigDescriptor()Ljavax / servlet的/描述符/ JspConfigDescriptor;   ...

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

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

所以我无法弄清楚为什么当我在eclipse之外构建和部署时,即使构建本身成功,我也不需要包含这种依赖。

知道是什么导致了这个以及如何解决它?

编辑: 未在web.xml中配置JSP访问。 index.jsp文件是使用此代码段的jetty服务器的欢迎文件集:

// 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>

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

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

1 个答案:

答案 0 :(得分:0)

在我看来,您可能正在tomcat 6上部署一个不受支持的servlet 3.0,并会导致此异常。

另一种可能性是您在战争中导出了干扰tomcat默认库的其他.class。