将Apache Tomcat上下文路径设为根路径('/')后,启动/重启时为何会调用Servlet的doGet方法?
为什么Tomcat启动时映射到根路径的Servlet doGet会被自动调用?
这其实是Eclipse集成Tomcat的正常行为,背后是IDE的自动校验机制在起作用,我来给你详细拆解:
Eclipse的部署健康检查:当你在Eclipse中启动或重启Tomcat时,IDE会自动向Web应用的根路径发送一个GET请求,目的是验证应用是否成功部署并能正常响应。因为你的Servlet正好映射到了
/(根路径),所以这个自动触发的请求就会命中你的Servlet,进而调用doGet方法。为什么只有根路径时会触发?:如果你的应用上下文路径是其他值(比如
/myapp),Eclipse的校验请求会指向localhost:8080/myapp;但当上下文设为/时,校验请求直接指向localhost:8080/,刚好匹配你Servlet的映射规则,所以才会触发doGet。这完全是正常行为:这种自动请求不是Tomcat本身的默认行为,而是Eclipse为了提升开发效率添加的功能——帮你自动确认应用部署状态,不用每次启动后手动打开浏览器验证。
你可以做个小测试来验证:在doGet方法里添加一行代码打印请求的User-Agent:
System.out.println("请求User-Agent: " + request.getHeader("User-Agent"));
启动服务器后,你会看到这个请求的User-Agent包含Eclipse相关标识(比如类似Eclipse/4.28),和你手动用浏览器访问的标识完全不同,这就能证明是IDE发起的自动校验请求。
内容的提问来源于stack exchange,提问作者Soni
相关产品推荐
相关产品推荐

