推荐使用conf/Catalina/localhost/下的XML文件配置虚拟目录,无需重启且安全;修改server.xml虽快但易致启动失败;改端口需确保唯一性并重启生效。

直接改 server.xml 最快,但改错会导致 Tomcat 启动失败;用 conf/Catalina/localhost/ 下的 XML 文件映射虚拟目录更安全,改完不用重启。
修改 Tomcat 默认端口号(8080 → 其他)
Tomcat 启动失败、浏览器打不开 http://localhost:8080,十有八九是端口被占或配置写错。关键就两步:
- 打开
$CATALINA_HOME/conf/server.xml,找到这一行:<connector port="8080" protocol="HTTP/1.1" ...></connector> - 把
port="8080"改成你想用的,比如port="8081"或port="80"(后者需管理员权限) - 注意别和其他 Connector 冲突:同一份配置里不能有两个
port="8080",也不能和<server port="8005"></server>或<connector port="8009" protocol="AJP/1.3"></connector>碰上
改完必须重启 Tomcat 才生效。如果启动报错,看日志里有没有 Address already in use 或 Failed to start component —— 前者说明端口真被占了,后者大概率是 XML 标签没闭合或属性值漏引号。
在 server.xml 里配虚拟目录(不推荐新手直接用)
这种写法最直白,但风险高:一旦写错 XML 结构,整个 Tomcat 都起不来。只适合单项目、临时调试。
- 在
<host name="localhost" appbase="webapps" ...></host>标签内部加一行:<context path="/myapp" docbase="D:/projects/myweb" reloadable="true"></context> -
path是浏览器访问路径,必须以/开头;docBase必须是绝对路径(Windows 用D:/,别用D:\—— 斜杠方向错会静默失败) -
reloadable="true"在开发期有用,但生产环境务必关掉,否则类加载器反复重建,内存泄漏风险高
常见坑:docBase 指向的目录里必须包含 WEB-INF/web.xml(哪怕空文件),否则 Tomcat 当它不是 Web 应用,直接忽略。
用 conf/Catalina/localhost/ 下的 XML 文件映射虚拟目录(推荐)
这是 Tomcat 官方文档明确支持的“热部署”方式,改完立刻生效,不碰主配置,也不用重启。
- 在
$CATALINA_HOME/conf/Catalina/localhost/目录下新建一个文件,比如demo.xml - 内容只写一行:
<context docbase="E:/dev/demo-web"></context>(不用写path,文件名demo.xml就自动对应路径/demo) - 如果想让项目响应根路径(即
http://localhost:8081/),就把文件命名为ROOT.xml,内容仍是<context docbase="..."></context>
这个方式不依赖 appBase,docBase 可以跨盘符、跨目录,且即使 XML 文件语法错误,也只影响这一个应用,不会拖垮整个服务器。
为什么改完端口或虚拟路径后访问 404?
不是配置没生效,而是路径逻辑没理清:
- 端口改了,但浏览器还输
http://localhost:8080/myapp—— 记得同步改 URL 里的端口号 - 用
server.xml配了path="/myapp",但docBase指向的是一个没打包的源码目录,里面缺WEB-INF—— Tomcat 不认 - 用
localhost/demo.xml方式,但文件放在了conf/下而非conf/Catalina/localhost/—— 路径少了一级,Tomcat 直接无视 - Windows 下路径用了反斜杠
\,XML 解析器卡住,建议统一用正斜杠/
真正容易被忽略的是:Tomcat 对 XML 文件的加载顺序和命名规则极其严格,ROOT.xml 和 demo.xml 的大小写、扩展名、存放位置,错一点就完全不加载 —— 不报错,也不提示,只能靠日志里找 Deploying configuration descriptor 这类线索。

















