反饋已提交

網絡繁忙

Tomcat部署問題匯總

1. 概述

本文介紹 Tomcat 伺服器部署 中一些報錯及解決方案。

2. 數據決策系統中,中文無法搜尋

問題描述:

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伺服器,以使配置生效。

3. JDK12 環境下報錯

問題描述:

JDK12 環境下將報表工程部署到 Tomcat 伺服器端,會報 500 錯誤。如下圖所示:

解決方案:

JDK9 及之後的版本是沒有 tools.jar 的,安裝低版本 JDK 部署即可。

4. 報錯404

4.1 案例一

問題描述:

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 以上。

4.2 案例二

問題描述:

The requested resource is not available.

解決方案:

  • 需要檢查一下 JDK 的環境變數配置是否有錯,特別是有沒有設定 JAVA_HOME。

  • Tomcat 版本太低也可能會導致這個錯誤,推薦使用 Tomcat8.5.57 及以上版本,或者 Tomcat8 最新版本。

4.3 案例三

問題描述:

Tomcat 啟動報錯:fine assist start failed

解決方案:

檢查環境變數指向的%JRE_HOME%\bin底下沒有 attach.dll,若沒有 attach.dll 檔案,需要將%JAVA_HOME%\jdk\jre\bin下的 attach.dll 檔案copy到此路徑下。

4.4 案例四

問題描述:

日誌報錯: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。

4.5 案例五

問題描述:

Tomcat 升級或更換為其他版本後,存取報表時報404錯誤,且日誌檔案中存在 RFC 系列錯誤資訊。

解決方案1:

修改 %Tomcat_HOME%\conf 目錄下的 server.xml 檔案,在 server.xml 中新增如下程式碼,重啟伺服器即可。

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" 
relaxedQueryChars='^{}[]|&quot;' />

解決方案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

5. 配置管理者密碼出錯

問題描述:

使用 exe 安裝包安裝的 Tomcat,部署工程後設定管理者帳號時前端報錯:配置管理者密碼出錯,後臺報錯:ERROR [standard] Database is not initialized,如下圖所示:

解決方案:

這是由於 exe 啟動方式記憶體不足導致的,需要調大 tomcat 啟動記憶體。

修改記憶體方法請參見:Tomcat修改記憶體

6. 工程部署到 Tomcat 後沒有生成 fanruan.log

問題描述:

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,stdout
log4j.appender.standard=com.fr.third.apache.log4j.DailyRollingFileAppender
log4j.appender.standard.DatePattern='.'yyyy-MM-dd
log4j.appender.standard.File=${LOG_HOME}/../logs/fanruan.log
log4j.appender.standard.layout=com.fr.third.apache.log4j.PatternLayout
log4j.appender.standard.layout.ConversionPattern=%d{HH\:mm\:ss} %t %p [%c] %m%n
log4j.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

使用者可在程式碼第四行修改日誌存放路徑。

7. 工程啟動時閃退

問題描述:

使用者將 FineReport 工程部署到 Tomcat 伺服器上,啟動 FineReport 工程時出現閃退現象;將 Tomcat 中部署的 FineReport 工程刪除,單獨啟動 Tomcat ,可以正常啟動。日誌報錯如下圖所示:

運作到 ResourceUpdateActivator 模組時閃退。

原因分析:

360 安全軟體阻擋。

解決方案:

1)把運作 java 程式的 java.exe 新增到信任中,即可正常運作。

注:該方法適用範圍:360 天擎-Windows 伺服器版。

2)若採取步驟一後還是無法啟動,需關閉「檔案系統防護」按鈕。

8. Post 提交參數過多時子報表無法顯示

問題描述:

當將 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 位元組。

9. Tomcat 前端報錯 400

問題描述

高版本 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)重啟工程。

10. 雲遷移目錄丟失

Ubuntu 系統下,將正式環境中的 Tomcat 打包後copy到雲伺服器上,啟動Tomcat後,目錄丟失,同時,在目錄管理中新增目錄,提示報錯資訊“目錄已存在”。

10.1 報錯資訊一

問題描述

報錯資訊如下所示:

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+problem
java.lang.UnsatisfiedLinkError: /mnt/jdk1.8/jre/lib/amd64/libawt_xawt.so: libXrender.so.1: cannot open shared
object file: No such file or directory

解決方案

apt-get install libxrender-dev,重啟 Tomcat 。

10.2 報錯資訊二

問題描述

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 。

11. 請求目標中找到無效字元

問題描述:

啟動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=|

改成

tomcat.util.http.parser.HttpParser.requestTargetAllow=|{}

表示把{}放行


附件列表


主題: 部署集成
已經是第一篇
已經是最後一篇
  • 有幫助
  • 沒幫助
  • 只是瀏覽
  • 圖片不清晰
  • 用語看不懂
  • 功能說明看不懂
  • 操作說明太簡單
  • 內容有錯誤
中文(繁體)

滑鼠選中內容,快速回饋問題

滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。

不再提示

10s後關閉

獲取幫助
線上支援
獲取專業技術支援,快速幫助您解決問題
工作日9:00-12:00,13:30-17:30在线
頁面反饋
針對當前網頁的建議、問題反饋
售前咨詢
業務咨詢
電話:0933-790886或 0989-092892
郵箱:taiwan@fanruan.com
頁面反饋
*問題分類
不能為空
問題描述
0/1000
不能為空

反馈已提交

网络繁忙