本篇參考Tomcat官方文檔:《First Webapp》翻譯,並結合自己的開發經驗介紹關於tomcat部署以及發布的相關內容。
1 目錄結構
在tomcat中所有的應用都是放置在CATALINA_HOME/webapps下,其中CATALINA_HOME對應的是你的tomcat的根目錄。
由於Servlet2.2之后的版本規范規定,tomcat中應用的目錄結構都要滿足固定的格式,這樣便於規范一致性。
放置在webapps下的文件通常是兩種格式:一種壓縮好的項目文件,比如war包!一種是正常的文件夾。
如果是war包這種項目文件,tomcat會在啟動后自動的把它解壓縮到當前目錄,變成可訪問的文件夾。
目錄結構包括如下:
/apps |------/WEB-INF |------/classes 編譯的字節碼文件 |------/lib 需要的類庫,jar包 ------web.xml |------/META-INF ------context.xml ------普通前端頁面,jsp等等
基本的內容細節也如上面描述的一樣。
其中重點是 web.xml 文件,這個文件也叫做部署描述符,用於配置web應用的相關信息。
需要注意的是:
注意相同項的配置順序,tomcat會按照配置順序進行執行或者加載。
需要注意的地方比如過濾器,還有一些頁面的加載。
其中各項的含義,百度一下也略知一二

<web-app> <display-name></display-name>定義了WEB應用的名字 <description></description> 聲明WEB應用的描述信息 <context-param></context-param> context-param元素聲明應用范圍內的初始化參數。 <filter></filter> 過濾器元素將一個名字與一個實現<a href="http://www.cnblogs.com/bukudekong/archive/2011/12/26/2302183.html">javax.servlet.Filter</a>接口的類相關聯。 <filter-mapping></filter-mapping> 一旦命名了一個過濾器,就要利用filter-mapping元素把它與一個或多個servlet或JSP頁面相關聯。 <listener></listener>servlet API的版本2.3增加了對事件監聽程序的支持,事件監聽程序在建立、修改和刪除會話或servlet環境時得到通知。 Listener元素指出事件監聽程序類。 <servlet></servlet> 在向servlet或JSP頁面制定初始化參數或定制URL時,必須首先命名servlet或JSP頁面。Servlet元素就是用來完成此項任務的。 <servlet-mapping></servlet-mapping> 服務器一般為servlet提供一個缺省的URL:http://host/webAppPrefix/servlet/ServletName。 <span style="color: #008000;"> 但是,常常會更改這個URL,以便servlet可以訪問初始化參數或更容易地處理相對URL。</span>在更改缺省URL時,使用servlet-mapping元素。 <session-config></session-config> 如果某個會話在一定時間內未被訪問,服務器可以拋棄它以節省內存。 可通過使用HttpSession的setMaxInactiveInterval方法明確設置單個會話對象的超時值,或者可利用session-config元素制定缺省超時值。 <mime-mapping></mime-mapping>如果Web應用具有想到特殊的文件,希望能保證給他們分配特定的MIME類型,則mime-mapping元素提供這種保證。 <welcome-file-list></welcome-file-list> 指示服務器在收到引用一個目錄名而不是文件名的URL時,使用哪個文件。 <error-page></error-page> 在返回特定HTTP狀態代碼時,或者特定類型的異常被拋出時,能夠制定將要顯示的頁面。 <taglib></taglib> 對標記庫描述符文件(Tag Libraryu Descriptor file)指定別名。此功能使你能夠更改TLD文件的位置, 而不用編輯使用這些文件的JSP頁面。 <resource-env-ref></resource-env-ref>聲明與資源相關的一個管理對象。 <resource-ref></resource-ref> 聲明一個資源工廠使用的外部資源。 <security-constraint></security-constraint> 制定應該保護的URL。它與login-config元素聯合使用 <login-config></login-config> 指定服務器應該怎樣給試圖訪問受保護頁面的用戶授權。它與sercurity-constraint元素聯合使用。 <security-role></security-role>給出安全角色的一個列表,這些角色將出現在servlet元素內的security-role-ref元素 的role-name子元素中。分別地聲明角色可使高級IDE處理安全信息更為容易。 <env-entry></env-entry>聲明Web應用的環境項。 <ejb-ref></ejb-ref>聲明一個EJB的主目錄的引用。 < ejb-local-ref></ ejb-local-ref>聲明一個EJB的本地主目錄的應用。 </web-app>
比較常用的就是監聽器,過濾器,servlet,session管理,初始化參數等等。
classes 文件夾下放置的是編譯出的.class文件,比如你定義的某個包:com.test.hello.java 經過tomcat的啟動發布后,就會在響應的應用下的classes文件夾下找到com/test/hello.class文件。類似的servlet, bean, 普通的java類都會編譯到此處。
lib 文件夾下放置的是項目應用的jar包。比如使用了SSH,在項目引用了jar包,最后都會放在這里。這個文件夾下的jar文件是不會編譯到classes文件夾下的。詳細信息參考tomcat的類加載機制。
另外呢,這個文件夾下的jar包是屬於應用自己使用的。tomcat根目錄下還有一個lib文件夾,這里面存放着基本的servlet和jsp需要的jar包。
如果有一定開發經驗的朋友會發現,有時候自己在IDE里面開發,會莫名其妙的報一些錯誤。但是這些錯誤並不影響最后的發布。這就是因為在開發時,IDE沒有找到對應的jar包,這些jar包存放在tomcat中。當應用發布時,會自動的尋找該文件夾,也就不會報錯了。
解決辦法,就是再開發時,把tomcat的lib文件夾加入到IDE的編譯環境中。
context.xml 常常用語配置一些運行時改變的參數,這樣tomcat可以定期掃描該文件,進行相應的操作。
為什么要有這個文件呢?
就是因為其他的配置文件比如server.xml都是tomcat在啟動時讀取的信息,運行時是不能改變的,因此把一些動態的信息在這里設定就可以運行時期動態加載了。常用的就是配置數據源JNDI,其中詳細的內容會在后文介紹配置文件的時候講解。
2 部署
什么是部署?
其實就是把開發完的代碼放在tomcat中,如果使用的是記事本開發,就直接拷貝到webapps下。
如果使用的是IDE開發,則需要把tomcat集成到IDE中,並配置代碼的映射路徑。
在IDE中直接右鍵tomcat--->Add and Remove...
如果發現不能把左邊的項目添加到右邊,並提示錯誤。則檢查servelt的版本。通常是由於servlet與tomcat版本不一致導致,版本關系參考:
舉個例子,tomcat6 僅支持2.5之前的servlet版本,以及1.5之后的JDK版本。、
3 發布
發布就是把應用中的代碼進行編譯和組織,使用戶可以直接訪問。
就像生產汽車一樣,tomcat負責把各個零件進行組裝(把代碼進行編譯組織),最后直接把一個可以運行的車子(可訪問的應用)擺在用戶面前。
發布方法:
1 直接在tomcat中運行:運行startup.bat或者startup.sh文件。運行方法參考:tomcat啟動
2 在IDE中啟動:
在server視圖中右鍵tomcat選擇start或者直接點擊右上角的DEBUG或者START圖標
4 測試
執行發布后,就可以登錄瀏覽器,輸入:http://localhost:8080/[webapp名字] 訪問應用了。
其中8080是端口號,可以通過server.xml或者IDE中配置界面修改。
文檔中也給出了線程池和SSL的配置方式
也可以在IDE中直接雙擊server視圖中的tomcat選項,在彈出的配置界面,修改端口號,記得保存。
localhost為主機名:也可以使用 本地地址127.0.0.1,或者本地IP地址[可以同ipconfig /all查詢]