Tomcat体系架构第一篇

一、Tomcat的定义

Tomcat是一款开源轻量级Web应用服务器,是一款优秀的Servlet容器实现。

Servlet是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互地浏览和生成数据,生成动态Web内容。

Servlet严格来讲是指Java语言实现的一个接口,一般情况下我们说的Servlet是指实现了这个Servlet接口的类。

Servlet生命周期

  • 实例化:执行init()方法,只执行一次

  • 请求处理:执行service()方法,执行多次,根据不同的方法调用doGet()、doPost以及其他方法

  • 销毁:执行destroy()方法,只执行一次

Servlet的处理流程

  • 客户端发送Http请求,被委派到Servlet容器

  • Servlet容器收到请求后,会加载Servlet,然后调用service()方法

  • Servlet容器处理由多个线程产生的多个请求,每个线程执行单一的Servlet实例的service()方法

二、Tomcat启动

一般启动

直接启动Tomcat的bin目录下的启动文件startup.bat/startup.sh

IDE中启动

在ide中配置Tomcat Server,然后启动

嵌入式启动

Springboot中在main方法嵌入式启动Tomcat

三、Tomcat项目部署

隐式部署

直接将项目文件夹、war包放到webapps目录下,Tomcat会根据文件夹名称自动生成虚拟路径,修改项目相关文件以及Tomecat配置文件,需要重启Tomcat服务器,访问路径为 http://localhost:8080

显示部署

  • 添加context元素:在server.xml的Host标签内增加Context元素(指定路径和文件地址),修改之后需要重启Tomcat服务器,其中/demo这个虚拟路径映射到D:\project\demo目录下(war会解压成文件),访问路径为 http://localhost:8080/demo

    
        
    
  • 创建xml文件:在conf/Catalina/localhost中创建xml文件,访问路径为文件名,访问路径为 http://localhost:8080/demo

    # 在localhost目录下创建demo.xml,内容如下
    

三种部署方式对比

  • 隐式部署:可以很快部署,需要手动将Web应用放到webapps下;操作中不是很人性化

  • 添加context元素:配置速度快;修改server.xml文件需要重新启动Tomcat服务器,重新部署

  • 创建xml文件:服务器后台会自动部署,修改一次后台部署一次,不用重复启动Tomcat服务器,比较智能化

四、Tomcat目录结构

bin执行脚本目录

  • startup文件:主要是检查catalina.bat/catalina.sh执行所需的环境,并调用catalina.bat/catalina.sh启动Tomcat

  • catalina文件:真正启动Tomcat的文件,可以在文件中设置jvm参数,进行性能调优

  • shutdown文件:关闭Tomcat

  • version文件:查看当前Tomcat的版本号

  • configtest文件:检验Tomcat配置文件server.xml的格式、内容等是否合法和正确

  • service文件:安装Tomcat服务,可用net start tomcat 启动Tomcat

conf配置文件目录

web.xml:Tomcat中所有应用默认的部署描述文件,主要定义了基础的Servlet和MIME映射(mime-mapping文件类型即Tomcat处理的文件类型),如果部署的应用中不包含web.xml,则加载该文件,如果包含Tomcat启动时将该文件与应用的web.xml文件进行合并;加载Tomcat内置的servlet(DefaultServlet--加载静态文件html,js,jpg等;JspServlet--处理jsp)

server.xml:配置Tomcat服务的文件,包括Listener(监听器)、Connector(链接器)等

context.xml:用于自定义所有Web应用均需要加载的Context配置,如果Web应用定义了本身的context.xml,那个该文件的配置将被覆盖

catalina.policy:权限相关Permission,Tomcat是运行在jvm上的,所以有些默认的权限

tomcat-users.xml:配置Tomcat的管理用户信息

logging.properties:设置Tomcat日志

说明:context.xml与server.xml中配置context的区别:server.xml是不可动态重加载的资源,服务器启动之后,要修改该文件,就必须重启服务器才能重新加载;而context.xml文件则不然,Tomcat服务器会定时去扫描该文件,一旦发现文件被修改(时间戳改变了),就会自动重新加载该文件,而不需要重启服务器

lib目录

Tomcat的类库,如果需要添加Tomcat依赖的jar包,放到该目录下;也可以把应用依赖的jar包放到该目录,这个目录中的jar所有项目都可以共享,但是当应用放到其他Tomcat时,就不能共享该目录下的jar包,所以建议只把Tomcat需要的jar包放到该目录下

logs目录

存放日志文件的目录,记录了Tomcat启动和关闭的信息

  • localhost-xxx.log:Web应用的内部程序日志,建议保留

  • catalina-xxx.log:控制台日志

  • host-manager.xxx.log:Tomcat管理页面中的host-manager的操作日志,建议关闭

  • localhost_access_log_xxx.log:用户请求Tomcat的访问日志(在conf/server.xml中配置),建议关闭

webapps目录

存放Web项目的目录,其中每个文件夹都是一个项目(都可以删除);其中ROOT是一个特殊的项目,在地址栏中没有给出项目目录时,对应的就是ROOT项目,其他的文件夹就是项目名

work目录

运行时生成的文件,最终运行的文件都在这里。通过wenapps中的项目生成的,这个目录下的内容可以删除,再次运行时会再次生成;当客户端用户访问一个JSP文件时,Tomcat会通过JSP生成Java文件,然后编译Java文件生成class文件,生成的java和class文件都会存放在这个目录下

temp目录

存放Tomcat的临时文件,这个目录下的内容可以在停止Tomcat后删除

五、Tomcat组件及架构

Server

Server是最顶级的组件,代表Tomcat的运行组件;

  • 提供了监听机制,用于在Tomcat整个生命周期中对不同时间进行处理

  • 提供Tomcat容器全局的命名资源实现,JNDI

  • 监听某个端口以接受Shutdown命令,用于关闭Tomcat

Service

一个Service维护多个Connection和一个Container

Connector组件

链接器,监听转换Socket请求,将请求交给Container处理,支持不同协议以及不同的I/O方式

Container

表示能够执行客户端请求并返回响应的一类对象,其中有不同级别的容器(Engine、Host、Context、Wrapper)

Engine

整个Servlet引擎,最高级的容器对象

Host

表示Servlet引擎中的虚拟机,主要与域名有关,一个服务器有多个域名是可以使用多个Host

Context

用于表示ServletContext,一个ServletContext表示一个独立的Web应用

Wrapper

用于表示Web应用中定义的Servlet

Executor

Tomcat组件间可以共享的线程池

你可能感兴趣的:(Tomcat,Java,Tomcat)