一、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组件间可以共享的线程池