简述 Tomcat
1.1 Tomcat 简介
1.1.1 概述
Tomcat 最初是由 Sun 的软件架构师詹姆斯·邓肯·戴维森开发的。后来他帮助将其变为开源项目,并由 Sun 贡献给 Apache 软件基金会。由于大部分开源项目 O’Reilly 都会出一本相关的书,并且将其封面设计成某个动物的素描,因此他希望将此项目以一个动物的名字命名。因为他希望这种动物能够自己照顾自己,最终,他将其命名为 Tomcat。而 O’Reilly 出版的介绍 Tomcat 的书籍的封面也被设计成了一个公猫的形象。进而 Tomcat 的 Logo 兼吉祥物也被设计为一只公猫。 Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 JSP 程序的首选。对于一个初学者来说,可以这样认为,在一台机器上配置好 Apache 服务器,可利用它响应 HTML 页面的访问请求。实际上 Tomcat 是 Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行 Tomcat 时,它实际上作为一个与 Apache 独立的进程单独运行的。 Apache 为 HTML 页面服务,而 Tomcat 实际上运行 JSP 页面和 Servlet。另外,Tomcat 和 IIS 等 Web 服务器一样,具有处理 HTML 页面的功能,另外它还是一个 Servlet 和 JSP 容器,独立的 Servlet 容器是 Tomcat 的默认模式。不过,Tomcat 处理静态 HTML 的能力不如 Apache 服务器。
1.1.2 Tomcat 组件说明
Tomca 的心脏是两个组件:Connector 和 Container(Engine,Host,Context,Wrapper)。一个Container 可以选择多个 Connecter,多个 Connector 和一个 Container 就形成了一个 Service。Service 可以对外提供服务,而 Server 服务器控制整个 Tomcat 的生命周期。
顶级组件 Server 服务器(Server):表示一个正在 JVM 运行的 Tomcat 实例;Server 代表整个 catalina Servlet 容器;包含一个或多个 Service 子容器。
顶级组件 Service 服务(Server) 代表 Tomcat 实例本身,Service 则代表 Tomcat 中一组处理请求,提供服务的组件。包括多个 Connector 和一个 Container。
Connector Connector 是客户端连接到Tomcat容器的服务点,它为引擎提供协议服务来将引擎与客户端各种协议隔离开来,如 HTTP、HTTPS、AJP 协议。
Container Container 用于封装和管理 Servlet,以及具体处理 Request 请求;包含 4 大请求处理组件:引擎(engine)、虚拟主机、上下文(context)组件。
其他组件 Tomcat 还有其它重要的组件,如安全组件 security、logger、session、mbeans、naming 等其它组件。这些组件共同为 Connector 和 Container 提供必要的服务。
1.2 Tomcat 的使用
① 下载:点击 Tomcat 下载 , 亦可关注文末公众号回复 Tomcat 获取
② 安装:直接解压即可,注意目录中不要包含中文
③ 启动:bin/startup.bat,双击运行该文件即可,亦可命令行 ./startup.bat
启动
④ 使用浏览器访问:localhost:8080,见到如下页面即启动成功
⑤ 关闭:bin/shutdown.bat,双击运行该文件即可,亦可命令行 ./shutdown.bat
关闭
1.3 常见错误
1.3.1 一闪而过
双击启动后,黑窗口一闪而过,使用命令行启动 tomcat,查看报错信息。这种情况一般是 JAVA_HOME 配置错误导致的,正确配置 JAVA_HOME 就可以解决。
1.3.2 无法创建 Java 虚拟机
这个可能是 jdk 与 tomcat 版本不一致导致的,查找与 jdk 对应 tomcat 的版本再安装尝试一下。
1.3.3 端口占用
① 查看占用端口的程序 netstat -ano | grep 8080
② 强杀进程 taskkill /pid PID /f
其中 /f 表示强制关闭该进程
1.4 Tomcat 配置
1.4.1 环境变量
① 创建系统变量 CATALINA_HOME,变量值为 Tomcat 的解压路径。
② 配置 path,将 %CATALINA_HOME%bin
、%CATALINA_HOME%lib
、%CATALINA_HOME%libservlet-api.jar
都配入其中
③ 验证是否配置成功,启动命令行执行 startup.bat
能够启动 tomcat 则配置成功
1.4.2 默认端口修改
在 confserver.xml
中找到如下配置,修改 port
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
- HDU 2503 a/b + c/d(最大公约数与最小公倍数,板子题)
- python接口自动化6-重定向(Location)
- 2017广东工业大学程序设计竞赛初赛 题解&源码(A,水 B,数学 C,二分 D,枚举 E,dp F,思维题 G,字符串处理 H,枚举)
- python接口自动化7-参数关联
- 深度学习GPU环境Ubuntu16.04+GTX1080+CUDA9+cuDNN7+TensorFlow1.6环境配置
- python接口自动化8-参数化
- HDU 2037 今年暑假不AC(贪心,区间更新,板子题)
- “玲珑杯”ACM比赛 Round #13 题解&源码
- 回溯算法入门及经典案例剖析(初学者必备宝典)
- Selenium2+python自动化66-装饰器之运行失败截图
- 51Nod 1091 线段的重叠(贪心+区间相关,板子题)
- 51Nod 1016 水仙花数 V2(组合数学,枚举打表法)
- Selenium2+python自动化67-用例失败自动截图
- Codeforces Round #404 (Div. 2)(A.水,暴力,B,排序,贪心)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Kubernetes K8S之资源控制器StatefulSets详解
- Kubernetes K8S之资源控制器Daemonset详解
- Kubernetes K8S之资源控制器Job和CronJob详解
- Kubernetes K8S在IPVS代理模式下Service服务的ClusterIP类型访问失败处理
- Kubernetes K8S之Pod跨namespace名称空间访问Service服务
- Kubernetes K8S之Service服务详解与示例
- Kubernetes K8S之Ingress详解与示例
- Kubernetes K8S之存储Secret详解
- 在K8s上轻松部署Tungsten Fabric的两种方式
- Linux系统如何在离线环境或内网环境安装部署Docker服务和其他服务
- Servlet执行流程
- 最新的spring boot技术实现登录、列表、分页、上传等功能
- 谈谈我对Vue钩子函数、生命周期的理解
- 浅谈Apache Shiro权限模块及数据库设计
- 企图变秃变强的第一天