`
zhaohaolin
  • 浏览: 1012293 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

tomcat 7 源码分析-4 server初始化背后getServer().init()

阅读更多

tomcat 7 源码分析-4 server初始化背后getServer().init()

getServer().init()其实就是调用server的init函数,但是server是个interface,还要看其在new的时候,这个就是多态。

 

Java代码  收藏代码
  1. digester.addObjectCreate( "Server" ,  
  2.                          "org.apache.catalina.core.StandardServer" ,  
  3.                          "className" );  
  4. digester.addSetProperties("Server" );  
  5. digester.addSetNext("Server" ,  
  6.                     "setServer" ,  
  7.                     "org.apache.catalina.Server" );  
        digester.addObjectCreate("Server",
                                 "org.apache.catalina.core.StandardServer",
                                 "className");
        digester.addSetProperties("Server");
        digester.addSetNext("Server",
                            "setServer",
                            "org.apache.catalina.Server");

 

 上面的句子就类似于

 

Java代码  收藏代码
  1. Server server =  new  StandardServer();  
  2. server.init();  
		Server server = new StandardServer();
		server.init();

 

 具体的继承关系的部分如图

server和lifecycle继承关系

 

源代码很好的运用了interface和抽象类,并且继承和接口实现都有运用。可以很好的理解接口和抽象类的关系。

依照这个UML图,写了个小的demo还分析,打包在附件中,interface和class在多态上的作用。

运行了如下语句,结果发现结果一样。

 

Java代码  收藏代码
  1. Server server =  new  StandardServer();  
  2. server.init();  
  3.   
  4. LifecycleMbeanBase lserver = new  StandardServer();  
  5. lserver.init();  
  6.   
  7. Lifecycle lcserver = new  StandardServer();  
  8. lcserver.init();  
		Server server = new StandardServer();
		server.init();
		
		LifecycleMbeanBase lserver = new StandardServer();
		lserver.init();
		
		Lifecycle lcserver = new StandardServer();
		lcserver.init();

 StandardServer既实现了接口server,又继承了来自server父类lifecycle(也是一个接口)实现的类LifecycleMbeanBase 。

这个关系就显的复杂了,到底在多态的时候怎么运作的?

可否这样认为:1. 实现接口,也是一定意义上的继承 2.接口的方法,最终运行还要看它实现的类

 

StandardServer最终拥有了server,lifecycle,MBeanRegistration三个特征。

server--定义很多例如全局Naming资源,端口号,地址等

lifecycle--规定了整个运行的状态,例如初始化后的状态可以使stop,也可以是starting,然后是started等。有点类似于状态机。

MBeanRegistration--资源的注册,涉及到JVM的管理

分享到:
评论

相关推荐

    apache-tomcat-9.0.54-embed.tar.gz

    StandardServer server = (StandardServer) bootstrap.getServer(); server.setPort(8080); // 设置监听端口 bootstrap.start(); // 启动Tomcat // 在此处添加你的业务逻辑 bootstrap.stop(); // 停止Tomcat }...

    我的tomcat7源码手撕过程

    - **服务器初始化**:通过`getServer().setCatalina(this)`设置`Catalina`对象与服务器对象之间的关联,然后调用`getServer().init()`进行初始化。 6. **StandardServer初始化**: - 在`init`方法中,遍历所有的...

    apache-tomcat-7.0.57:关于Apache-tomcat-7.0.57的研究来源

    ====================research the source about apache-tomcat-7.0.57======...引领一个初始化流程:通过反射调用 Catalina.load()方法--> getServer().init() -引 发->LifecycleBase.init()->StandardServer.initI

    使用embeded tomcat进行嵌入式javaee开发-启动tomcat

    Embeded Tomcat是指将Tomcat服务器作为Java应用程序的一部分,在代码中直接初始化和管理,而不是作为一个独立的服务运行。这为开发者提供了灵活性,可以在构建和测试阶段轻松地集成和部署Web应用。 要使用embeded ...

    exfilkit:数据渗透实用程序,用于测试检测功能

    # ./exfilkit-cli.py -m exfilkit.methods.http.param_cipher.GETServer -lp 80 -o output.log 客户 $ ./exfilkit-cli.py -m exfilkit.methods....

    lollipopz:数据渗透实用程序,用于测试检测功能

    棒棒糖░▒▓ ...渗透方法/ etc / shadow-> HTTP GET请求服务器# ./lollipopz-cli.py -m lollipopz.methods.http.param_cipher.GETServer -lp 80 -o output.log客户$ ./lollipopz-cli.py -m lollipopz.methods....

    tomcat-embed5.5.28

    4. **资源节省**:由于每个应用都有自己的Tomcat实例,避免了多应用共享服务器可能导致的资源竞争,提升了项目的执行效率。 5. **测试友好**:在单元测试和集成测试中,可以快速启动和停止Tomcat,便于自动化测试。...

    javaMail代码记录 javaMail代码记录

    1. **初始化配置**: ```java Properties props = System.getProperties(); props.put("mail.smtp.host", mitem.getServer()); props.put("mail.smtp.auth", "true"); ``` - `Properties`对象用于存储邮件服务...

    嵌入式tomcat,带例子。

    2. **初始化Tomcat**:创建一个`Tomcat`实例,并设置web应用的根目录(通常是`WebappBase`),例如`new Tomcat().setBaseDir(".")`,这表示当前目录为web应用的基础目录。 3. **配置Context**:添加`Context`对象,...

    tomcat5.5嵌入版

    2. **初始化Tomcat**:创建`org.apache.catalina.startup.Tomcat`对象,并配置服务器端口、Web应用上下文路径等。 3. **添加Web应用**:使用`Tomcat.addWebapp()`方法将应用的WAR文件或目录添加到服务器中。 4. **...

    59-Spring Boot内嵌Tomcat配置1

    在本篇文章中,我们将探讨如何对 Spring Boot 内嵌的 Tomcat 进行个性化配置。 首先,Spring Boot 提供了 `TomcatEmbeddedServletContainerFactory` 类来定制 Tomcat 容器的行为。通过扩展这个类并覆盖其方法,我们...

    带注释的Bootstrap.java

    * JAR files found in the "server" directory under "catalina.home"), and * starts the regular execution of the container. The purpose of this * roundabout approach is to keep the Catalina internal ...

    Delphi 实现OLE Client Server 通讯

    Delphi,作为一款强大的Windows应用程序开发工具,提供了丰富的支持来实现OLE通信,包括客户端(Client)和服务器(Server)的交互。本篇文章将深入探讨如何使用Delphi实现OLE客户端和服务器的通信。 首先,我们要...

    02_SpringCloud客户端负载均衡Ribbon.md

    @RequestMapping("/getServer") public String getServerInstance(){ List<ServiceInstance> list = discoveryClient.getInstances("consul-order"); for (ServiceInstance serviceInstance : list) { if...

    Embedded-Tomcat:WAR 中的 Tomcat 示例

    接下来,编写Java代码来初始化和管理嵌入式Tomcat。以下是一个简单的示例: ```java import org.apache.catalina.startup.Tomcat; public class Main { public static void main(String[] args) throws Exception...

    manifest-merger-22.1.1.zip

    4. `src/main/plugin.yml`:插件的核心配置文件,定义插件的元数据,如名称、版本、作者等。 三、Maven构建流程 1. `mvn clean`:清理上一次构建生成的文件,确保新的构建从头开始。 2. `mvn compile`:编译源代码...

    详解通过源码解析Node.js中cluster模块的主要功能实现

    Node.js在启动时会检查NODE_UNIQUE_ID环境变量,根据其值决定是执行master进程的初始化代码(masterInit)还是worker进程的初始化代码(workerInit)。 workerInit函数中定义的cluster._getServer方法会拦截...

    tomcat-maven:通过java代码创建tomcat,模拟springboot的方式

    在Java开发领域,Tomcat是一个广泛应用的开源Servlet容器,它实现了Java Servlet和JavaServer Pages(JSP)规范,为Web应用程序提供了运行环境。SpringBoot则以其便捷的微服务开发方式和自动化配置闻名,它默认集成...

Global site tag (gtag.js) - Google Analytics