我们在开发完javaWeb项目后,是需要把项目发布到服务器中,这里我们以Tomcat服务器(我用的是Tomcat7),我用的是Eclispe,来举例!
我今天要说的一个问题就是,我们在浏览器中访问javaWeb项目的时候,是以http://+ip地址+端口号+项目名称 的方式来访问我们的项目的(如我的端口号是8888,我的项目名称叫xml,那么在浏览器中访问的时候就是 http:127.0.0.1:8888/xml),大家有没有想过http:127.0.0.1:8888/xml这样在浏览器中访问项目,感觉是不是url特别的长,有没有办法能直接http:127.0.0.1:8888这样访问,这样是不是就很方便了,我们不需要输入项目名称了,而是直接通过http://+ip地址+端口号(http:127.0.0.1:8888)这样的方式直接访问到我们的项目!
接下来,就告诉大家怎么做?
方式1:修改 tomcat目录/conf/server.xml,修改server.xml文件,如下图
appBase属性表示应用程序基本目录,即存放应用程序的目录
<Host>节点中增加一个节点,如下:
<Context docBase="xml" path="/ddd" reloadable="true" />
docBase属性表示指定Web项目的文件路径,可以给绝对路径,也可以给相对于<Host>的appBase属性的相对路径。
path属性表示web项目的访问路径(即在浏览器中的url),我这里写的是path="/ddd",path属性的值你可以随便写,写的是什么,那么等下在浏览器中访问的时候就是什么!为了规范起见,我个人建议把path的值设置成和项目名称一样,即path="/xml"。
reloadable属性表示如果这个属性设为true,tomcat服务器在运行状态下会监视在WEB-INF/classes和WEB-INF/lib目录下class文件的改动,如果监测到有class文件被更新的,服务器会自动重新加载Web项目。因为reloadable="true"比较耗费资源,所以reloadable="true"一般是用于开发阶段,这样比较方便调试,如果项目正式上线了的话,那就改成reloadable="false",如果我没记错的话,该属性的默认值为false
ok,接下来,我们启动tomcat服务器,然后在浏览器中输入url,来访问我的web项目。
在浏览器中输入http://127.0.0.1:8888/ddd/
访问项目成功了。
接下啦,我们要做的就是希望在浏览器中输入http://127.0.0.1:8888直接访问我的javaWeb项目,该如何做呢?其实很好办,把<Context docBase="xml" path="/ddd" reloadable="true" />中的path属性的值等于空就行了,改成
<Context docBase="xml" path="" reloadable="true" />
path为空,表示我的这个javaWeb项目为tomcat的默认项目,意思就是我在浏览器中输入url地址http://127.0.0.1:8888/的时候,不会跳到tomcat的那只猫的那个页面了,而是直接跳到我的那个叫xml的javaWeb项目了。
以上是第1种方式,接下来是第2种方式!
方式2:tomcat目录/conf/Catalina/localhost目录下新建一个xml文件,具体看下面如何操作!
我先把tomcat目录/conf目录下的server.xml文件中的<Context docBase="xml" path="" reloadable="true" />这句话注释掉<!--<Context docBase="xml" path="" reloadable="true" />-->
然后再在tomcat目录/conf/Catalina/localhost目录下新建一个xml文件,注意:我用的是Tomcat7,tomcat目录/conf/目录下原本就有Catalina/localhost这2个文件夹,如果你们的tomcat目录/conf/目录下没有Catalina/localhost这2个文件夹,那你们就自己新建这2个文件夹。
好了,还是说怎么新建一个xml文件吧,看下图:
我这个xml文件的文件名是随便取的名字,你们也可以先随便取个名字!我这里取的是ccc.xml
打开ccc.xml,以下是ccc.xml文件中的内容,就2句话
<?xml version="1.0" encoding="UTF-8"?>
<Context docBase="G:/Java/xml" path="/aaa" reloadable="true"/>
我看到有些文章说,xml文件名必须和path属性值一致,我特意测试了一下,我把xml文件名取名为ccc.xml,而path="/aaa",然后我启动tomcat,在浏览器中输入http://127.0.0.1:8888/aaa 结果报404
这是什么原因导致的呢?不是说path是url的访问路径吗?
我们都知道tomcat启动后,在tomcat目录\work目录下,会生成webapps目录下的所有项目的项目名称文件夹,如下图:
从tomcat目录\work目录下的文件夹可以看出,有个ccc的文件夹,所以我们可以猜想到,我们在浏览器应该输入的url是http://127.0.0.1:8888/ccc/ 而不是http://127.0.0.1:8888/aaa 所以我们通过新建xml文件的方式的话,浏览器访问web项目是通过xml文件名来访问的,而不是通过xml文件中的path路径来访问。
浏览器地址栏输入http://127.0.0.1:8888/ccc/是可以访问的。而且我们也可以看出,xml文件名可以和path属性值不一致。但是为了规范起见,我个人还是建议xml文件名最好是和path属性值保持一致,而且为了规范起见,最好path的值等于项目名称。
接下来,我们改一下ccc.xml中的内容,改成如下
<?xml version="1.0" encoding="UTF-8"?>
<Context docBase="G:/Java/xml" path="" reloadable="true"/>
我们把path设置成空,即path=""
然后重启tomcat
在浏览器中输入http://127.0.0.1:8888/ 跳到了tomcat猫的页面,说明把path设置成空,即path=""不能直接跳到我这个名称叫xml的web项目。
我再在浏览器中输入浏览器中输入http://127.0.0.1:8888/ccc 跳转到了我这个名称叫xml的web项目。由此可见,xml文件这种方式跟xml中的path属性无关,不管path属性有值还是为空都无所谓,只跟xml的文件名有关!
接下来,就是要说怎么通过xml文件的方式做到在浏览器中只输入http://127.0.0.1:8888就可以访问我的javaWeb项目!
我们先把xml的文件名改成root.xml ,root.xml文件中的内容还是如下
<?xml version="1.0" encoding="UTF-8"?>
<Context docBase="G:/Java/xml" path="" reloadable="true"/>
在浏览器中输入url地址http://127.0.0.1:8888/ ,结果如下图:还是跳转到了tomcat那只猫的页面
看样子还是不行啊,好,接下来,我们再把xml文件的名字再改一下,改成ROOT.xml,但是xml文件中的内容不变,文件中的内容还是如下:
<?xml version="1.0" encoding="UTF-8"?>
<Context docBase="G:/Java/xml" path="" reloadable="true"/>
再在浏览器中输入url地址http://127.0.0.1:8888/ ,结果如下图:可以正常访问到我的javaWeb项目,由此可以,文件名root.xml无效,必须是ROOT.xml才有效,必须是大写的才有效!大家可以猜测一下,为什么ROOT.xml文件名必须是大写的?
之所以ROOT.xml文件名必须是大写的,大家可以看下tomcat目录/webapps目录下有一个ROOT文件夹,该文件夹就是tomcat的根目录,所以我们的xml文件名叫ROOT.xml才能覆盖掉webapps目录下有一个ROOT文件夹,到时候访问http://127.0.0.1:8888/才能指向到ROOT.xml,而ROOT.xml文件中的<Context docBase="G:/Java/xml" path="" reloadable="true"/>这句话,又可以跳转到我的javaWeb项目。(注意:有的文章上说,为了保险起见,要删掉tomcat服务器中的webapps目录下的ROOT文件夹,我自己测试了一下,不删掉tomcat服务器中的webapps目录下的ROOT文件夹也是可以的)
好,我们再改一下ROOT.xml文件中的内容,改成如下:
<Context docBase="G:/Java/xml" path="/aaa" reloadable="true"/>
再重启一下tomcat
再在浏览器中输入http://127.0.0.1:8888/ 结果还是可以正常访问到我的javaWeb项目!
继续论证了我上面的那句话,xml文件这种方式跟xml中的path属性无关,不管path属性有值还是为空都无所谓,只跟xml的文件名有关!
OK,还有一点要特别注意一下,我之前的ROOT.xml文件中的内容是如下:
<Context docBase="G:/apache-tomcat-7.0.53-windows-x64/apache-tomcat-7.0.53/webapps/xml" path="/aaa" reloadable="true"/>
我在浏览器中输入url地址http://127.0.0.1:8888/ 结果却是跳转到tomcat那只猫的界面,没有跳转到我的javaWeb项目页面,我一直在检查我的xml语法有没有错,我还一直检查<Context>标签的属性有没有写错,折腾了小一会儿,我终于想到了一点,估计是我的docBase="G:/apache-tomcat-7.0.53-windows-x64/apache-tomcat-7.0.53/webapps/xml"这里写的有问题,这是我得javaWeb项目的路径,估计是我的这个路径中带了-中划线和点.这种字符,导致没办法找到我的javaWeb项目的路径,所以我就把我的项目拷贝出来了,拷贝到了一个文件夹名字正常的文件夹下,G:\Java\xml 拷贝到了G盘的java文件夹下面,xml是我的项目名。
对ROOT.xml中的内容改成如下:
<Context docBase="G:/Java/xml" path="/aaa" reloadable="true"/>
如下图:
再在浏览器中输入url地址http://127.0.0.1:8888/ 结果是可以直接访问到我的javaWeb项目
咱们大胆的猜想下,既然xml文件这种方式跟<Context docBase="G:/Java/xml" path="/aaa" reloadable="true"/>这句话中的path属性半毛钱关系都没有,咱们干脆就不要path属性,直接去掉path属性,看下什么效果!
再次在浏览器地址栏中输入url地址http://127.0.0.1:8888/ 结果还是可以直接访问到我的javaWeb项目
由此可见,xml文件这种方式跟<Context docBase="G:/Java/xml" path="/aaa" reloadable="true"/>这句话中的path属性确实是半毛钱关系都没有
最后还有个小疑问,当tomcat目录/conf/Catalina/localhost/ROOT.xml和tomcat目录/conf/server.xml这2种方式并存的时候,换句话说,当ROOT.xml文件中<Context docBase="G:/Java/xml" reloadable="true"/>这句话和server.xml文件中<Context docBase="javascriptDemo" path="" reloadable="true"/>这句话同时存在时,我们在浏览器地址栏中输入http://127.0.0.1:8888/ 时,到底是会访问javascriptDemo这个web项目还是会访问xml这个web项目!
看下图:server.xml文件中docBase="javascriptDemo"我用的是相对路径
ROOT.xml文件中docBase="G:/Java/xml"我用的是绝对路径
不管是相对路径还是绝对路径,都可以,看你们自己吧!不管什么路径无所谓,这不是我们讨论的重点!
重点是看浏览器输入url地址http://127.0.0.1:8888/后的效果,到底是访问的是javascriptDemo这个web项目,还是访问的是xml这个web项目!
看下图的结果:访问的是javascriptDemo这个web项目,由此可见,当tomcat目录/conf/Catalina/localhost/ROOT.xml和tomcat目录/conf/server.xml这2种方式并存的时候,server.xml这种方式优先级更高!
以上2种方式,我个人觉得还是第2种方式(ROOT.xml)比较好,因为ROOT.xml是个单独的文件,比较灵活,而不需要像server.xml文件一样要去修改server.xml文件中的内容!