反饋已提交
網絡繁忙
本文介紹 Tomcat 伺服器部署 中一些報錯及解決方案。
問題描述:
Tomcat 獨立部署 成功後,在決策平台內搜尋時,輸入中文無法正常搜尋,但在本地輸入中文進行搜尋是可以的。
原因分析:Tomcat 的 URIEncoding 值不是 UTF-8,導致中文被轉碼,無法被搜到。
解決方案1:請至少使用Tomcat8以上版本部署,URIEncoding 值預設為 UTF-8。
解決方案2:手動新增 URIEncoding 屬性值。
1)以管理者身分進入%TOMCAT_HOME%/conf資料夾,使用正文編輯器開啟server.xml檔案。
2)在server.xml檔案中,找到以下配置塊,規定了 Tomcat 監聽 HTTP 請求的埠號等資訊。
3)新增一個屬性「URIEncoding="UTF-8"」,即可讓 Tomcat 以 UTF-8 的編碼處理 get 請求。
4)儲存並關閉server.xml檔案。請參考 關閉或重啟FineReport工程 文檔,重啟Tomcat伺服器,以使配置生效。
JDK12 環境下將報表工程部署到 Tomcat 伺服器端,會報 500 錯誤。如下圖所示:
解決方案:
JDK9 及之後的版本是沒有 tools.jar 的,安裝低版本 JDK 部署即可。
The origin server did not find a current representation for the target resource or is not willing to disclose that one exist.
確定存取 11.0 報表工程時 URL 是正確的:http://localhost:8080/webroot/decision,工程路徑不能漏掉,且路徑中大小寫敏感。
這個報錯大概率是 Tomcat 和 JDK 版本引起的,推薦使用 Tomcat8.5.57 及以上版本,或者 Tomcat8 最新版本;JDK 要求 1.8 且小版本需在 JDK8u102 以上。
The requested resource is not available.
需要檢查一下 JDK 的環境變數配置是否有錯,特別是有沒有設定 JAVA_HOME。
Tomcat 版本太低也可能會導致這個錯誤,推薦使用 Tomcat8.5.57 及以上版本,或者 Tomcat8 最新版本。
Tomcat 啟動報錯:fine assist start failed
檢查環境變數指向的%JRE_HOME%\bin底下沒有 attach.dll,若沒有 attach.dll 檔案,需要將%JAVA_HOME%\jdk\jre\bin下的 attach.dll 檔案copy到此路徑下。
日誌報錯:The error reported was [E:\tomcat\apache-tomcat-7.0.79\bin\tcnative-1.dll: Can't load AMD 64-bit .dll on a IA 32-bit platform]
檢查 JDK 版本是否與作業系統對應,如32位的系統只能使用32位的 JDK,64位的系統只能使用64位的 JDK。
Tomcat 升級或更換為其他版本後,存取報表時報404錯誤,且日誌檔案中存在 RFC 系列錯誤資訊。
解決方案1:
修改 %Tomcat_HOME%\conf 目錄下的 server.xml 檔案,在 server.xml 中新增如下程式碼,重啟伺服器即可。
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" relaxedQueryChars='^{}[]|"' />
解決方案2:
修改%Tomcat_HOME%\conf\catalina.properties檔案中註釋掉的這行。
#tomcat.util.http.parser.HttpParser.requestTargetAllow=|
或 將內容修改為:
tomcat.util.http.parser.HttpParser.requestTargetAllow=|{}
如果修改 server.xml 後還是中文亂碼,可以在 catalina 檔案中新增:
set JAVA_OPTS=-Xms512m -Xmx1024m -XX:MaxPermSize=1024m -Dfile.encoding=UTF-8
使用 exe 安裝包安裝的 Tomcat,部署工程後設定管理者帳號時前端報錯:配置管理者密碼出錯,後臺報錯:ERROR [standard] Database is not initialized,如下圖所示:
這是由於 exe 啟動方式記憶體不足導致的,需要調大 tomcat 啟動記憶體。
修改記憶體方法請參見:Tomcat修改記憶體
FineReport 工程部署到 Tomcat 後,%Tomcat_HOME%\logs資料夾下沒有生成 fanruan.log 檔案,無法查看工程執行情況。
而且報錯:
java.io.FileNotFoundException: /var/lib/tomcat8/../logs/fanruan.log (No such file or directory)
1)在%Tomcat_HOME%\webapps\webroot\WEB-INF路徑下建立一個名為 config 的資料夾。
2)在 config 資料夾中新增log4j.properties檔案,如下圖所示:
檔案內容如下所示:
log4j.rootLogger=${LOG_ROOT_LEVEL},standard,stdoutlog4j.appender.standard=com.fr.third.apache.log4j.DailyRollingFileAppenderlog4j.appender.standard.DatePattern='.'yyyy-MM-ddlog4j.appender.standard.File=${LOG_HOME}/../logs/fanruan.loglog4j.appender.standard.layout=com.fr.third.apache.log4j.PatternLayoutlog4j.appender.standard.layout.ConversionPattern=%d{HH\:mm\:ss} %t %p [%c] %m%nlog4j.appender.standard.Append=true log4j.appender.stdout=com.fr.third.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=com.fr.third.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{HH\:mm\:ss} %t %p [%c] %m%n
使用者可在程式碼第四行修改日誌存放路徑。
使用者將 FineReport 工程部署到 Tomcat 伺服器上,啟動 FineReport 工程時出現閃退現象;將 Tomcat 中部署的 FineReport 工程刪除,單獨啟動 Tomcat ,可以正常啟動。日誌報錯如下圖所示:
運作到 ResourceUpdateActivator 模組時閃退。
原因分析:
360 安全軟體阻擋。
1)把運作 java 程式的 java.exe 新增到信任中,即可正常運作。
注:該方法適用範圍:360 天擎-Windows 伺服器版。
2)若採取步驟一後還是無法啟動,需關閉「檔案系統防護」按鈕。
當將 FineReport 部署到 Tomcat 上時,當需要將主表的參數透過網路報表全部傳遞給子表,選擇如下圖的設定:
點選主表的連結,鑽取到子表。而有時候主表有需要大量的傳遞參數,將參數傳遞和繼承給各個子表,會導致子表無法顯示無法運算的問題,頁面為空白頁面或者如下圖所示:
由於 Tomcat 預設 post 參數的最大大小為 2M, 當超過時將會出錯,可以配置 maxPostSize 參數來改變大小。傳出的參數大小超過這個限制就會導致上面的問題。
注:該解決方案適用於 Tomcat7 及以上版本。
從 Apache-Tomcat-7.0.63 開始,參數 maxPostSize 的含義就變為: 如果將值設定為 0,表示 POST 最大值為 0,如果將值設定為 -1,表示不限制 post 大小。
在此版本之前設定為 0 表示不限制 post 大小。
在 Tomcat 資料夾下的 conf 檔案中的 server.xml 配置中新增:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" maxPostSize="-1" maxHttpHeaderSize ="102400"/>
參數說明:
maxPostSize="-1" //-1 表示不限制大小。
maxPostSize:指定 post 方式請求的最大量,沒有指定預設為 2097152。
maxHttpHeaderSize ="102400"。
maxHttpHeaderSize:HTTP 請求和回应頭的最大量,以位元組為單位,預設值為 4096 位元組。
問題描述
高版本 Tomcat(7.0.76以後)會嚴格按照對 RFC 3986 規範進行存取解析,而 RFC 3986 規範定義了 URL 中只允許包含英文字母(a-zA-Z)、數字(0-9)、-_.~4個特殊字元以及所有保留字元(RFC3986中指定了以下字元為保留字元:! * ’ ( ) ; : @ & = + $ , / ? # [ ])。傳入的參數若不在 RFC3986中 的保留欄位中,會報 400 錯誤。
解決方案
1)修改%Tomcat_HOME%/conf/server.xml檔案,增加下面程式碼:
maxpostsize="209715200"maxHttpHeaderSize="16384"relaxedPathChars="[]|"relaxedQueryChars="[]|{}^\`"<>"useBodyEncodingForURI="true"URIEncoding="UTF-8"
如下圖所示:
2)重啟工程。
Ubuntu 系統下,將正式環境中的 Tomcat 打包後copy到雲伺服器上,啟動Tomcat後,目錄丟失,同時,在目錄管理中新增目錄,提示報錯資訊“目錄已存在”。
報錯資訊如下所示:
AWT is not properly configured on this server. Perhaps you need to run your container with "-Djava.awt.headless=true"? See also: https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+got+java.awt.headle ss+problemjava.lang.UnsatisfiedLinkError: /mnt/jdk1.8/jre/lib/amd64/libawt_xawt.so: libXrender.so.1: cannot open sharedobject file: No such file or directory
apt-get install libxrender-dev,重啟 Tomcat 。
java.lang.UnsatisfiedLinkError: /mnt/jdk1.8/jre/lib/amd64/libawt_xawt.so: libXtst.so.6: cannot open shared object file: No such file or directory
apt-get install libxtst-dev,重啟 Tomcat 。
啟動Tomcat工程報錯:在請求目標中找到無效字元。有效字元在RFC 7230和RFC 3986中定義。
有些地址被Tomcat收信確認存在不合法字元
7.0.76及之後版本Tomcat中的新特性,嚴格按照 RFC 3986 規範進行存取解析
RFC 3986規範定義了URL中只允許包含英文字母(a-zA-Z)、數字(0-9)、-_.~4個特殊字元以及所有保留字元(RFC3986中指定了以下字元為保留字元:! * ’ ( ) ; : @ & = + $ , / ? # [ ])
1)檢查不合法字元
檢查系統地址和地址傳參中,是否存在不合法字元。
例如在URL中傳入了一段json,傳入的參數中有"{"字元,不在RFC3986中的保留欄位中
2)放行不合法字元
在/conf/catalina.properties檔案中,找到最後註釋掉的一行
#tomcat.util.http.parser.HttpParser.requestTargetAllow=|
改成
表示把{}放行
滑鼠選中內容,快速回饋問題
滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。
不再提示
10s後關閉
反馈已提交
网络繁忙