反馈已提交

网络繁忙

Tomcat部署问题汇总

  • 文档创建者:Wendy123456
  • 历史版本:12
  • 最近更新:Carly 于 2024-01-02
  • 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 错误。如下图所示:

    1578560537302570.png

    解决方案:

    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.

    ]M6SIHFWLA1BS]T9LT{``P6.png

    解决方案:

    • 确保访问 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.

    P623WRFJ$TMMC_$]B52XU%6.png

    解决方案:

    • 需要检查一下 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 文件拷贝到此路径下。

    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,如下图所示:

    1559700368248933.png

    解决方案:

    这是由于 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文件,如下图所示:

    9.png

    文件内容如下所示:

    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 ,可以正常启动。日志报错如下图所示:

    1608602443925430.png

    运行到 ResourceUpdateActivator 模块时闪退。

    原因分析:

    360 安全软件阻挡。

    解决方案:

    1)把运行 java 程序的 java.exe 添加到信任中,即可正常运行。如下图所示:

    注:该方法适用范围:360 天擎-Windows 服务器版。

    4.png

    2)若采取步骤一后还是无法启动,需关闭「文件系统防护」按钮。如下图所示:

    6.png

    8. Post 提交参数过多时子报表无法显示

    问题描述:

    当将 FineReport 部署到 Tomcat 上时,当需要将主表的参数通过网络报表全部传递给子表,选择如下图的设置:

    image.png

    image.png

    点击主表的链接,钻取到子表。而有时候主表有需要大量的传递参数,将参数传递和继承给各个子表,会导致子表无法显示无法运算的问题,页面为空白页面或者如下图所示:

    image.png

    原因分析:

    由于 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"

    如下图所示:

    1618987868871203.png

    2)重启工程。

    10. 云迁移目录丢失

    Ubuntu 系统下,将正式环境中的 Tomcat 打包后拷贝到云服务器上,启动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在线
    页面反馈
    针对当前网页的建议、问题反馈
    售前咨询
    采购需求/获取报价/预约演示
    或拨打: 400-811-8890 转1
    qr
    热线电话
    咨询/故障救援热线:400-811-8890转2
    总裁办24H投诉:17312781526
    提交页面反馈
    仅适用于当前网页的意见收集,帆软产品问题请在 问答板块提问前往服务平台 获取技术支持