【发布时间】:2012-05-22 20:59:41
【问题描述】:
我计划在我的应用程序中使用 Java servlet。我在项目的 POM.xml 文件中包含以下内容以加载 Java servlet 3.0 实现 jar。
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.servlet</artifactId>
<version>3.2-b05</version>
</dependency>
项目编译良好。但是,当我运行它时,我收到以下错误:
java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/servlet/ServletException
我在这里搜索了一下,找到了一些good answers。
我从他们那里了解到,当我们包含仅包含由 servlet API 定义的接口而不是实际实现的 JAR 时会发生此错误。所以,我检查了我使用的 glassfish jar 只是接口或者它也包含实现。我发现它是一个实现,而不仅仅是接口。
所以现在,我想知道为什么我会在运行时收到此错误。有人吗?
更新:
刚才,我发现这是一个明显的错误(我正在将 jar 添加到一个项目中,而正在运行一个完全不同的项目!)。我对此感到抱歉。添加 glassfish servlet 实现确实解决了这个问题。
谢谢, 桑迪普
【问题讨论】:
-
您不应该在部署的依赖项中包含 servlet jar 文件,因为 GlassFish 已经在其类路径中包含它。此依赖项应具有“已提供”范围。
-
@JBNizet:我没有使用 Glassfish 作为 servlet 容器。为此,我正在使用 Jetty。
-
Jetty jars(用于服务器、实用程序、servlet 等)似乎没有任何 Servlet API 实现。那么如果我没有明确包含实现jar,它会如何工作呢?
-
不实例化传递给您的 servlet 的 servlet 请求和响应,Jetty 如何成为一个 servlet 容器?