我正在设置一个Tomcat服务器来承载JSP站点。 我在Eclipse中创build了一个testing应用程序,以确保一切正常。 它所做的只是在JSP中打印文本,然后在打印文本的自定义类中调用一个函数。 这在Eclipse中运行良好(与Tomcat运行在同一台计算机上),当我将程序编译为WAR文件并尝试从Tomcat运行时,它会引发exception:
message javax.servlet.ServletException: java.lang.UnsupportedClassVersionError: jsp/test/TestClass : Unsupported major.minor version 51.0 (unable to load class jsp.test.TestClass) description The server encountered an internal error that prevented it from fulfilling this request. org.apache.jasper.JasperException: javax.servlet.ServletException: java.lang.UnsupportedClassVersionError: jsp/test/TestClass : Unsupported major.minor version 51.0 (unable to load class jsp.test.TestClass) org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:549) ... root cause javax.servlet.ServletException: java.lang.UnsupportedClassVersionError: jsp/test/TestClass : Unsupported major.minor version 51.0 (unable to load class jsp.test.TestClass) org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:912) ... root cause java.lang.UnsupportedClassVersionError: jsp/test/TestClass : Unsupported major.minor version 51.0 (unable to load class jsp.test.TestClass) org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2899) ...
我应该指出,一旦我刷新页面,错误更改为UnsupportedClassVersionError并丢失“major.minor”的东西。 不知道那里发生了什么事。
谷歌已经告诉我,这与运行时比编译器老版本有关,但据我所知,Eclipse和Tomcat都使用最新版本。 他们在同一台计算机上,所以他们应该使用相同的JAVA_HOMEvariables吗? 我有许多不同的JRE / JDK安装,我尝试过几个JAVA_HOME,虽然没有任何改变(我重新启动Tomcat每次)。 截至目前,它是:
JAVA_HOME = C:\Program Files\Java\jdk1.7.0_25 Path = C:\Program Files\Java\jdk1.7.0_25\bin; ...
还有什么需要为Tomcat设置使用这个版本的Java? 还是有一个不同的位置,我需要指向JAVA_HOME? 我已经尝试了几个JRE装置,但是什么也没有。 任何想法与此?
这一切都是在Windows Server 2008 R2上使用Tomcat 7完成的。
提前致谢。
道格
在Eclipse中,转到您的项目首选项,转到Java编译器设置。
什么是编译器合规性级别 ?
如果您正在使用Java 7运行Tomcat 7,那么合规性级别应设置为1.7 。 如果不是,那么这可能是你的问题。 尽pipe它只要<= 1.7就可以 ,但是你不可能为Eclipse 8的快照configurationeclipse吗?
无论哪种方式,知道这个值可能有助于说明问题。
当您编译“with”一个版本(以一个版本为目标)并使用以前的java版本执行时,始终显示UnsupportedClassVersionError 。
JAVA_HOME不会告诉操作系统在哪里查找java.exe文件。 操作系统将从PATHvariables中获取该文件。 这就是为什么build议在PATHvariables的开头添加pathJAVA_HOME/bin 。
如果不是这种情况,stacktrace(错误信息的其余部分)可能会有用。 特别是“不受支持的major.minor”或类似的东西,和数字。
附加信息 。
你如何通过Eclipse(WTP)将代码部署到Tomcat中,或者是使用特定的构build工具构buildWAR并将其手动部署到本地Tomcat?