Tomcat环境怎么搭建

发布时间:2022-01-15 09:14:21 作者:iii
来源:亿速云 阅读:112

这篇文章主要介绍“Tomcat环境怎么搭建”,在日常操作中,相信很多人在Tomcat环境怎么搭建问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Tomcat环境怎么搭建”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

No.1 搭建环境

1.1、下载tomcat源码

进入tomcat官网:https://tomcat.apache.org/ 下载对应版本的源码

1.2、导入Eclipse

ant.jar ecj-4.4.jar jaxrpc.jar wsdl4j-1.5.2.jar

No.2 Tomcat顶层结构

Tomcat环境怎么搭建

上图大概展示了tomcat的结构,主要包括如下几个模块:

服务器的意思,代表整个tomcat服务器,一个tomcat只有一个Server;

Server中的一个逻辑功能层,一个Server可以包含多个Service;

称作连接器,是Service的核心组件之一,一个Service可以有多个Connector,主要是连接客户端请求;

Service的另一个核心组件,按照层级有Engine,Host,Context,Wrapper四种,一个Service只有一个Engine,其主要作用是执行业务逻辑;

JSP引擎;

会话管理;

No.3 Server

Server是Tomcat最顶层的容器,代表着整个服务器,即一个Tomcat只有一个Server,Server中包含至少一个Service组件,用于提供具体服务。

这个在配置文件中也得到很好的体现(port=”8005”  shutdown=”SHUTDOWN”是在8005端口监听到”SHUTDOWN”命令,服务器就会停止)。

tomcat中定义了一个Server接口,其声明如下:

public interface Server extends Lifecycle {

它继承了Lifecycle接口,这样当调用start()和stop()方法时,所有已定义的Services也会启动或停止。

No.4 Service

前面我们讲过,一个Server至少包含一个Service组件来提供具体的服务。

那Service的基本功能大致是接收客户端的请求,然后解析请求,完成相应的业务逻辑,然后把处理后的结果返回给客户端。

一般会提供两个节本方法,一个start打开服务Socket连接,监听服务端口,一个stop停止服务释放网络资源。

tomcat中定义一个Service接口,其声明如下:

public interface Service extends Lifecycle {

一个Server可以包含多个Service(它们相互独立,只是公用一个JVM及类库),一个Service负责维护多个Connector和一个Container。

No.5 Connector

Connector是连接器,用于接受请求并将请求封装成Request和Response,然后交给Container进行处理,Container处理完之后在交给Connector返回给客户端。

server.xml默认配置了两个Connector:

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/>
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

Connector在tomcat中的设计大致如下:

Tomcat环境怎么搭建

Endpoint由于是处理底层的Socket网络连接,因此Endpoint是用来实现TCP/IP协议的

Processor用于将Endpoint接收到的Socket封装成Request,Processor用来实现HTTP协议的

Adapter充当适配器,用于将Request转换为ServletRequest交给Container进行具体的处理

No.6 Container

Container 用于封装和管理 Servlet,以及具体处理 Request  请求,在Container内部包含了4个子容器,4个子容器的作用分别是:

引擎,用来管理多个站点,一个Service最多只能有一个Engine;

代表一个站点,也可以叫虚拟主机,通过配置Host就可以添加站点;

代表一个应用程序,对应着平时开发的一套程序,或者一个WEB-INF目录以及下面的web.xml文件;

每一Wrapper封装着一个Servlet;


No.7 tomcat启动流程

tomcat的启动流程很标准化,入口是BootStrap,统一按照生命周期管理接口Lifecycle的定义进行启动。

首先,调用init()方法逐级初始化,接着调用start()方法进行启动,同时,每次调用伴随着生命周期状态变更事件的触发。

public static void main(String args[]) {          if (daemon == null) {             // Don't set daemon until init() has completed             Bootstrap bootstrap = new Bootstrap();             try {                 bootstrap.init();             } catch (Throwable t) {                 handleThrowable(t);                 t.printStackTrace();                 return;             }             daemon = bootstrap;         } else {             // When running as a service the call to stop will be on a new             // thread so make sure the correct class loader is used to prevent             // a range of class not found exceptions.             Thread.currentThread().setContextClassLoader(daemon.catalinaLoader);         }          try {             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("Bootstrap: command \"" + command + "\" does not exist.");             }         } catch (Throwable t) {             // Unwrap the Exception for clearer error reporting             if (t instanceof InvocationTargetException &&                     t.getCause() != null) {                 t = t.getCause();             }             handleThrowable(t);             t.printStackTrace();             System.exit(1);         }  }
public void init() throws Exception  {         // 1、设置catalina.home的配置:将catalina.home系统属性设置为当前工作目录(如果尚未设置)。         setCatalinaHome();     // 2、设置catalina.base的配置:如果没有设置的话,将当前的工作目录为了catalina.base的设置         setCatalinaBase();     // 3、初始化类加载器:commonLoader、catalinaLoader、sharedLoader         initClassLoaders();          Thread.currentThread().setContextClassLoader(catalinaLoader);          SecurityClassLoad.securityClassLoad(catalinaLoader);          // 加载我们的启动类并调用其process()方法         if (log.isDebugEnabled())             log.debug("Loading startup class");     //4、加载启动类         Class<?> startupClass = catalinaLoader.loadClass("org.apache.catalina.startup.Catalina");         //5、实例化启动类     Object startupInstance = startupClass.newInstance();          if (log.isDebugEnabled())             log.debug("Setting startup class properties");      //6、设置方法参数     String methodName = "setParentClassLoader";         Class<?> paramTypes[] = new Class[1];         paramTypes[0] = Class.forName("java.lang.ClassLoader");         Object paramValues[] = new Object[1];         paramValues[0] = sharedLoader;         Method method = startupInstance.getClass().getMethod(methodName, paramTypes);     // 7、调用启动类的setParentClassLoader方法设置共享扩展类加载器         method.invoke(startupInstance, paramValues);          catalinaDaemon = startupInstance;  }
/** * Start the Catalina daemon. */ public void start() throws Exception {     // 如果启动类为实例化,则调用init()方法     if( catalinaDaemon==null ) init();      //获取启动类的start方法     Method method = catalinaDaemon.getClass().getMethod("start", (Class [] )null);     //调用启动类的start方法,即调用org.apache.catalina.startup.Catalina的start()方法     method.invoke(catalinaDaemon, (Object [])null);  }

到此,关于“Tomcat环境怎么搭建”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

推荐阅读:
  1. Tomcat7源码环境搭建
  2. tomcat环境搭建&多实例配置

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

tomcat

上一篇:hadoop框架结构核心是什么

下一篇:springboot整合quartz定时任务框架的方法是什么

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》