0

我想将我的 Web 应用程序从 WAS 7.0.0.7 升级到 WAS 8.5。该应用程序正常部署,但只要我想访问它,我就会得到以下异常:

java.lang.AbstractMethodError: javax/servlet/ServletRequest.getDispatcherType()Ljavax /servlet/DispatcherType

WAS 8 使用 Servlet 3.0 容器,但它应该与我在应用程序中使用的 2.4 版本向后兼容。

我将类加载设置为 PARENT LAST 并且仍然得到相同的错误。

Websphere 正在调用自 Servlet 3.0 起可用的 getDispatcherType()。为什么?

我使用以下 web.xml 标头

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
     version="2.4">
4

1 回答 1

0

您是否有机会在您的应用程序中包含包含标准 Servlet API 的 JAR 文件?您能否列出您的 EAR 中包含的所有 JAR 文件?

编辑了询问者的以下信息:您提到您正在包装请求对象。我猜,当您编译代码时,您是针对 Servlet 2.4 类进行编译的。这就是编译通过 OK 的原因(您不必实现getDispatcherType)。稍后,在运行时,您会得到,AbstractMethodError因为您的包装器实现不包含现在需要的getDispatcherType方法的实现。

解决这个问题的唯一方法(在我看来)仍然是针对 Servlet 3.0 类进行编译。WebSphere 8.5 将始终假定请求是 Servlet 3.0,没有办法绕过它。

为什么不能针对 Servlet 3.0 类进行编译是有原因的吗?

于 2012-09-07T23:33:00.697 回答