文档章节

【问题】Tomcat中 执行tomcat7.exe报错

_咫尺_
 _咫尺_
发布于 2015/01/21 14:41
字数 777
阅读 261
收藏 1

The system cannot find the Registry key for service 'tomcat7'

    问题:

   在启动解压后的tomcat7,点击bin下面的tomcat7.exe失败了,报错“The system cannot find the Registry key for service 'tomcat7'”。

    

    回想,之前的安装版本直接点tomcat7.exe也可以的呀,在eclipse里面启动tomcat也是可以的呀,为什么这里就报错了呢?

    原因:

  1.     安装版本直接点tomcat7.exe,是因为在安装的时候,

    这里我们已经安装了tomcat服务,名字为Tomcat7,在window服务中就会存在


  2. 所以,在运行tomcat的时候我们就能直接点击tomcat7.exe

  3.     在eclipse里面启动tomcat也是可以的

        在eclpse中配置的tomcat,也并不是以tomcat服务启动的,而是启动tomcat程序,相当于启动startup.bat,所以不需要安装tomcat服务。

    解决方法:

    1、安装tomcat服务:service.bat install [service_name]

    

    然后启动便可,在window服务中查看,于是就能启动tomcat服务了。当service_name不存在时会默认

    

    要删除tomcat服务:service.bat remove [service_name],如果安装的时候命名了删除的时候也是需要名称的。

    2、直接点击tomcat下面的startup.bat来启动。

    延伸:

  1.  startup.bat与tomcat7.exe的区别

    1. 两个都可以启动tomcat,而tomcat7.exe必须安装了服务才能启动,而startup.bat不需要;

    2. tomcat7.exe是服务模式运行的(图1),startup.bat是Doc窗口运行的(图2)

    3. 图1

      图2


    4. startup.bat在Linux中当然对应的就是startup.sh

  2.     tomcat启动过程

  3. startup.bat调用了catalina.bat,catalina.bat从命令行启动org.apache.catalina.startup.Bootstrap,这个类有main方法,看一下bootstrap源码

    init方法如下,然后调用load()和start()方法:

    public void init()
        throws Exception
      {
        setCatalinaHome();
        setCatalinaBase();
    
        initClassLoaders();
    
        Thread.currentThread().setContextClassLoader(this.catalinaLoader);
    
        SecurityClassLoad.securityClassLoad(this.catalinaLoader);
    
        if (log.isDebugEnabled())
          log.debug("Loading startup class");
        Class startupClass = this.catalinaLoader.loadClass("org.apache.catalina.startup.Catalina");
    
        Object startupInstance = startupClass.newInstance();
    
        if (log.isDebugEnabled())
          log.debug("Setting startup class properties");
        String methodName = "setParentClassLoader";
        Class[] paramTypes = new Class[1];
        paramTypes[0] = Class.forName("java.lang.ClassLoader");
        Object[] paramValues = new Object[1];
        paramValues[0] = this.sharedLoader;
        Method method = startupInstance.getClass().getMethod(methodName, paramTypes);
    
        method.invoke(startupInstance, paramValues);
    
        this.catalinaDaemon = startupInstance;
      }

    init方法前面几句,初始化cacatalina类。设置catalina.home,catalina.base的环境变量,和初始化三个类加载器。

    然后,构件好的catalinaLoader加载tomcat最核心的对象org.apache.catalina.startup.Catalina类的对象catalinaDaemon

    main下面

    String command = "start";
          if (args.length > 0) {
            command = args[(args.length - 1)];
          }
    
          if (command.equals("startd")) {
            args[(args.length - 1)] = "start";
            daemon.load(args);
            daemon.start();
          } else if (command.equals("stopd")) {
            args[(args.length - 1)] = "stop";
            daemon.stop();
          } else if (command.equals("start")) {
            daemon.setAwait(true);
            daemon.load(args);
            daemon.start();
          } else if (command.equals("stop")) {
            daemon.stopServer(args);
          } else if (command.equals("configtest")) {
            daemon.load(args);
            if (null == daemon.getServer()) {
              System.exit(1);
            }
            System.exit(0);
          } else {
            log.warn(new StringBuilder().append("Bootstrap: command \"").append(command).append("\" does not exist.").toString());
          }

    setAwait(),设置了Catalina对象的一个属性值,告诉服务器启动后保持运行状态,并开启特定端口监听后续发来的指令,直到收到SHUTDOWN指令,做关闭服务器处理。

    load(),是加载和初始化。对整个Tomcat服务器相关的配置文件进行加载和解析处理,并对Tomcat的各个组件进行初始化配置操作。

    start(),是正式启动Catalina,或者说启动了Tomcat服务器的核心工作。


    原创作者博客已经迁移至github,点击查看

© 著作权归作者所有

_咫尺_
粉丝 24
博文 11
码字总数 5503
作品 0
朝阳
程序员
私信 提问
Windows中tocmat设置为服务开机启动

Windows中tocmat设置为服务开机启动 一 安装Java,tomcat 安装jdk,解压tomcat,配置好Java环境变量 二 配置tomcat作为服务启动 tomcat7.exe 、tomcat7w.exe这两个文件要起作用,必须先为这个...

独一无二zz
2018/06/29
0
0
windows下安装多个tomcat服务

1、官网下载tomcat 7 解压缩版本。我使用的是 apache-tomcat-7.0.55-windows-x64.zip。 2、解压tomcat,重命名为tomcat7.1,复制2个,并重命名为tomcat7.2、tomcat7.3 3、进入D:servicetomcat...

hanfeng
2014/07/01
5.6K
2
JProfiler配置问题...

首先开始时出现以下警告,我无视了... 这个bat是我自己写的..内容是这样的.. start "" "D:\Apache Software Foundation\Tomcat 7.0\bin\Tomcat7.exe" 好吧,然后我启动了,于是就有下图... 我......

L_huiyin
2012/12/22
812
3
Eclipse中的Tomcat启动后,会立即自动访问一次主页,是什么原因?

我并没有在代码里让它这么做,Tomcat in Eclipse在启动完成后(INFO: Server startup in 9943 ms),就立即自动发起了一次项目根路径的访问,非常莫名其妙。 打印request的user-agent头,得到...

oulaly
2016/12/14
1K
4
Tomcat/JVM常见问题排除及性能优化

最近一个SSH2项目升级了框架,部署后发现执行一段时间就会无法访问(Tomcat及其下其它Web可以正常访问)。 MyEclipse中进行“压力测试”时报错: Exception in thread "com.mchange.v2.asyn...

Iuranus
2015/07/08
1K
2

没有更多内容

加载失败,请刷新页面

加载更多

计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
6
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
7
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
6
0
【技术分享】TestFlight测试的流程文档

上架基本需求资料 1、苹果开发者账号(如还没账号先申请-苹果开发者账号申请教程) 2、开发好的APP 通过本篇教程,可以学习到ios证书申请和打包ipa上传到appstoreconnect.apple.com进行TestF...

qtb999
昨天
10
0
再见 Spring Boot 1.X,Spring Boot 2.X 走向舞台中心

2019年8月6日,Spring 官方在其博客宣布,Spring Boot 1.x 停止维护,Spring Boot 1.x 生命周期正式结束。 其实早在2018年7月30号,Spring 官方就已经在博客进行过预告,Spring Boot 1.X 将维...

Java技术剑
昨天
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部