以下回答来自chatGPT
-
server是什么?
Server可以翻译为服务器,是一种提供网络服务的计算机系统。它可以接受来自客户端的请求并响应这些请求,以满足客户端的需求。服务器可以提供各种服务,例如网站托管、电子邮件、数据库、文件共享等。服务器通常需要具备高性能、可靠性、安全性等特点,以确保能够稳定运行,并保障用户数据的安全。
-
为什么要reset server不然server会被关掉?
重置服务器(Reset Server)是指在服务器出现故障或出现无法恢复的错误时,通过将服务器的软件和硬件状态恢复到默认设置,来修复服务器问题的一种方法。在一些情况下,重置服务器可以避免服务器被关闭,而直接关闭服务器可能会导致数据丢失和其他更严重的问题。
当服务器出现问题时,如果通过其他手段无法解决,例如重启服务器、重启服务等方法都无法解决问题,那么重置服务器是解决问题的一种有效方法。通过重置服务器,可以清除服务器上的任何配置和设置,从而消除任何已知的问题,并让服务器回到初始状态,重新启动服务。
在重置服务器之前,需要备份服务器上的重要数据和配置文件,以避免数据的丢失和配置的丢失。同时,在服务器出现问题时,也应该及时联系服务器的技术支持团队或者管理员,以获取更详细的指导和支持。 -
server和servic的区别
Server和Service都是计算机领域中的术语,但是它们的含义有所不同。
Server(服务器)是一种计算机系统或者程序,它可以响应客户端请求,向客户端提供各种服务,如网站托管、电子邮件、数据库、文件共享等。
Service(服务)是指计算机系统中的一种软件模块,它可以提供某种特定的功能或者服务。Service可以作为一个独立的程序运行,也可以作为一个服务器的一部分运行。
简单来说,Server强调的是一个具有服务提供功能的计算机系统或者程序,而Service则强调的是计算机系统中的一种特定的软件模块,它可以提供某种特定的功能或者服务
Server组件和Service组件是Tomcat核心组件中最外层的两个组件。
Server组件是Tomcat运行实例的抽象,Server组件包含若干Listener组件、GlobalNamingResources组件和若干Service组件。
Service组件包含若干Connector组件和Executor组件。
1.Server组件
server.xml配置文件。
主要作用是:
- 提供了监听机制,用于对Tomcat整个生命周期中对不同事件进行处理。
- 提供了Tomcat容器全局的命令资源实现。
- 监听某个端口以接收SHUTDOWN命令。
1.1 声明周期监控
Tomcat在运行中是存在很多阶段的,也就是Tomcat会处于不同的生命周期中。而Server会在某些阶段执行某些逻辑,提供了监听器机制。(这里的意思感觉是如果我能控制的了这个控制器,是不是就可以去做一些不死的操作。)
下面是一些监听器。
- AprLifecyCleListener监听
- JasperListener监听
- JreMemoryLeakPreventionListener监听
- GlobalResourcesLifecycleListener监听
- ThreadLocalLeakPreventionListener监听
- NamingContextListener监听
1.2 全局命名资源
Server组件包含了一个全局命名资源,提供的命名对象通过ResourceLink可以给所有Web应用使用。
Tomcat启动的时候会将Server.xml配置文件里面GlobalNamingResources节点通过Digester框架映射到一个NamingResources对象。
1.3 监听SHUTDOWN命令
Server会另外开放一个端口用于监听关闭命令,默认为8005.
Tomcat中有两类线程,一类是主线程,另外一类是daemon线程。当Tomcat启动的时候,Server将被主线程执行,完成所有启动工作。
然后主线程相当于是一直在等结束。
2.Service组件
Service组件是若干Connector组件和Executor组件组合而成。
不同的端口对应不同的Connector。
Executor组件在Service抽象层面提供了线程池,让Service的组件可以公用线程池。
Tomcat各个组件:
Server
服务器,Tomcat服务器,一个Tomcat只有一个Server组件;
Service
业务层,是Server下最大的子容器,一个Server可以包含多个Service组件;
Tomcat实例化的是StandardServer,Server同样实现了Lifecycle接口
StandardServer实例化初始化了globalNamingResources,具体干嘛的还不清楚,和JNDI相关;Catalina的load方法的initNaming方法,决定了这里会添加第一个监听器NamingContextListener,这个LifecycleListener暂时不需要了解,JNDI上下文相关的. 其次的LifecycleListener是通过server.xml读取.
也就是说StandardServer实例化之后共有六个LifecycleListener,当然这些LifecycleListener具体作用暂时还不用知道,看名字简单了解下打印日志、内存防止泄露等等.
组件真正的初始化方法initInternal
只要继承了LifecycleMBeanBase的类,调用父类的initInternal方法,目的是为了将该组件注册到JMX管理,JMX的作用暂时不是现在记录的重点。加载classLoader,也就是commonLoader,指向catalina.home/lib,对下面的jar文件进行校验;最后就是遍历service组件,分别调用init方法初始化.
Service初始化流程
上图是按照StandardService的init方法简单绘制的。在记录Service初始化流程之前,介绍下StandardService实例化的过程。
Service实例化过程
先查看下server.xml对于Service元素的定义,以Tomcat中标准的server.xml为例. 下就以这样三个子元素为例,
下面就是StandardService初始化具体流程,super.initInternal方法JMX注册; 初始化按照顺序 container—>Executor—>mapperListener---->Connector的顺序
Connector
连接器,Service的子容器,一个Service可以有多个Connector连接器,作用体现在对外,接收客户端请求,HTTP、TCP等;
Container
Service核心组件,通常有Engine、Host、Context、Wrapper,作用是将客户端请求处理;
总而言之,Tomcat的初始化工作,主要是Server初始化,而Server初始化主要看Service的初始化,Service的初始化工作主要是
initInternal方法, 又由其他组件
Container、(Executor)、mapperListener、Connector的初始化来完成。
上面总结了StandardServer、StandardService的实例化、初始化流程。