Tomcat
- 简介
- 是由 Apache 开发的一个 Servlet 容器
- 容器是什么?
- 容器就是程序的运行环境
- Servlet容器的作用?
- 负责处理客户请求,当客户请求来到时,Servlet容器获取请求,然后调用某个servlet,并把servlet的执行你结果返回给客户
- Servlet是由Java Servlet编写的程序,JavaServlet是基于服务器端编程的API
- Servlet容器的工作过程?
- 当客户请求某个资源时,Servlet容器使用ServletRequest对象把客户的请求信息封装起来
- 然后调用java Servlet API 中定义的Servlet的一些生命周期方法,完成Servlet的执行
- 接着把Servlet执行的要返回给客户的信息封装到ServletResponse对象中
- 最后Servlet容器把客户请求发送给客户
- 每一个Servlet类都执行三个函数。init(),service(),destory()
- 在启动时调用一次init()函数用以进行参数的初始化
- 在服务期间每当收到对该Servlet的请求时,会调用serviece()执行servlet的服务操作
- 当容器销毁时,调用一次destory()函数
- 容器是什么?
- 实现了对Servlet和JSP的支持
- JSP是Java Server Pages是java服务器页面
- JSP运行原理
- 当Wev服务器上的JSP页面第一次被请求执行时,JSP引擎先将JSP页面文件转译为一个Java文件,即Servlet
- Servlet通过HTML与客户交互
- 服务器将前面译好的Java文件编译成字节码文件,再执行这个字节码文件来响应客户
- 当这个JSP页面再次被请求时,只要该JSP文件没有被改动,JSP引擎直接调用已装载的Servlet
- JSP是运行再服务器端的程序,Javascript是运行再客户端的程序
- javascript的三个组成部分
- 核心ECMAScript
- 文档对象模型DOM,Document Object Model
- 浏览对象模型BOM,Browser Object Model
- javascript的三个组成部分
- 提供了Web服务器特有的功能,管理和控制平台、安全域和Tomcat阀等
- 包含一个配置管理工具,也可以通过编辑XML格式的文件配置
- 是由 Apache 开发的一个 Servlet 容器
- 重要目录
- /bin
- 脚本存放目录(启动,关闭)。
- *.sh文件用于Unix系统
- *.bat文件用于Windows系统
- 脚本存放目录(启动,关闭)。
- /conf
- 配置文件目录
- /logs
- 默认文件目录
- /webapps
- webapp运行目录
- /bin
- Web工程发布目录结构
- webapp#站点跟目录
- 工程发布文件夹。其实每个war包都可以视为webapp的压缩包
- MAKE-INF#MAKE-INF目录
- 用于存放工程自身相关的信息,原文件信息,通常由开发工具,环境自动生成
- MANIFEST.MF#配置清单文件
- 用于存放工程自身相关的信息,原文件信息,通常由开发工具,环境自动生成
- WEB-INF#WEB-INF_目录
- Java web应用的安全目录 。所谓的安全就是服务端可以访问,客户端无法访问的目录
- classes#class文件目录
- 存放程序所需要的所有Java class文件
- *.class#程序需要的class文件
- *.xml#程序需要的XML文件
- 存放程序所需要的所有Java class文件
- lib#库文件夹
- 存放程序所需要的所有jar文件
- *.jar#程序要的jar包
- 存放程序所需要的所有jar文件
- web.xml#web应用程序的部署描述文件
- 描述了servlet和组成应用的其他组件,以及应用初始化参数、安全管理约束等
- classes#class文件目录
- Java web应用的安全目录 。所谓的安全就是服务端可以访问,客户端无法访问的目录
- #自定义目录
- #自定义资源文件
- MAKE-INF#MAKE-INF目录
- 工程发布文件夹。其实每个war包都可以视为webapp的压缩包
- webapp#站点跟目录
- 安装
- 前提条件
- Tomcat8.5要求JDK版本为1.7以上
- windows
- 添加环境变量CATALINA_HOME,值为Tomcat的安装路径
- 进入安装目录下的bin目录,运行startup.bat文件,启动Tomcat
- Linux/Unix
- # 下载解压到本地wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-8/v8.5.24/bin/apache-tomcat-8.5.24.tar.gztar -zxf apache-tomcat-8.5.24.tar.gz
- # 启动 Tomcat./apache-tomcat-8.5.24/bin/startup.sh
- 启动后,访问 http://localhost:8080,可以看到 Tomcat 安装成功的测试页面。
- 前提条件
- 配置
- server
- server元素表示整个Catalina servlet容器
- 它必须是conf.server.xml配置文件中的根元素
- 它的属性代表了整个容器的特性
- 属性
- className
- 这个类必须实现org.apache.catalina.server接口
- 默认 org.apache.catalina.core.StandardServer
- 这个类必须实现org.apache.catalina.server接口
- address
- 服务器等待关机命令的TCP/IP地址。如果没有指定地址,则使用localhost
- port
- 服务器等待关机命令的TCP/IP端口号。设置为-1,禁用关闭端口号
- shutdown
- 必须通过TCP/IP连接接收到指定端口号的命令字符串,以关闭Tomcat
- className
- service
- 表示一个或多个连接器组件的组合,这些组件共享一个用于处理传入请求的引擎组件。
- server可以由多个service
- 属性
- className
- 这个类必须实现org.apache.catalina.service接口
- 默认 org.apache.catalina.core.StandardService
- 这个类必须实现org.apache.catalina.service接口
- name
- 此服务的显示名称 ,如果您使用标准的Catalina组件,将包含在日志消息中。与特定服务器关联的每个服务器的名称必须是唯一的
- className
- executor
- 表示可以在Tomcat中的组件之间共享的线程池
- 属性
- className
- 这个类必须实现org.apache.catalin.executor接口
- 默认org.apache.catalina.StandardThreadExecutor
- 这个类必须实现org.apache.catalin.executor接口
- name
- 线程池名称
- 要求唯一,供Connector元素中的Executor属性使用
- 线程池名称
- nameprefix
- 线程名前缀
- maxThreads
- 最大活跃线程数
- 默认200
- 最大活跃线程数
- minSpaceThreads
- 最小活跃线程数
- 默认25
- 最小活跃线程数
- maxIdleTime
- 当前活跃线程大于minSpaceThreads,空闲线程关闭的等待最大时间
- 默认60000ms
- 当前活跃线程大于minSpaceThreads,空闲线程关闭的等待最大时间
- maxQueueSize
- 线程池满情况下的请求排队大小
- 默认integer.Max_Value
- 线程池满情况下的请求排队大小
- className
- connector
- 代表连接组件。Tomcat支持的三种协议:HTTP/1.1,HTTP/2.0,AJP
- 属性
- asyncTimeout
- servlet3.0规范中的异步请求超时
- 默认30s
- servlet3.0规范中的异步请求超时
- port
- 请求连接的TCP port
- 设置为0,则会随机选出一个未占用的端口号
- 请求连接的TCP port
- protocol
- 协议,一般情况设置为HTTP/1.1,这种情况下连接模型会在NIO和APR/native中自动根据配置选择
- URIEncoding
- 对URI的编码方式
- 如果设置系统变量org.apache.catalina.STAICT_SERVLET_COMPLIANCE为true,使用ISO-8859-1编码;如果未设置此系统变量且未设置此属性,使用UTF-8编码
- 对URI的编码方式
- useBodyEncodingForURI
- 是否采用指定的ContentType而不是URIEncoding来编码URI中的请求参数
- asyncTimeout
- context
- context元素表示一个web应用程序,它在特定的虚拟主机中运行。
- 每个Web应用程序都基于Web应用程序存档(WAR)文件,或者包含相应的解包内容的相应目录,如servlet规范中所述
- 属性
- altDDName
- web.xml部署描述符路径
- 默认/WEB-INF/web.xml
- web.xml部署描述符路径
- docBase
- Context的Root路径
- 和Host的appBase相结合,可确定Web应用的实际目录
- Context的Root路径
- failCtxIfServletStratFails
- 同Host中的failCtxIfServletStartFails,只对当前context有效
- 默认为false
- 同Host中的failCtxIfServletStartFails,只对当前context有效
- logEffectiveWebXml
- 是否日志打印Web.xml内容(web.xml由默认的web.xml和应用中的web.xml组成)
- 默认为false
- 是否日志打印Web.xml内容(web.xml由默认的web.xml和应用中的web.xml组成)
- path
- web应用的Context path
- 如果为根路径,则配置为空字符串“”,不能不配置
- web应用的Context path
- privileged
- 是否使用Tomcat提供的manager servlet
- reloadable
- /WEB-INF/classes和/WEB-INF/lib/目录中的Class文件发生变化是否自动重新加载
- 默认false
- /WEB-INF/classes和/WEB-INF/lib/目录中的Class文件发生变化是否自动重新加载
- swallowOutput
- true的情况下,System.out和System.err输出将被定向到web应用日志中
- 默认为false
- true的情况下,System.out和System.err输出将被定向到web应用日志中
- altDDName
- engine
- engine元素表示与特定的catalina服务相关联的整个请求处理机器。
- 它接收并处理来自一个或多个连接器的所有请求,并将完成的响应返回给连接器,以便最终传回客户端
- 属性
- defaultHost
- 默认主机名,用于标识将处理指向此服务器主机名称但未在此配置文件中配置的请求的主机
- 这个名字必须匹配其中一个嵌套的主机元素的名称属性
- 默认主机名,用于标识将处理指向此服务器主机名称但未在此配置文件中配置的请求的主机
- name
- 此引擎的逻辑名称,用于日志和错误消息
- 在同一服务器中使用多个服务元素时,每个引擎必须分配一个唯一的名称
- 此引擎的逻辑名称,用于日志和错误消息
- defaultHost
- host
- host元素表示一个虚拟主机,他是一个服务器的网络名称(如‘www.mycompany.com’)与运行Tomcat的特定服务器的关联
- 属性
- name
- 名称
- 用于日志输出
- 名称
- appBase
- 虚拟主机对应的应用基础路径
- 可以是个绝对路径,或¥{CATALINA_BASE}相对路径
- 虚拟主机对应的应用基础路径
- xmlBase
- 虚拟主机XML基础路径,里面应该由Context Xml配置文件
- 可以是个绝对路径,或¥{CATALINA_BASE}相对路径
- 虚拟主机XML基础路径,里面应该由Context Xml配置文件
- createDirs
- 当appBase和xmlBase不存在时,是否创建目录
- 默认为true
- 当appBase和xmlBase不存在时,是否创建目录
- autoDeploy
- 是否周期性的检查appBase和xmlBase并deploy web应用和context描述符
- 默认为true
- 是否周期性的检查appBase和xmlBase并deploy web应用和context描述符
- deployIgnore
- 忽略deploy的正则
- failCTXServletStartFails
- 配置为true的情况下,任何load-on-startup>=0的servlet启动失败,则其对应的Context也会启动失败
- 默认为false
- 配置为true的情况下,任何load-on-startup>=0的servlet启动失败,则其对应的Context也会启动失败
- name
- cluster
- server
- 启动
- 部署方式
- 要求本地必须安装Tomcat
- 将打包好的war包放在Tomcat安装文件下的webapps目录下,然后在bin目录下执行startup.bat或startup.sh,Tomcat会自动解压webapps目录下的war包
- 成功后可以访问,http://localhost:8080/xxx(xxx 是 war 包文件名)。
- 注意以上步骤时最简单的示例。步骤中的war包的解压路径、启动端口以及更多的功能都可以修改配置文件来定制(主要是serve.xml和context.xml)
- 嵌入式
- API方式
- IDE插件
- 常见的IDE插件都有对Tomcat的支持
- 部署方式