XAMPP 不支持直接运行 Java Web 项目,因其 Apache 与 Tomcat 是分离进程,默认无 AJP 或代理配置;需将 WAR 包部署到 tomcat/webapps/ 并访问 8080 端口,或手动配置 Apache 的 mod_proxy_ajp 与 Tomcat 的 AJP 连接器。

XAMPP 本身不支持 Java Web 项目运行,它内置的 Tomcat 模块仅作为独立服务存在,无法与 Apache(httpd)直接协同处理 .jsp 或 servlet 请求。 你不能像部署 PHP 那样把 Java Web 项目丢进 htdocs 目录就跑起来。
为什么 XAMPP 的 Tomcat 不能直接跑你的 WAR 包?
XAMPP 中的 tomcat 和 apache 是两个完全分离的进程:Apache 监听 80 端口处理静态文件和 PHP,Tomcat 监听 8080(默认)端口处理 Java Web 请求。它们之间没有配置 AJP 连接器或反向代理,默认互不通信。
常见错误现象包括:
- 把
myapp.war放进htdocs/→ 404 或直接下载 WAR 文件 - 访问
http://localhost:8080/myapp/却提示 404 → 项目没部署到tomcat/webapps/,或未解压、web.xml有语法错误 - 以为改了
httpd.conf就能代理 JSP → 实际没启用mod_proxy_ajp,也没配ProxyPass
正确部署方式:绕过 Apache,直连 Tomcat
最简单可靠的做法是放弃让 Apache 参与 Java 请求,直接用 Tomcat 提供的服务能力:
立即学习“Java免费学习笔记(深入)”;
- 将你的 WAR 包复制到
xampp/tomcat/webapps/目录下(如myapp.war) - 确保
xampp/tomcat/bin/startup.bat(Windows)或startup.sh(Linux/macOS)已执行,且控制台无SEVERE错误 - 访问
http://localhost:8080/myapp/(不是 80 端口!) - 若需改端口,编辑
xampp/tomcat/conf/server.xml,修改Connector port="8080"这一行
注意:webapps/ROOT 是默认首页,替换它可让 http://localhost:8080/ 直接指向你的应用。
如果非要 Apache 前置代理(比如统一走 80 端口),必须手动配置 AJP
这不是 XAMPP 开箱即用的功能,需要你主动打通 Apache 与 Tomcat 的通信链路:
- 确认
xampp/apache/conf/httpd.conf已启用mod_proxy和mod_proxy_ajp(取消这两行前的#):LoadModule proxy_module modules/mod_proxy.so<br>LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
- 在
httpd.conf末尾添加代理规则(示例):ProxyPass /myapp ajp://localhost:8009/myapp<br>ProxyPassReverse /myapp ajp://localhost:8009/myapp
- 检查
xampp/tomcat/conf/server.xml中是否启用了 AJP Connector(默认是开启的,端口8009):<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
- 重启 Apache 和 Tomcat;此时访问
http://localhost/myapp/才会转发给 Tomcat
容易踩的坑:mod_proxy_http 不能替代 mod_proxy_ajp 处理 servlet 容器通信;redirectPort 不影响代理行为,但影响 HTTPS 重定向逻辑;路径末尾斜杠必须一致,否则 ProxyPassReverse 会失效。
Java 版本与 Tomcat 兼容性必须匹配
XAMPP 自带的 Tomcat 版本固定(例如 XAMPP 8.2 内置 Tomcat 10.1),它对 JDK 有明确要求:
- Tomcat 10.1+ 要求 JDK 11+,不兼容 JDK 8
- 若你用 Maven 编译项目,
source和target必须 ≤ Tomcat 所用 JDK 的版本 - 启动失败时检查
xampp/tomcat/logs/catalina.out,常见错误如:UnsupportedClassVersionError就是 JDK 版本过高 - 不要试图用 XAMPP 控制面板里的 “Java” 按钮——那只是启动一个空 JVM 示例,跟 Web 部署无关
实际项目中,JDK、Servlet API 版本、Tomcat 主版本三者错一个,web.xml 解析或注解扫描就会静默失败,页面空白但日志里可能只有 WARN。
真正麻烦的从来不是“怎么放文件”,而是路径、端口、协议、JDK、Servlet 规范这五层嵌套校验——任一环断开,浏览器就只给你一个干净的 404 或白页,连报错都懒得吐。

















