我正在Eclipse中开发Java Dynamic Web Project。一切都运行得很顺利,直到我意识到我的包名是大写的,并决定改变它们。
更改后,我在运行时获取ClassNotFoundExceptions。代码编译得很好。据我所知,这是一个运行时类路径问题。
此处显示错误:
javax.servlet.ServletException:实例化servlet类时出错 Controllers.LoginServlet org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:395) org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:250) org.apache.coyote.http11.Http11Protocol $ Http11ConnectionHandler.process(Http11Protocol.java:188) org.apache.tomcat.util.net.JIoEndpoint $ SocketProcessor.run(JIoEndpoint.java:302) java.util.concurrent.ThreadPoolExecutor.runWorker(未知来源) java.util.concurrent.ThreadPoolExecutor $ Worker.run(未知来源) java.lang.Thread.run(未知来源)
根本原因
java.lang.NoClassDefFoundError:Model / Converter db.UserHelper。(UserHelper.java:34) Controllers.LoginServlet(LoginServlet.java:36) sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法) sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) sun.reflect.DelegatingConstructorAccessorImpl.newInstance(未知 来源)java.lang.reflect.Constructor.newInstance(未知来源) java.lang.Class.newInstance(未知来源) org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:395) org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:250) org.apache.coyote.http11.Http11Protocol $ Http11ConnectionHandler.process(Http11Protocol.java:188) org.apache.tomcat.util.net.JIoEndpoint $ SocketProcessor.run(JIoEndpoint.java:302) java.util.concurrent.ThreadPoolExecutor.runWorker(未知来源) java.util.concurrent.ThreadPoolExecutor $ Worker.run(未知来源) java.lang.Thread.run(未知来源)
根本原因
java.lang.ClassNotFoundException:Model.Converter org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1676) org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521) db.UserHelper。(UserHelper.java:34) Controllers.LoginServlet(LoginServlet.java:36) sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法) sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) sun.reflect.DelegatingConstructorAccessorImpl.newInstance(未知 来源)java.lang.reflect.Constructor.newInstance(未知来源) java.lang.Class.newInstance(未知来源) org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:395) org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:250) org.apache.coyote.http11.Http11Protocol $ Http11ConnectionHandler.process(Http11Protocol.java:188) org.apache.tomcat.util.net.JIoEndpoint $ SocketProcessor.run(JIoEndpoint.java:302) java.util.concurrent.ThreadPoolExecutor.runWorker(未知来源) java.util.concurrent.ThreadPoolExecutor $ Worker.run(未知来源) java.lang.Thread.run(未知来源)
这是我的文件夹结构的屏幕截图:
src / Controllers和src / Model是我切换到小写的软件包。我把它们换回来希望解决这个问题,但无济于事。
我尝试通过Run - >检查项目的运行时类路径。运行配置,但该项目未列在那里。
以下是我的Web部署程序集的快照:
有谁知道如何解决这个问题?任何帮助将不胜感激。
找到解决方案
感谢大家的回复。谢天谢地,我设法解决了这个问题:
而且,瞧。我不完全确定我的行为为什么或如何解决问题,但如果有人能够解释我会非常有兴趣听到它。现在我很高兴它运行起来。
答案 0 :(得分:0)
在web.xml中,您可以引用Model.Converter类。您需要将其更改为model.Converter。
答案 1 :(得分:0)
如果我们将包名更改为大写,我们必须检查是否所有带有该包的引用都被修改。正如你所说,如果你尝试运行小写的包名称工作正常。如果您尝试使用IDE修改包名称,也会要求更新引用。检查一下。
注意: * 根据java编码标准,软件包名称应为小写。 *