EVERE: Exception fixing docBase for context [/agdis] java.io .EOFException: Unexpected end of ZLIB input stream at java.util.zip.ZipFile$ZipFileInflaterInputStream.fill(ZipFile.java:413) at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:158) at java.io .FilterInputStream.read(FilterInputStream.java:107) at org.apache.catalina.startup.ExpandWar.expand(ExpandWar.java:413) at org.apache.catalina.startup.ExpandWar.expand(ExpandWar.java:144) at org.apache.catalina.startup.ContextConfig.fixDocBase(ContextConfig.java:735) at org.apache.catalina.startup.ContextConfig.beforeStart(ContextConfig.java:863) at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:388) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117) at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90) at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:402) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652) at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1095) at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1930) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) at java.util.concurrent.FutureTask.run(FutureTask.java:262) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:745) Jan 18, 2018 10:23:58 AM org.apache.catalina.core.StandardContext startInternal SEVERE: Error while attempting to validate required application extensions java.io .IOException: Jar: commons-codec-1.5.jar at org.apache.catalina.util.ExtensionValidator.validateApplication(ExtensionValidator.java:205) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5339) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652) at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1095) at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1930) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) at java.util.concurrent.FutureTask.run(FutureTask.java:262) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:745) Caused by: java.util.zip.ZipException: invalid LOC header (bad signature) at java.util.zip.ZipFile.read(Native Method) at java.util.zip.ZipFile.access$1400(ZipFile.java:56) at java.util.zip.ZipFile$ZipFileInputStream.read(ZipFile.java:679) at java.util.zip.ZipFile$ZipFileInflaterInputStream.fill(ZipFile.java:415) at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:158) at java.io .FilterInputStream.read(FilterInputStream.java:133) at java.io .PushbackInputStream.read(PushbackInputStream.java:186) at java.util.zip.ZipInputStream.readFully(ZipInputStream.java:424) at java.util.zip.ZipInputStream.readLOC(ZipInputStream.java:277)
session未超時的情況下,服務器關閉的時候會被序列化為工程名\SESSIONS.ser,tomcat 啟動的時候再加載進來,EOFException表示tomcat上次關閉時還有一些活動連接,所以在重啟時tomcat嘗試去恢復這些session,但是在輸入過程中意外地到達文件尾或流尾的信號,導致從session中獲取數據失敗。異常是tomcat本身的問題,由於tomcat上次非正常關閉時有一些活動session被持 久化(表現為一些臨時文件),在重啟時,tomcat嘗試去恢復這些session的持久化數據但又讀取失敗造成的。此異常不影響系統的使用。
解決辦法:將 tomcat_home\work\Catalina\localhost\『工程名』\SESSIONS.ser刪除。如果正常關閉服務端,該文件是自 動刪除的。考慮到每個人的tomat的工作目錄不同,建議在“搜索”功能中找到你的SESSIONS.ser文件,而且只需要刪 除..\yourProjectName\下的SESSIONS.ser即可。
最簡單的辦法是work下的全部刪除,然后重啟tomcat。
用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就可以了。