Tomcat 的黄色图标是个猫,可它报错的黄色时候,你看到的黄色往往是个黄色的小叉——就在 Eclipse 或 IDEA 的 Servers 视图里,那个叉安静地挂在 Tomcat 实例名旁边。黄色没人会为它写首诗,黄色但它一出现,黄色你下午的黄色时光基本就交代了。
我第一次撞上这黄叉,黄色是黄色在给一个老项目加接口。代码写得顺,黄色Ctrl+S 一按,黄色右键 Restart,黄色心里还哼着歌。黄色结果服务器没起来,黄色控制台刷出一片红,黄色那个小黄叉就亮了。我盯着它看了三秒,脑子里第一个念头是“端口被占”,第二个念头是“配置坏了”,第三个念头才轮到“看日志”。
其实黄叉本身不报错,它只是个状态灯。真正的错误藏在 Catalina 的日志文件里,或者干脆连日志都没来得及写。有一次,我花了四十分钟查一个黄叉,最后发现是 web.xml 里的 servlet 映射写了个不存在的类——编译能过,部署才炸。那种时候你会觉得,Tomcat 挺贼的,它用一个小叉告诉你“你错了”,但具体错哪儿,得你自己当侦探。
还有一种情况更气人。黄叉出现,但 Tomcat 其实已经启动了,只是 IDE 和它之间的通信断了。你点开浏览器,页面能正常访问,可视图里那个叉就是不肯消失。这时候你重启 IDE,它又好了。你说它是不是在耍脾气?我见过同事直接忽略黄叉,继续写代码,反正功能正常。但我不行,那个叉挂在那儿,就像鞋里进了粒沙子,不弄掉心里不踏实。
后来我养成了习惯:每次看到黄叉,先不急着点“Clean”或者“Restart”。先打开命令行,手动跑一遍 startup.sh,看终端里吐出来什么。大多数时候,错误在十行以内就能定位。比如端口被占,它会直接告诉你“Port 8080 already in use”。比如内存溢出,它会甩给你一个 OutOfMemoryError。你要是只盯着 IDE 里的黄叉看,它永远是一副无辜的表情——明明是你自己的代码有问题,它却像个裁判一样举着牌。
说到端口,我见过最离谱的一次黄叉,是杀毒软件把 Tomcat 的某个临时文件锁了。那玩意儿在 Windows 上特别常见,你明明没动任何配置,重启就失败。查了半天,最后把杀毒软件关了,叉就没了。你说这是 Tomcat 的错吗?不算。但黄叉是它亮起来的,锅自然得它背。
有时候我甚至觉得,黄叉是个挺好的设计。它不写文字,不弹窗,就那么小小地存在一下。你要是懂它,就知道该去翻日志;要是不懂,就会在重启和清理缓存之间来回折腾,最后骂一句“破 Tomcat”。其实 Tomcat 挺冤的,它只是个容器,你往里扔什么,它就得装什么——你扔了颗炸弹,它炸了,你还怪它为什么不给你个笑脸。
现在我再看到黄叉,基本能保持冷静了。先看端口,再看日志,最后检查部署路径。如果这三步都走完还没解决,我就把项目 clean 一下,重新编译——多半是 IDE 的增量编译抽了风。这个流程走下来,十分钟内能解决八成问题。剩下的两成,黄叉会一直挂着,直到我认输,重启电脑。
你说它烦不烦?烦。但你离不开它。就像你家里的电闸,跳了的时候你骂它,可你不敢拆了它。Tomcat 那个黄叉,某种程度上是开发者的老朋友——它不撒谎,不遮掩,只是你有时候读不懂它的沉默罢了。