关于SpringMVC:java.lang.NoClassDefFoundError: StandardSer

来源:互联网 发布:mpls网络架构 编辑:程序博客网 时间:2024/06/10 23:41

在使用SpringMVC 框架时,用jetty作为web容器时,出现了如下异常:
java.lang.NoClassDefFoundError: org/springframework/web/context/request/async/StandardServletAsyncWebRequest
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2615)
at java.lang.Class.getDeclaredMethods(Class.java:1860)
但是,用tomcat启动是没问题的,在stackoverflow网站上,有一条关于StandardServletAsyncWebRequest的条目,http://stackoverflow.com/questions/13922221/jbas011006-not-installing-optional-component-standardservletasyncwebrequest-due,是这样说的:In order to suppress this warning message add following lines to your Jboss config (standalone.xml if you’re using it in standalone mode)。
大致意思是人家用jboss出现了这个问题,给的答案是,把jboss的模式改一下,也就是说出现这个错误是警告,不是错误;另一条信息是:http://stackoverflow.com/questions/13786685/spring3-2-and-jboss-as-7/13905962#13905962,
给的建议是,这仅仅是个警告,无视就行了。

继续查找解决方案,在小程序员网站上:http://www.mincoder.com/article/2040.shtml,
该博主给的建议是: 网上搜索了解决方案是去除debug信息,但是这样不是根本解决办法,我们根据错误信息,来修改。

下面的解决办法是修改源码,添加默认构造器

根据错误信息,找到spring-web 下面的StandardServletAsyncWebRequest类,当然是.java 文件

修改后,会自动生成.class文件,这样用压缩软件打开jar包,把这个class文件拷贝过去。再重新启动就不会报 WARN
/**
* 新增的默认构造器
*/
public StandardServletAsyncWebRequest() {}
public StandardServletAsyncWebRequest(HttpServletRequest paramHttpServletRequest, HttpServletResponse paramHttpServletResponse) {}

但是,发现该构造方法添加后会报错,这个方法暂时不通。根据tomcat不报错但是jetty报错,可知是平台的问题。另外,大家注意这个是java.lang.NoClassDefFoundError错误,而不是java.lang.ClassNotfoundException异常,关于两个异同详情请看这个博客:http://blog.csdn.net/jamesjxin/article/details/46606307

0 0
原创粉丝点击