將正在正常運行的tomcat打包(使用tar -zcvf命令打的包),然后放到其他服務器上使用非root用戶解壓(使用tar -zxvf命令)配置好之后,啟動tomcat后報錯如下
HTTP Status 500 - java.lang.IllegalStateException: No output folder
typeException report
messagejava.lang.IllegalStateException: No output folder
descriptionThe server encountered an internal error that prevented
it from fulfilling this request.
exceptionorg.apache.jasper.JasperException: java.lang.IllegalStateException: No output folder
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:585)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:391)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
root causejava.lang.IllegalStateException: No output folder
org.apache.jasper.JspCompilationContext.createOutputDir(JspCompilationContext.java:738)
org.apache.jasper.JspCompilationContext.getOutputDir(JspCompilationContext.java:196)
org.apache.jasper.JspCompilationContext.getClassFileName(JspCompilationContext.java:581)
org.apache.jasper.compiler.Compiler.isOutDated(Compiler.java:461)
org.apache.jasper.compiler.Compiler.isOutDated(Compiler.java:425)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:639)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:357)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
noteThe full stack trace of the root cause is available in the
Apache Tomcat/7.0.39 logs.
----------------------------------------------------------------------------------------------------------------------------------------
org.apache.jasper.JasperException: java.lang.IllegalStateException: No output folder:
關於這個原因主要是權限的問題,在tomcat/work/Catalina/localhost/,主要是這個目錄沒有被讀寫的權限,導致文件不能被編譯到該指定的工作目錄中,此時我們就要針對與這個目錄做一些權限的修改權限至少要達到755或者以上,同時注意此處修改權限必須用root身份進行操作,否則不能進行修改,修改完后編譯好的jsp文件就在localhost的目錄當中了。發現了問題在於work/Catalina/localhost/中無法生成對應文件,把tomcat整個目錄、work整個目錄都修改了權限仍然不行。最后到具體的目錄tomcat/work/Catalina/localhost/進行修改權限OK。
我遇到的這個報錯,是因為使用root啟動過一次服務,后來用其他用戶進行服務的啟動,而在啟動之前沒有刪除tomcat/work/目錄下的內容,該目錄下還是存在屬主為root用戶的Catalina目錄,在使用其他用戶執行啟動時,由於該Catalina已存在,就不再重新創建,而是增量修改該目錄,但是由於其他用戶沒有權限修改屬主為root的目錄和文件,因此報錯。建議在每次停tomcat成功后,刪除tomcat/work/*;如果不想每次都刪除,一定要保證每次啟動tomcat使用的用戶要嚴格正確。