• Tomcat启动log打印到INFO: At least one JAR was scanned for TLDs yet contained no TLD各种解决方式


    问题:

    启动tomcat时,catalina.out日志打印到如下内容就停止不动了,也不报错

    SEVERE: FarmWarDeployer can only work as host cluster subelement!
    Dec 02, 2016 4:27:39 PM org.apache.catalina.startup.HostConfig deployWAR
    INFO: Deploying web application archive /app/apache-tomcat-7.0.73/webapps/ROOT.war
    Dec 02, 2016 4:27:43 PM org.apache.catalina.startup.TldConfig execute
    INFO: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.

    根本原因是Jar包检查TLD标签没有通过,解决办法是删除 conf/catalina.properties中的部分内容

    org.apache.catalina.startup.TldConfig.jarsToSkip=XXX.jar,XXXX.jar

    修改为如下:

    org.apache.catalina.startup.TldConfig.jarsToSkip=

    具体处理步骤:

    1.调整Tomcat对应类的log级别

    修改${tomcat}/conf/log4j.properties

    Java代码  收藏代码
    1. ##解除类org.apache.jasper.compiler.TldLocationsCache的log  
    2. org.apache.jasper.compiler.TldLocationsCache.level = FINE  

     2.观察Tomcat日志打印信息

    步骤1执行完后,重启Tomcat,观察Tomcat日志,会在日志中发现类似如下打印信息:

    Java代码  收藏代码
    1. 九月 09, 2013 10:55:37 上午 org.apache.jasper.compiler.TldLocationsCache tldScanJar  
    2. 详细: No TLD files were found in [file:/E:/devspace/xxt_login/WEB-INF/lib/json-lib-2.3-jdk15.jar]. Consider adding the JAR to the tomcat.util.scan.DefaultJarScanner.jarsToSkip or org.apache.catalina.startup.TldConfig.jarsToSkip property in CATALINA_BASE/conf/catalina.properties file.  
    3. 九月 09, 2013 10:55:37 上午 org.apache.jasper.compiler.TldLocationsCache tldScanJar  
    4. 详细: No TLD files were found in [file:/E:/devspace/xxt_login/WEB-INF/lib/poi-3.8.jar]. Consider adding the JAR to the tomcat.util.scan.DefaultJarScanner.jarsToSkip or org.apache.catalina.startup.TldConfig.jarsToSkip property in CATALINA_BASE/conf/catalina.properties file.  

    3.调整${tomcat}/conf/catalina.properties,将提示的jar添加到不扫描清单中

    Java代码  收藏代码
    1. tomcat.util.scan.DefaultJarScanner.jarsToSkip=  
    2. bootstrap.jar,commons-daemon.jar,tomcat-juli.jar,  
    3. annotations-api.jar,el-api.jar,jsp-api.jar,servlet-api.jar,  
    4. catalina.jar,catalina-ant.jar,catalina-ha.jar,catalina-tribes.jar,  
    5. jasper.jar,jasper-el.jar,ecj-*.jar,  
    6. tomcat-api.jar,tomcat-util.jar,tomcat-coyote.jar,tomcat-dbcp.jar,  
    7. tomcat-jni.jar,tomcat-spdy.jar,  
    8. tomcat-i18n-en.jar,tomcat-i18n-es.jar,tomcat-i18n-fr.jar,tomcat-i18n-ja.jar,  
    9. tomcat-juli-adapters.jar,catalina-jmx-remote.jar,catalina-ws.jar,  
    10. tomcat-jdbc.jar,  
    11. tools.jar,  
    12. commons-beanutils*.jar,commons-codec*.jar,commons-collections*.jar,  
    13. commons-dbcp*.jar,commons-digester*.jar,commons-fileupload*.jar,  
    14. commons-httpclient*.jar,commons-io*.jar,commons-lang*.jar,commons-logging*.jar,  
    15. commons-math*.jar,commons-pool*.jar,  
    16. jstl.jar,  
    17. geronimo-spec-jaxrpc*.jar,wsdl4j*.jar,  
    18. ant.jar,ant-junit*.jar,aspectj*.jar,jmx.jar,h2*.jar,hibernate*.jar,httpclient*.jar,  
    19. jmx-tools.jar,jta*.jar,log4j*.jar,mail*.jar,slf4j*.jar,  
    20. xercesImpl.jar,xmlParserAPIs.jar,xml-apis.jar,  
    21. junit.jar,junit-*.jar,ant-launcher.jar,  
    22. json-lib-*.jar,poi-*.jar  

    【注意】

    1.如果使用eclipse server插件、Sysdeo tomcat插件启动Tomcat,此配合可能无效

    2.步骤1调整完后,最好清除下以下两个文件夹${tomcat}/conf/Catalina ${tomcat}/work/Catalina

    3.尽量使用*号实现模式匹配,以避免因jar版本升级带来的重复修改代价

    原因

    Tomcat 7/8都使用org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom类产生安全随机类SecureRandom的实例作为会话ID,这里花去了342秒,也即接近6分钟。

    SHA1PRNG算法是基于SHA-1算法实现且保密性较强的伪随机数生成器。

    在SHA1PRNG中,有一个种子产生器,它根据配置执行各种操作。

    1)如果java.security.egd属性或securerandom.source属性指定的是”file:/dev/random”或”file:/dev/urandom”,那么JVM会使用本地种子产生器NativeSeedGenerator,它会调用super()方法,即调用SeedGenerator.URLSeedGenerator(/dev/random)方法进行初始化。

    2)如果java.security.egd属性或securerandom.source属性指定的是其它已存在的URL,那么会调用SeedGenerator.URLSeedGenerator(url)方法进行初始化。

    这就是为什么我们设置值为”file:///dev/urandom”或者值为”file:/./dev/random”都会起作用的原因。

    在这个实现中,产生器会评估熵池(entropy pool)中的噪声数量。随机数是从熵池中进行创建的。当读操作时,/dev/random设备会只返回熵池中噪声的随机字节。/dev/random非常适合那些需要非常高质量随机性的场景,比如一次性的支付或生成密钥的场景。

    当熵池为空时,来自/dev/random的读操作将被阻塞,直到熵池收集到足够的环境噪声数据。这么做的目的是成为一个密码安全的伪随机数发生器,熵池要有尽可能大的输出。对于生成高质量的加密密钥或者是需要长期保护的场景,一定要这么做。

    那么什么是环境噪声?

    随机数产生器会手机来自设备驱动器和其它源的环境噪声数据,并放入熵池中。产生器会评估熵池中的噪声数据的数量。当熵池为空时,这个噪声数据的收集是比较花时间的。这就意味着,Tomcat在生产环境中使用熵池时,会被阻塞较长的时间。

    解决

    有两种解决办法:

    1)在Tomcat环境中解决

    可以通过配置JRE使用非阻塞的Entropy Source。

    在catalina.sh中加入这么一行:-Djava.security.egd=file:/dev/./urandom 即可。

    加入后再启动Tomcat,整个启动耗时下降到Server startup in 2912 ms。

    2)在JVM环境中解决

    打开$JAVA_PATH/jre/lib/security/java.security这个文件,找到下面的内容:

    securerandom.source=file:/dev/urandom
    
    • 1
    • 2

    替换成

    securerandom.source=file:/dev/./urandom
    

    第一种:严格遵守java规范,修改对象的属性名称,要求不包含java关键字; 
    第二种:修改EL表达式,例如"${owner.new}"可以修改为"${owner['new']}"; 
    第三种:修改tomcat属性,忽略对EL表达式的关键字检查。修改$CATALINA_BASE/conf/catalina.properties文件,添加org.apache.el.parser.SKIP_IDENTIFIER_CHECK=true选项。

    第四种:参照:http://blog.csdn.net/yasi_xi/article/details/49642661关于这个的处理

    通过上面五种方式处理过后还是报同样的错误,就开始尝试替换tomcat版本。也尝试更换tomcat的默认目录,也考虑过项目在打包成war之前项目是不是有断点。这些排除之后还是一样报错。到这里几乎已经快放弃了。但是后来想了想有没有可能是数据库的问题呢?(经过验证就是数据库的问题)

    The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received

    最后问题解决

    其实就是一个数据库的映射端口的问题,Linux服务器将3306的端口对外映射成了13306,而我的数据库连接URL中还是用的这个13306这个端口。项目部署到Linux服务器后这个端口应该改成3306即可。

  • 相关阅读:
    选择正确的API从SQL Server获取XML数据
    XmlTextWriter学习笔记[转]
    简单的在线RSS阅读器[转]
    如何从客户端 JavaScript 调用 .NET Web 服务使用 InternetExplorer 和 MSXML
    用xmlhttp将html的数据打包成multipart/formdata格式,实现异步上传文件功能[转]
    ASP.Net中MD5加密16位32位
    第一个XMLHTTP测试成功![原创]
    php目录操作函数
    原创JS幻灯片效果,超少代码
    PHP MVC设想,MVC框架构思(一)
  • 原文地址:https://www.cnblogs.com/interdrp/p/7763040.html
Copyright © 2020-2023  润新知