omct问题之-webapps下多出的ROOT目录
問題發生背景:
????由于公司的web環境大都是tomcat,所以在項目發布出現小問題為了快速解決時常會需要手動增加或修改war包解壓后的內容。但是在修改時有的webapps下除了war包解壓后的包文件,還會多出一個ROOT文件夾,而且開發通常都會告訴我:別忘了修改ROOT里面的內容。
為什么呢,為什么還要修改ROOT下的內容?
下面先講解tomcat下webapps中ROOT的作用
tomcat下webapps中ROOT目錄的作用:
????在初學tomcat時當部署完tomcat,我們輸入IP:8080默認端口時通常會出現一個tomcat的歡迎界面,而這個歡迎界面就在webapps的ROOT中。
????一般tomcat的訪問是"IP:端口/包名"形式的
????但ROOT的作用則是省去了包名使得訪問tomcat的war包項目只需要"IP:端口"就可以,這可以簡化反代的配置。不需要反向代理時寫死包名,使得更換項目時不必再對反向代理進行修改。在一定程度上減少了運維人員的工作量。
????
ROOT目錄是怎么出現的呢
????剛開始由于對tomcat一無所知,因此對ROOT的出現很是困惑,為什么每次發布前我都把ROOT刪掉,在發布后ROOT總是再度出現。之前需要對發布后的項目進行小范圍改動時,不知道為什么還要對ROOT進行修改。直到現在才明白對發布后的項目修改時為什么一定要修改ROOT
????ROOT的意義在前面已經說到了,它可以簡化訪問的url,同時在項目包名變更時不必對反向代理進行額外的修改。
????ROOT的出現與conf/server.xml配置文件有關
????在server.xml文件中有項額外的配置是
| 1 | <Context?path=""?reloadable="true"?docBase="/deploy/to/war"?/> |
????docBase可以是war包的路徑也可以是war包解壓后的文件夾名的路徑
????xxx.war形式
????<Context path="" reloadable="true" docBase="/opt/xxx.war" />
????例如xxx.war在/opt下,docBase可以寫成docBase="/opt/xxx.war",此時啟動tomcat,在engine的默認webapps下會生成一個名為ROOT的文件夾,該文件夾內就是xxx.war解壓后的內容。
通過查看日志可以發現一則信息
| 1 | DEBUG?[localhost-startStop-1]?-?Published?root?WebApplicationContext?as?ServletContext?attribute?with?name?[org.springframework.web.context.WebApplicationContext.ROOT] |
該信息大意:將ServletContext中的定義的包解壓后的內容發布到ROOT文件夾下。
???xxx文件夾形式
????<Context path="" reloadable="true" docBase="xxx" />
????注:docBase有絕對路徑跟相對路徑之分,相對路徑是相對于engine引擎定義的webapps
????如果docBase指定的路徑為xxx.war包解壓后文件夾的形式,則需要將xxx.war放在webapps下,其過程大致為:tomcat先將xxx.war解壓為xxx文件,之后將xxx文件夾復制為以ROOT為名字的新文件夾。
總結:
????tomcat訪問IP:端口的方式訪問war包項目的方式是比較方便的,我也建議這么做。不過發布時記得刪除ROOT文件夾,否則在你發布后你會發現你這次發布的沒有任何變化,若發布后出現小問題需要快速解決,記得是要對ROOT下的內容進行修改而不是解壓的war包內容。
????現在我才知道開發通知告訴我的其實只有一半是正確的,那就是修改ROOT!。
我所寫的不一定全對,不過經過實驗驗證,目前沒發現錯誤,如果有哪里說的有誤歡迎指正。
本文轉自 紫色的茶碗 51CTO博客,原文鏈接:http://blog.51cto.com/chawan/1947201,如需轉載請自行聯系原作者
總結
以上是生活随笔為你收集整理的omct问题之-webapps下多出的ROOT目录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hadoop 安装详解--新手必备
- 下一篇: php使用swoole的应用场景