因为准备进行网站的第二版改版了,但是在改版期间,第一版的维护还要继续,所以今天把tomcat和项目复制了一份,这样分两个版本来运行,但是复制的项目和tomcat,在启动时出现了 Error starting static Resources 的错误,怎么回事?后面去搜索了一下,找到了类似的情况如下:
严重: Error starting static Resources java.lang.IllegalArgumentException:/webapps does not exist or is not a readable directory
其实是在删除了tomcat的webapps下的一个工程后,有些东西没删完全,出现“严重:Error starting static Resources错误”,提示java.lang.IllegalException异常,出现这种情况的原因在于,删除的时候一些配置等没有完全删除。解决方法如下:
1、把conf/server.xml配置文件中的与刚删除的工程的相关连接配置删除; 2、把work\Catalina\localhost文件夹下的与删除工程的文件夹删除;如果不知道哪个才是与删除项目相关的文件夹,把work目录下的文件夹全部删除也可以,不会影响其他工程,在再次运行其他项目时,会自动重建; 3、删除conf\Catalina\localhost下的与删除工程相关的配置文件,全部删除也可。以上的解释和解决方法都不错,各位可以试一下这些方法,如果还不能解决,请往下看,因为我用了上面的方法也是还不能解决。
尝试了好久,发现解决不了,后面认真看了一下反馈回来的信息,发现它指向的目录还是我旧版本项目的目录,但是我旧版本项目的目录已经移动到其他地方了,但是我也改了server.xml的配置了啊,不起作用?究竟在哪里错了?连配置修改了都不起作用?
后面我想,难道是在环境变量里面?我果断去查看了一下环境变量,发现环境变量CATALINA_HOME指向了就版本的tomcat(我的旧版本tomcat目录是 e:\tomcat,而新版本的是d:\tomcat),为什么这个环境变量会使得新的tomcat读取就tomcat的配置呢?那是因为这个环境变量起到指引的作用,从bin\startup.bat这个文件就可以看出来了。startup.bat文件里面开始的时候就有这样的代码:
rem Guess CATALINA_HOME if not definedset "CURRENT_DIR=%cd%"if not "%CATALINA_HOME%" == "" goto gotHomeset "CATALINA_HOME=%CURRENT_DIR%"if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHomecd ..set "CATALINA_HOME=%cd%"cd "%CURRENT_DIR%"
从代码里面不难看出,首先是会对CATALINA_HOME的判断,如果在环境变量里面设置了这个变量,那么接下来的操作都会指向这个变量下,而我的电脑就设置了这个变量,所以我运行了新的tomcat在启动时(即运行startup.bat文件)还是会对这个变量进行判断,而我设置了这个变量的值是旧版的tomcat,所以新的tomcat又被指引到了旧版本的tomcat了。
那么直接改变这个变量的值不就行了吗?是可以,但是只是暂时的,如果我要启动旧版本的tomcat,那旧版本的tomcat又被指向了新版的tomcat了。那怎么办?我的解决方法就是直接删除了它,删除这个环境变量,因为从上面的代码可以看出来,程序对CATALINA_HOME进行了判断,如果CATALINA_HOME不存在则
set "CATALINA_HOME=%CURRENT_DIR%"然后再判断,如下:
if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome
如果目录不对,则返回上一层,在进行设置,设置完成后再返回现在的目录,如下:
cd ..set "CATALINA_HOME=%cd%"cd "%CURRENT_DIR%"这样子下来, CATALINA_HOME就可以设置到了对应的tomcat目录。
解决之后,测试一下两个tomcat的启动,经测试,两个tomcat都可以成功运行,呵呵,问题解决了,记录下来。