1、 tomcat下的work目錄
1 用tomcat作web服務器的時候,部署的程序在webApps下,這些程序都是編譯后的程序(發布到tomcat的項目里含的類,會被編譯成.class后才發布過來,源文件沒有發布過來,但這里的jsp沒有經編譯的)。tomcat有一個work目錄,里面存放了頁面的緩存,訪問的jsp都會編譯(從 work里進入Catalina后的如localhost站點文件夾下的項目,我們可以看到那些jsp頁面會被編譯成應該是servlet文件,下次再來 訪問時,就直接運行servlet類就可以向客戶端反應響應頁面了,所以有的博客說第一次訪問時會比較慢,是因為新發布上去的頁面在第一個人訪問時,會先 編譯成servlet文件,所以慢了,一旦編譯好,那么除非jsp頁面修改,不然下次訪問直接運行servlet就可以響應用戶,所以快),編譯后的文件都會存儲在work目錄下。而tomcat顯示的目錄,都會從這個緩存里找編譯后的jsp對應的class文件。所以當清空了work目錄后,該過程將會從新來過。
有的時候會遇到一個問題,就是修改后的頁面在tomcat運行的時候顯示不了修改后的痕跡。這個時候刪除work目錄下對應的項目文件夾,重新啟動tomcat就可以了。
2 在tomcat的conf配置文件夾下的server.xml文件里配置了Host name后,就會在conf下的Catalina文件夾和work下的Catalina文件下建立站點名稱的文件夾,項目每次發布都會放入來,也會記錄到 conf下的Catalina文件夾的配置文件里去。
最近發現,很多網友喜歡把tomcat的work目錄里的東西叫做緩存,其實那不是很恰當,work目錄只是tomcat的工作目錄,也就是tomcat把jsp轉換為class文件的工作目錄,這也正是為什么它叫work目錄而不是cache目錄的原因。
jsp,tomcat的工作原理是當瀏覽器訪問某個jsp頁面時,tomcat會在work目錄里把這個jsp頁面轉換成.java文件,比如將index.jsp轉換為index_jsp.java文件,而后編譯為index_jsp.class文件,最后tomcat容器通過ClassLoader類把這個index_jsp.class類裝載入內存,進行響應客戶端的工作。
tomcat會定時稍描容器內的jsp文件,讀取每個文件的屬性,當發現某個jsp文件發生改變時(文件的最后修改時間與上次稍描時不相同時),tomcat會重新轉換、編譯這個jsp文件。但是tomcat的稍描是定時的不是實時的,這也正是為什么jsp文件修改后需要幾分鍾的時間來等修改過的jsp生效。當然為了即刻生效,很多老前輩都會建議在修改jsp頁面后立即清除work目錄里的文件。
另外,tomcat容器中,對轉換后的java文件(比如:index_jsp.java)的編譯最大只支持64k,所以在其他容器中的jsp移植到tomcat容器中時會遇到大jsp文件會發生無法編譯的情況,所以建議把jsp中的業務邏輯寫入單獨的類,在jsp中通過調用這個類的靜態方法來執行,並將jsp頁面中的js提取出來放到單獨的js文件內。
問題域:
如何讓Tomcat自動更新class的問題。
解決方案:
一、
在安裝的tomcat路徑下創建獨立配置文件。
例如:
創建一文件:D:\Tomcat5.5\conf\Catalina\localhost\testapp.xml
內容為:
<Context docBase="D:\Tomcat5.5\webapps\testapp" reloadable="true" path="/testapp" workDir="work\Catalina\localhost\testapp">
</Context>
重啟Tomcat
二、
直接在tomcat 的配置文件conf/server.xml中添加內容如下:
<Context docBase="D:\Tomcat5.5\webapps\testapp" reloadable="true" path="/testapp" workDir="work\Catalina\localhost\testapp">
</Context>
注意是在<Engine name="Catalina" defaultHost="localhost">標簽下添加;
重啟Tomcat
2、 tomcat下的temp目錄
引自:https://blog.csdn.net/u013076997/article/details/52301262
問題背景:業務人員告訴我,登錄界面的驗證碼出不來了,我感覺奇怪啊,怎么一直在運行的項目驗證碼就出不來了呢?
找原因找了好久,突然想起剛剛刪除把tomcat目錄下的temp文件給刪除了,當時以為沒有什么作用,新建了一個temp目錄之后,刷新頁面就好了。
感覺好奇,temp目錄和圖形驗證碼有什么關系呢?原來,temp目錄用戶存放tomcat在運行過程中產生的臨時文件。(清空不會對tomcat運行帶來影響)但是,千萬不能刪除該目錄,要不然就會帶來未知的錯誤。
文章參考:
https://blog.csdn.net/wugouzi/article/details/12713559