我有一个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。
答案 0 :(得分:0)
在我看来,您可能正在tomcat 6上部署一个不受支持的servlet 3.0,并会导致此异常。
另一种可能性是您在战争中导出了干扰tomcat默认库的其他.class。