在localhost上调试我的webapp时,一切运行良好,但在将其部署到服务器(Microsoft Azure,操作系统:Ubuntu 14.04 tomcat7 + apache)时,找不到jcaptcha servlet,并将其抛出为“java.lang” .NoClassDefFoundError:无法初始化类“
type Exception report
message Servlet execution threw an exception
description The server encountered an internal error that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: Servlet execution threw an exception
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:88)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
root cause
java.lang.NoClassDefFoundError: Could not initialize class com.tjw.hrmanage.util.jcaptcha.CaptchaServiceSingleton
com.tjw.hrmanage.util.jcaptcha.JcaptchaServlet.doGet(JcaptchaServlet.java:40)
javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:88)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.52 (Ubuntu) logs.
答案 0 :(得分:0)
这是因为你在ubuntu中的app无法找到相应的jar文件。您可以将此类的jar文件添加到/ lib,并在' build path'中为此jar添加引用。在eclipse中,然后再将你的项目重新部署到azure。
答案 1 :(得分:0)
众所周知,导致此错误的原因有三个。
CLASSPATH
中,没有确定的知道它的方法,但很多时候你可以看看打印System.getProperty("java.classpath")
它会从那里打印类路径你至少可以了解你的实际运行时类路径。-classpath
选项运行,如果它正在运行,那么这是一个确定的短信,表明某人正在覆盖java类路径。根据我的经验,我认为您的问题与第一个案例相符。请检查您的代码和引用的库。
答案 2 :(得分:0)
我将jdk版本从openjdk7更改为java-8-oracle并重启我的tomcat,然后一切运行良好,非常感谢您的回答。