您的位置:首页 > 移动开发 > WebAPP

eclipse部署项目到webapps下,如何不带contextPath来访问

2015-07-13 17:08 501 查看
自从用回了eclipse,从昨晚就在想这么一个事,你看啊,我们比如有个项目应用名字 
叫app,部署到外网使用,要访问的话基本上是不带项目名的(也就是contextPath名,地 
址如http://221.221.158.46/index.do),因为在外网的tomcat的server.xml,一般 
配置了Context,并且path为空,使得项目文件目录和tomcat目录分别在两个地方(如根目 
录/www下),但是在本地环境情况下,这个事情还有点绕,还拿app这个作例子。 

    我建了一个app的Dynamic Web Project,出于以前myeclipse的习惯,我把WebContent改成了WebRoot,然后用它提供的servers配置tomcat,双击Servers标签中新建好的tomcat项,进入配置界面,其中Server Locations选择了Use
Tomcat installation(takes control of Tomcat installation),下面的deploy path可以填任意你想部署的地方,如f:\target,这样就与webapps分开了,完成后就可以右击tomcat项,选择add/remove将我们的app项目扔到那边去,之后点击publish完成本机部署。 
    
    观察f:\target目录,发现里面有app目录和ROOT目录,至于那个ROOT是个打酱油的先不用管它,既然IDE敢把app放到了另外的目录里,说明一定改了我们tomcat的server.xml文件,现在内容多了一条Context元素,内容为 
<Context docBase="F:\target\app" path="/app" reloadable="true" source="org.eclipse.jst.jee.server:app"/> 

    我们现在可以通过http://localhost:8080/app来访问了,但这不是我想要的,我想用http://localhost:8080直接访问app,所以path应该为空,手动改它肯定是不行的,因为IDE已经直接连到了这个文件,每次发布它都会把path修改回去。 
    
    在myeclipse的时候,是可以通过项目设置,让它直接把app目录里面的内容,直接部署到webapps/ROOT下面,这样就可以不带ContextPath来访问,但是这样本身就很奇怪,我们看不到三条腿的猫了,就算是静态页面,也是人家自身带的东西,怎么能让你随便给覆盖了呢,但是我还是试着在eclipse3.6里找了找相关的配置,还真有点收获。 
    
    右击app项目,选择Properties,下面有一项Web Project Settings,里面有一条Context root,好像有点像了,默认是app,我把它改成了ROOT,保存一切都没有问题,本以为会和myeclipse是一样的结果,但是部署完发现结构不对头了,无论如何IDE都会把app这个目录也会复制到ROOT目录里,这和上面myeclipse行为不一致了,我还是没有办法脱离contextPath来访问,就算是deploy到webapps的ROOT,里面依然有个可恨的app目录。 
    
    这个困扰了我挺长的时间,网上好像也没有提到这个问题,直到我又看了server.xml,发现path属性的值改成了"/ROOT",原来context root的修改对应的是path属性,这样的话我只需要把context root设置成空,相应path属性不也为空了么,这样就搞定了,但是人家IDE是不让你这么干的,Context
root cannot be empty提示着我要走一些歪路子了,只能用最后一招,看看能不能改改你生成的IDE配置文件。 
    
    最终找到项目所在目录.settings\org.eclipse.wst.common.component文件,发现里面有一条<property name="context-root" value="ROOT"/>,对应的就是上面的那条设置,直接value改成空,保存退出,依然部署到f:\target下面,重新publish项目,发现结构还是f:\target\app,但是惊喜的发现,server.xml中path属性已经是空了,而docBase是我们喜欢的F:\target\app,尽管有个不认识的source="org.eclipse.jst.jee.server:app"属性,但和我无关了,这下用http://localhost/index.jsp,就可以直接访问我们部署好的app应用页面了 
    
    我不知道这样做是不是最正确的,但是确实解决了问题,首先实现了部署目录和tomcat的webapps分离,然后消除了contextPath访问名字,IDE这个东西有时候能把人折腾死,有时真是觉得功夫在身外
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  eclipse tomcat