又见SERVER: Error filterStart

      又耗费了将近的一天的时间,都是因为这个恼人的SERVER: Error filterStart.

      今天要把原来一个运行良好的网站发布到另外一台服务器上,原本应该是很简单的事情,在估计任务时,我只给它了半天时间(其实已经是多的了,只需要安装Tomcat和新建一个数据库即可)。可是当我把原来的程序复制到tomcat的webpps目录下以后,在浏览器输入地址浏览,才发现大事不妙,页面显示无法找到资源。首先想到的,就是查看tomcat的log。

      7-Jul-10 10:18:40 AM org.apache.catalina.core.StandardContext start SEVERE: Error filterStart 7-Jul-10 10:18:40 AM org.apache.catalina.core.StandardContext start SEVERE: Context [/test] startup failed due to previous errors

      看到这句话就知道大事不妙,因为曾经有过类似的经验,这次就知道是由于JDK版本不对引起的问题。问题在于:这两台服务器的道理有什么不同?

      1. 是不是Tomcat的版本不一致?Log里写的清楚:INFO: Starting Servlet Engine: Apache Tomcat/5.5.23

          看来这个问题不存在。

      2. 那肯定就是两台服务器的Java环境配置有问题。运行java -version 命令查看,都是:OpenJDK(1.6.0)。看来这个问题也不存在

      这不就奇怪了吗?!!

      先把Filter去掉,看看运行里面的Servlet是不是会有更加明确的错误信息。果不其然,被我逮到了:

      web.servlet.BugManageServlet (unrecognized class file version) 

            java.lang.VMClassLoader.defineClass(libgcj.so.7rh)

      看来还是Java环境设置有问题。Google一下吧,发现下面一篇文章:

     http://www.linuxquestions.org/questions/linux-newbie-8/unrecognized-class-file-version-when-running-simple-java-program-686753/

      原来是因为javac和java不同版本造成的。可是我的程序都是编译过直接复制到Tomcat下面的,难道也存在这个问题?(如果有对Tomcat内部细节了解的大侠看到,能帮忙解答下,不胜感激!)不管怎么样,先检查再说,果然问题浮现:

       java -version: 1.6.0

    javac -version: 1.4.2

      虽然看到了不一样(问题2是存在),还是有些怀疑。不过现在也别无它法,将二者改为一致版本总归没有坏处。不过上面帖子中提到的命令不太会用。接着Google,发现:

      在CentOS上安装Sun-JDK1.6

      想想在Console中下载和安装Sun JDK实在麻烦,就先作为备选方案,接着看Open JDK。因为之前已经安装了Open JDK,就想用alternatives命令,结果提示命令不存在,就赶紧向旁边的Linux大牛Alix请教。他说切换到root时,使用"sudo su -",后面的减号一定要加上,这样就可以重新加载bash profile。果真灵验,牛!

      alternatives --config java

      已经是open-jdk-1.6.0

      alternatives --config javac

      选项中只有jdk-1.4.2,没有其他可选项。看来安装的Open JDK中,不包含javac命令,那就说只安装了jre(/usr/lib/jvm/java-1.6.0-openjdk.x86_64目录里只有jre)。

      于是:yum search jdk

      出来了一个长长的列表,一眼就看了java-1.6.0-openjdk-devel.x86_64,好像想起有文章说过要编译java程序,需要安装这个development包。为了安全起见,直接

      yum install java-1.6.0-openjdk-*

      安装完毕,重新alternatives --config javac,这次多了open jdk 1.6.0的选项。

      然后,清空tomcat/work目录,重启tomcat,浏览器访问,OK!

 

      我的另外一篇文章:由于JRE版本导致的Error filterStart问题

你可能感兴趣的:(java,jdk,tomcat,server,servlet,服务器)