今天看了一篇tomcat问题汇总
1.JAVA_HOME
1.1 问题描述:点击startup.bat之后,屏幕一闪而过
1.2 检查问题: 首先通过cmd命令进入控制台,然后切换到对应的目录执行startup命令,得到JRE_HOME environment .... 这个提示,就表示JAVA_HOME环境变量没有设置
1.3 问题分析:Tomcat本身是JAVA程序,必须要有JDK才可以执行,所以必须配置JAVA_HOME。
1.4 解决:先检查jdk是否安装配置成功,再进行tomcat的安装。
2.CATALINA_HOME未设置
2.1问题描述:点击startup.bat之后,屏幕一闪而过
2.2检查问题:首先通过cmd命令进入控制台,然后切换到对应的目录执行startup命令,得到CATALINA_HOME environment .... 这个提示,就表示CATALINA_HOME环境变量设置错误。
2.3问题分析:Tomcat执行必须依赖CATALINA_HOME或者CATALINA_BASE这两个环境变量。 如果没有在环境变量里配置过,那么会自动采用bin目录的父目录作为CATALINA_HOME和CATALINA_BASE。 如果配置了,而所配置的地方又不是正确的TOMCAT目录,那么就会出现这个错误。
2.4解决:
2.4.1. 在环境变量中删除CATALINA_HOME,CATALINA_BASE的配置,记得不仅要检查环境变量,还要检查用户变量.
2.4.2. 或者把CATALINA_HOME设置为正确的TOMCAT目录。
3.CATALINA_HOME错误设置
3.1问题描述:Tomcat可以成功启动,但是就是不能访问自己配置的web应用,老是提示404错误
3.2检查问题:如图所示, 在环境变量里,CATALINA_HOME设置在了另一个合法的tomcat目录上,所以无论运行哪个startup.bat,都会导致这个d:/tomcatxxxx目录下的程序被启动,而不是你期望的那个。
3.3问题分析:默认的Tomcat会优先根据环境变量中的CATALINA_HOME来定位目录,并运行。
3.4解决:
3.4.1. 在环境变量中删除CATALINA_HOME,CATALINA_BASE的配置,记得不仅要检查环境变量,还要检查用户变量。
3.4.2. 或者使用本站的纯净版 Tomcat,已经取消了对环境变量CATALINA_HOME和CATALINA_BASE的依赖。
4.端口冲突
4.1问题描述:提示大量错误,其中会看到提示Address already in use: JVM_Bind <null>:80,即表示端口被占用了。
4.2检查问题:如果是这个错误,在TOMCAT目录下的logs目录里,会有一个日志文件:catalina.yyyy-mm-dd.log(当天时间),在这个日志文件里会记载一样的错误:Address already in use: JVM_Bind <null>:80。即表明80端口被占用了。
4.3问题分析:端口是独占式的,一旦一个程序占用了这个端口,其他程序就不能够再去占用它了。而80端口,有可能是被已经存在的Tomcat占用了,也有可能是被其他不知名的软件占用了,比如Apache,IIS,Oracle等等。
4.4解决:我们分步走:查看80端口被哪些程序占用了 根据pid(进程id) 查询对应的应用程序 根据名称 结束该程序
4.4.1.查看80端口被哪些程序占用了
进入cmd:输入命令:netstat -ano|findstr "80"
找到对应的pid的进程id(假如是1880)
4.4.2 根据pid(进程id)查询对应的程序
进入cmd :输入命令:tasklist|findstr "1880"
会发现某个程序占用了80端口
4.4.3 根据程序的名字结束这个程序
进入cmd :输入命令: taskkill /f /t /im java.exe(java.exe这里是假想的程序名字,具体问题具体分析)
5.404问题 :
404表示File Not Found, 文件不存在错误。
5.1正确的端口号
出现404错误证明,TOMCAT是启动成功了的。 但是在一台计算机上,可以启动多个端口号不一样的TOMCAT, 所以请确保自己访问的是正确的那个端口号,别自己启动的是8080端口号的TOMCAT,但是访问的地址却用的是80端口(默认),这样肯定会出现404错误的。
5.2环境变量
假设有两个Tomcat A和 B,自己分明运行的是B 下的startup.bat, 但是启动的却是A,为什么会这样呢? 这就是环境变量在作祟了。在环境变量中有两个属性:分别是CATALINA_HOME和CATALNIA_BASE,如果这个值指向的是A,那么即便运行的是B下的startup.bat, 真正启动的还会是A。
解决办法: 删除掉这个环境变量,或者使用移除了环境变量影响的纯净版 Tomcat。
5.3确定Web应用是否成功启动
虽然Tomcat启动成功了,但是对应的Web应用启动失败,依然会导致404错误。怎么判断Web应用成功与失败呢? 倘若Web引用启动失败,那么就一定会在Tomcat的logs目录下的 localhost.当前日期.log 里留下错误信息。打开这个文件,检查对应的Web应用是否启动过程中报错了。 也许是web.xml多写了一个标签结束,也许是对应的servlet类找不到。
5.4webapps下的ROOT目录
有的时候,在server.xml 中配置的<context 是以“/"为开始路径的,与此同时,在webapps目录下还存在一个ROOT目录,这个ROOT目录其实也是告诉tomcat,以“/” 为开始路径,那么这样就发生冲突了,Tomcat只能二选一,通常情况下都会选择ROOT目录,那么在server.xml中配置的就<context 就无法启动了,导致访问对应的资源提示404错误。
解决办法就是删除掉ROOT目录,或者把ROOT目录重命名
5.5访问地址的时候是否加了web应用的名称
5.6是否访问对资源了
5.7不能访问WEB-INF目录下的资源
从安全角度触发,TOMCAT不允许访问WEB-INF目录下的HTML,JSP文件。 所以如果你的资源文件放在WEB-INF下,也会提示404错误
5.8核对访问地址