我想将我的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">
答案 0 :(得分:0)
您是否有机会将包含标准Servlet API的JAR文件与您的应用程序一起使用? 你能列出你的EAR中包含的所有JAR文件吗?
编辑以下来自asker的信息:您提到您正在包装请求对象。我猜测,当你编译代码时,你正在编译Servlet 2.4类。这就是编译经历好的原因(你不必实现getDispatcherType
)。稍后,在运行时,您得到AbstractMethodError
,因为您的包装器实现不包含现在需要的getDispatcherType
方法的实现。
解决这个问题的唯一方法(在我看来)仍然是针对Servlet 3.0类进行编译。 WebSphere 8.5将总是假设请求是Servlet 3.0,没有办法解决它。
有没有理由不能编译Servlet 3.0类?