Tomcat部署Web应用后Servlet报404错误,本地运行正常
解决Servlet部署到远程服务器后出现404的问题
咱们一步步来排查可能的原因,帮你解决这个头疼的404问题:
1. 确认远程服务器的Web容器支持Servlet 3.0规范
你在web.xml里用的是Servlet 3.0的配置,同时代码里也用了@WebServlet注解——这俩都需要Web容器支持Servlet 3.0才行(比如Tomcat 7及以上版本)。如果远程服务器的Tomcat版本低于7,那注解和3.0的配置都会失效。
- 解决办法:要么升级服务器的Web容器到支持Servlet 3.0的版本;要么把
web.xml降级到2.5版本(修改schema为2.5的路径,去掉版本3.0的配置),同时确保web.xml里的Servlet映射配置完全正确。
2. 检查Servlet类的包路径是否匹配
你在web.xml里配置的Servlet类路径是beans.FAQ,那远程服务器上的class文件必须放在WEB-INF/classes/beans/FAQ.class这个位置。很多时候部署时会不小心破坏包结构,比如把FAQ.class直接放在WEB-INF/classes下,这就会导致容器找不到这个类。
- 验证步骤:登录远程服务器,找到应用的
WEB-INF/classes目录,确认beans子目录存在,且里面有FAQ.class文件,文件大小和本地编译后的一致。
3. 确认应用的上下文路径是否正确
你访问的是www.mysite/faq,这要求你的应用必须部署在服务器的根上下文(也就是Tomcat的webapps/ROOT目录)下。如果你的应用是部署在子路径(比如webapps/myapp),那正确的访问路径应该是www.mysite/myapp/faq,直接访问/faq自然会404。
- 解决办法:要么把应用打包后改名为
ROOT.war上传部署;要么在服务器的Web容器里配置虚拟主机,把你的应用设置为根上下文。
4. 清理服务器缓存并重新部署
有时候服务器会缓存旧的部署文件,哪怕你更新了class文件,容器还是在加载旧的配置。试试这些操作:
- 停止Web容器(比如Tomcat)
- 删除服务器上应用的临时缓存(比如Tomcat的
work目录下对应你的应用的文件夹) - 本地先清理NetBeans的编译目录(Build -> Clean Project),然后重新构建生成干净的war包
- 把新的war包上传到服务器,重新部署并启动Web容器
5. 查看服务器日志定位具体错误
这是最关键的一步!Web容器的日志(比如Tomcat的catalina.out或者localhost.log)里会记录Servlet加载失败的详细原因——比如ClassNotFoundException(类找不到)、配置解析错误等。
- 操作步骤:登录远程服务器,找到Web容器的日志目录,查看最近的日志记录,找有没有和
FAQServlet相关的错误信息,这些信息能直接帮你定位问题根源。
内容的提问来源于stack exchange,提问作者johndig
相关产品推荐
相关产品推荐

