zoukankan      html  css  js  c++  java
  • Failed to start component [StandardEngine[Tomcat].StandardHost[localhost]]

    1、问题场景描述:一个maven项目启动时候,偶尔会报tomcat的这个错误(如图:)

    随机报错,有时频率很高,要一直重新启动很多次可能还是启动不了,有时不报错。。

    2、解决过程:网上各种寻找解决办法,大部分说的是servlet-api的jar包版本和项目使用的tomcat版本不对应,然后去找了一下servlet-api的jar包版本和tomcat版本的对应关系,

    发现servlet-api的jar包版本和tomcat版本是对应的,此工程使用的是tomcat7组件,pom文件中

    本地仓库中的servlet-api的jar包

     是符合对应要求的,说明不是这个问题,开始了解学习tomcat的standardEngine和standardHost这两个类的源码,

    a、StandardHost类是Host接口的默认实现;其继承自ContainerBase类,说明他也是一个容器类,既然是容器类,那肯定也有管道对象PipeLine和阀门,其基础阀门(Basic Valve)的实现类是org.apache.catalina.core.StandardHostValve,ErrorReportValve和ErrorDispatcherValve类作为管道对象中的错误处理阀门;

    b、当客户端的请求Request要在Host中查找到相应的Context处理请求时,就需要使用mapper对象处理,StandardHost中的mapper实现类是org.apache.catalina.core.StandardHostMapper;当ContainerBase.start启动时会调用addDefaultmapper添加默认的映射器,也就会调用到StandardHost.addDefaultmapper方法:

    c、Engine容器也就是tomcat的servlet引擎,StandardEngine类是Engine接口的默认实现;当部署tomcat时需要支持多个虚拟机的话,就需要使用engine容器,事实上,一般情况下,部署的tomcat都会使用一个Engine容器;

    d、StandardEngineValve类作为StandardEngine类的基础阀门(Basic Valve),其invoke方法负责查找出对应的Host出来并交由host处理;

    ......了解了个大概,再回头看下原来的报错,大概知道是启动时候类似于类加载的问题,涉及的很多多个项目工程共用的jar包和单独有的jar包问题等等,需要使用catalina.properties配置文件,经行一些共用和单独使用的一些jar包进行管理,部署一些公用类设置,类加载设置等等:

    讲catalina.properties文件放在target文件的tomcat文件夹中的conf配置文件夹目录下,catalina.properties文件其实就是公猫即tomcat的内部脚本文件。

    问题解决。

    附加上这个catalina.properties附件的地址 https://files.cnblogs.com/files/wmqiang/catalina.zip

    打听下这个变量名谁起的
  • 相关阅读:
    webstorm9.0.3 注册码
    SpringMVC 文件上传下载
    Nginx解决post请求405问题
    nginx配置Strict Transport Security
    MySQL修改max_allowed_packet
    ELK批量删除索引
    ELK出现unassigned_shards查看及删除
    Nagios监控mysql主从复制
    Linux DNS原理简介及配置
    root密码重置(Centos 7)
  • 原文地址:https://www.cnblogs.com/wmqiang/p/10413245.html
Copyright © 2011-2022 走看看