本篇參考Tomcat官方文檔:《First Webapp》翻譯,並結合本身的開發經驗介紹關於tomcat部署以及發佈的相關內容。html
在tomcat中全部的應用都是放置在CATALINA_HOME/webapps下,其中CATALINA_HOME對應的是你的tomcat的根目錄。前端
因爲Servlet2.2以後的版本規範規定,tomcat中應用的目錄結構都要知足固定的格式,這樣便於規範一致性。java
放置在webapps下的文件一般是兩種格式:一種壓縮好的項目文件,好比war包!一種是正常的文件夾。web
若是是war包這種項目文件,tomcat會在啓動後自動的把它解壓縮到當前目錄,變成可訪問的文件夾。apache
目錄結構包括以下:瀏覽器
/apps |------/WEB-INF |------/classes 編譯的字節碼文件 |------/lib 須要的類庫,jar包 ------web.xml |------/META-INF ------context.xml ------普通前端頁面,jsp等等
基本的內容細節也如上面描述的同樣。tomcat
其中重點是 web.xml 文件,這個文件也叫作部署描述符,用於配置web應用的相關信息。安全
須要注意的是:服務器
注意相同項的配置順序,tomcat會按照配置順序進行執行或者加載。session
須要注意的地方好比過濾器,還有一些頁面的加載。
其中各項的含義,百度一下也略知一二
<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,其中詳細的內容會在後文介紹配置文件的時候講解。
什麼是部署?
其實就是把開發完的代碼放在tomcat中,若是使用的是記事本開發,就直接拷貝到webapps下。
若是使用的是IDE開發,則須要把tomcat集成到IDE中,並配置代碼的映射路徑。
在IDE中直接右鍵tomcat--->Add and Remove...
若是發現不能把左邊的項目添加到右邊,並提示錯誤。則檢查servelt的版本。一般是因爲servlet與tomcat版本不一致致使,版本關係參考:
舉個例子,tomcat6 僅支持2.5以前的servlet版本,以及1.5以後的JDK版本。、
發佈就是把應用中的代碼進行編譯和組織,使用戶能夠直接訪問。
就像生產汽車同樣,tomcat負責把各個零件進行組裝(把代碼進行編譯組織),最後直接把一個能夠運行的車子(可訪問的應用)擺在用戶面前。
發佈方法:
1 直接在tomcat中運行:運行startup.bat或者startup.sh文件。運行方法參考:tomcat啓動
2 在IDE中啓動:
在server視圖中右鍵tomcat選擇start或者直接點擊右上角的DEBUG或者START圖標
執行發佈後,就能夠登陸瀏覽器,輸入:http://localhost:8080/[webapp名字] 訪問應用了。
其中8080是端口號,能夠經過server.xml或者IDE中配置界面修改。
文檔中也給出了線程池和SSL的配置方式
也能夠在IDE中直接雙擊server視圖中的tomcat選項,在彈出的配置界面,修改端口號,記得保存。
localhost爲主機名:也可使用 本地地址127.0.0.1,或者本地IP地址[能夠同ipconfig /all查詢]