关于tomcat配置docBase和ROOT 那些事儿(一)

本文介绍了在Windows环境下,使用Eclipse开发Web项目时Tomcat的Context配置。通过设置`<Context path="/" docBase="D:/workspace/dafan/WebContent" debug="0" />`,可以实现通过http://localhost:8080直接访问web工程的欢迎页面。然而,访问`/dafan/index.jsp`或不带前缀的URL会导致Tomcat在webapps目录下查找资源,引发访问问题。当URL以`/`或不带前缀时,Tomcat认为是空字符串,导致冲突。理解这些配置有助于解决Tomcat部署时的路径问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


做java web开发的,经常和tomcat的配置打交道,你今天不费点时间搞清楚,你会发现早晚还要继续浪费时间

上下文:

windows环境下,eclipse开发web项目

D:\workspace下有一web工程dafan,里面就一个index.jsp欢迎页面(在web.xml的<welcome-file-list>中)
D:\pro\apache-tomcat-7.0.62是tomcat的位置


用eclipse添加删除发布web工程就不讨论了,有问题一会删一会加一会clean,慢而且不知道问题出在哪
以下说说手动配置的方式:
在D:\pro\apache-tomcat-7.0.62\conf下server.xml中</Host>之前加入以下配置:

<Context path="/" docBase="D:/workspace/dafan/WebContent" debug="0" />

看来Context  path docBase就是一行配置。。。

启动tomcat(用eclipse配置并启动,控制台查看相关信息),

成功后直接浏览器http://localhost:8080成功访问web工程的欢迎页面。


下面问题来了:


Q:以下方式能不能成功访问:
http://localhost:8080/
http://localhost:8080/dafan

http://localhost:8080/dafan/index.jsp

A:第一个访问docBase指向的资源能,后面两个从webapps下找不到不能


Q:如果把dafan这个工程copy到webapps下面会怎样?

A:那上面的方式都能够访问,"/"或""通过path对应到docBase指向的资源去了,最后访问到index.jsp

/dafan或者/dafan/index.jsp没有path都到tomcat的webapps下去找,最后访问到index.jsp

加.jsp表示直接去寻找某个jsp文件,不加依然会通过web.xml中的<welcome-file-list>找到

其实你试试让两个地方的jsp内容不一致就明白了。


Q:那这样呢 <Context path="/" docBase="D:/workspace/dafan/WebContent/" debug="0" />
A:这个配置在/WebContent后面又多了个"/",答案是一样的,不要纠结,docBase="D:/workspace/dafan/WebContent//"一样能,明白?

Q:那要是这样呢<Context path="" docBase="D:/workspace/dafan/WebContent" debug="0" />
A:一样的,没有差别

Q:靠,那如果这样呢:
<Context path="" docBase="D:/workspace/dafan/WebContent" debug="0" />
<Context path="/" docBase="D:/pro/apache-tomcat-7.0.62/webapps/dafan/" debug="0" />

A:tomcat说java.lang.IllegalArgumentException: addChild:  Child name '' is not unique,

看来他把""和"/"都当作zero length String 了,可参考源码

这里也说明,path不能相同,有两个/xxx是不行的,每个path会对应到相应的资源位置

Q:那我要是在webapps下面建立ROOT文件夹,把dafan这个工程下面的资源全部放进ROOT会怎样?
注:server.xml当前的配置为<Context path="" docBase="D:/workspace/dafan/WebContent" debug="0" />
A:ROOT表示当访问不带前缀时,指向ROOT下面的资源,但是这里docBase已经将不带前缀的访问占用了,localhost:8080依然会访问到docBase指向的资源而不是webapps中ROOT下的资源

Q:如果去掉上面的Context配置呢?

A:此时不带前缀的访问就会指向webapps中ROOT下的资源,

但是/dafan,/dafan/index.jsp都不行,因为webapps根目录中并无对应资源。。


累,下次继续说说以下情况:
1、使用war发布的情况(生产环境常用)
2、apache-tomcat-7.0.62\conf\Catalina\localhost\***.xml这个是怎么回事
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值