如何解决ClassNotFoundException:Eclipse中带有Struts2的HttpServletRequest
我有一个项目(GIT)的2个版本,最旧的(工作正常)和新的一个版本(不起作用-如下所述)。
这是我在Eclipse中遇到的错误:
août 18,2020 4:22:24 PM org.apache.catalina.core.StandardContext filterStart
GRAVE: Exception au démarrage du filtre struts2
java.lang.NoClassDefFoundError: HttpServletRequest
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
at java.lang.Class.privateGetPublicMethods(Unknown Source)
at java.lang.Class.getMethods(Unknown Source)
at org.apache.struts2.convention.PackageBasedActionConfigBuilder.getActionAnnotations(PackageBasedActionConfigBuilder.java:877)
at org.apache.struts2.convention.PackageBasedActionConfigBuilder.buildConfiguration(PackageBasedActionConfigBuilder.java:689)
at org.apache.struts2.convention.PackageBasedActionConfigBuilder.buildActionConfigs(PackageBasedActionConfigBuilder.java:355)
at org.apache.struts2.convention.ClasspathPackageProvider.loadPackages(ClasspathPackageProvider.java:53)
at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:274)
at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:67)
at org.apache.struts2.dispatcher.Dispatcher.getContainer(Dispatcher.java:967)
at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:435)
at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:479)
at org.apache.struts2.dispatcher.ng.InitOperations.initDispatcher(InitOperations.java:74)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.init(StrutsPrepareAndExecuteFilter.java:57)
at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:279)
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:260)
at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:105)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4583)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5207)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: HttpServletRequest
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1333)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1167)
... 27 more
GRAVE: Exception au démarrage du filtre struts2
可以翻译成SEVERE: Exception in start of struts2 filter
我看到了这个答案java.lang.ClassNotFoundException: HttpServletRequest,但是我已经不在Tomcat / lib中的WEB-INF / lib文件夹中了servlet-api。我在当前修改的项目和旧的项目之间拥有完全相同的.jar
。
对此我该怎么办?
解决方法
错误来自约定插件。该插件用于按照约定创建其他配置对象。如果您大量使用批注为Struts动作定义基于Java的配置,则它会调用反射机制来处理创建运行时配置元素。
NoClassDefFoundError
表示您在当前类加载器的类路径上缺少某些类。通常,它是通过向类路径中添加缺少的jar来解决的。
如果您的应用程序使用与servlet容器不同的类加载器,则可以忽略它。 Tomcat是一个Servlet容器,它在多线程池中使用多个类加载器。它还可能存在8.x版本中发现的错误。
在许多情况下,损坏的servlet环境中缺少类会导致更改/更新servlet容器本身并从Maven中央存储库下载正确的依赖项。
,我终于找到了解决方案,但是由于我不知道该怎么做,所以我犹豫了。
我正在尝试:
将现有的Eclipse服务器复制到另一个文件夹中。 在Eclipse的“服务器”视图中使用新文件夹创建一个新服务器。 在新服务器上单击鼠标右键->清理并清理Tomcat工作目录... 转到运行->运行配置
完全随机动作: 双击其中一台服务器
服务器实例启动。停下来。重新启动您的项目。问题消失了。
我认为干净的发布是我所需要的,但我们永远不会知道。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。