我最近希望使用Tomcat 7(Jboss EWS)将我的java Web应用程序项目部署到openshift。我选择使用eclipse openshift插件并克隆项目并进行更改;但是在发布应用程序之后,我的索引页面加载得很好,除非我希望登录到应用程序时它会引发异常(500服务器端),说明有关的servlet没有实例化。
我尝试了几种方法,使用不同的墨盒,但问题仍然存在,我一直无法找到解决方案。
我尝试将源目标更改为我创建的WEB-INF / classes文件夹,感觉可能是找不到类。我不确定为什么它找不到我的课程。
如果有人之前遇到过这种情况,请善意帮助,我的结构可能完全错误。
这是日志:
例外
javax.servlet.ServletException: Error instantiating servlet class com.asza.controllers.Login
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:683)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.lang.Thread.run(Thread.java:745)
root cause
java.lang.ClassNotFoundException: com.asza.controllers.Login
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:683)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.lang.Thread.run(Thread.java:745)
答案 0 :(得分:1)
很难说你究竟出了什么问题。为了获得最佳帮助,我会要求您提供您的来源,以便我可以尝试,如果可能的话。 此外,我看到您可以尝试以下步骤:
干杯 安德烈
答案 1 :(得分:0)
我尝试将源目标更改为我创建的
WEB-INF/classes
文件夹,感觉可能是找不到类。我不确定为什么它找不到我的课程。
清理,重建,重新部署。
WEB-INF/classes
应该包含所有必需的类,其他类应该在依赖类classpath中。
答案 2 :(得分:0)
感谢所有人及时回复,他们提供了很多帮助。 但是我终于解决了这个问题,我将在此解释;
最初的主要问题是类版本错误,因为我目前正在使用Oracle JDK 8来编译和构建整个应用程序。 因此我不得不降级并选择使用JDK 7,这与我正在使用的openshift tomcat jboss ews cartridge兼容。 (墨盒使用jdk 7)。
然而,其他问题仍然存在;这是:
为了解决这个问题,对于其他可能遇到类似问题的人来说。
在构建了war文件后,(在我的情况下,我使用的是ubuntu,并且正在克隆项目并删除了pom和src文件夹,并将war文件直接放在webapps文件夹中);
在推送到openshift存储库之前,我必须复制我的web.xml并将内容粘贴到该项目的web.xml中的openshift项目(以前克隆的).config /文件夹中。
注意:不要删除项目(openshift cloned)web.xml;而是复制你的servlet映射等等,以便opencat的tomcat可以找到它们;解决了(404未找到错误)。
最后,出于某种原因; tomcat在部署时没有解压缩war文件内容,因此你必须手动编辑./config/config文件并更改值 " unpackWar = false"这是真的,那样;服务器将自动解压缩您的文件。
这些解决方案对我有用,现在一切都很顺利;但是,如果您希望避免编辑openhifts web.xml,也可以将servelt映射放在类注释中....
不要忘记承诺并推动所有变更。