ServletException:在OPENSHIFT Tomcat 7(Jboss EWS)上实例化servlet类时出错

时间:2015-06-28 13:29:45

标签: java tomcat servlets jboss openshift

我最近希望使用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)

3 个答案:

答案 0 :(得分:1)

很难说你究竟出了什么问题。为了获得最佳帮助,我会要求您提供您的来源,以便我可以尝试,如果可能的话。 此外,我看到您可以尝试以下步骤:

  • 当推送到openshift时,会触发maven构建。该构建的输出应该告诉您如何打包类(尤其是文件夹)。它告诉你/ classes是打包的吗?
  • 您是否尝试部署到本地服务器?如果可以,那么我们知道您的应用程序都很好,并且您面临一个特定于openshift的问题。

干杯 安德烈

答案 1 :(得分:0)

  

我尝试将源目标更改为我创建的WEB-INF/classes文件夹,感觉可能是找不到类。我不确定为什么它找不到我的课程。

清理,重建,重新部署。

WEB-INF/classes应该包含所有必需的类,其他类应该在依赖类classpath中。

答案 2 :(得分:0)

感谢所有人及时回复,他们提供了很多帮助。 但是我终于解决了这个问题,我将在此解释;

最初的主要问题是类版本错误,因为我目前正在使用Oracle JDK 8来编译和构建整个应用程序。 因此我不得不降级并选择使用JDK 7,这与我正在使用的openshift tomcat jboss ews cartridge兼容。 (墨盒使用jdk 7)。

然而,其他问题仍然存在;这是:

  1. Openshift tomcat cartridge不会找到我的脚本和文件(html,jsp,servlets);在尝试访问servlet时,服务器将返回404错误(未找到);它不会看到servlet。 (奇怪!)
  2. 为了解决这个问题,对于其他可能遇到类似问题的人来说。

    在构建了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映射放在类注释中....

    不要忘记承诺并推动所有变更。