为啥要重学Tomcat?| 博学谷狂野架构师
Tomcat基本使用
什么是Web服务器
web服务器的定义
其实并没有标准定义,一般认为Web服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,可以向浏览器等Web客户端提供文档,也可以放置网站文件,让全世界浏览;可以放置数据文件,让全世界下载。
Web服务器的特点
- 服务器是一种被动程序:只有当Internet上运行其他计算机中的浏览器发出的请求时,服务器才会响应。
- 服务器一般使用HTTP(超文本传输协议)与客户机浏览器进行信息交流,这就是人们常把它们称为HTTP服务器的原因。
- Web服务器不仅能够存储信息,还能在用户通过Web浏览器提供的信息的基础上运行脚本和程序
什么是Tomcat
Tomcat是由Apache软件基金会属下Jakarta项目开发的Servlet容器,是开发和调试JSP程序的首选,实现了对Servlet和JavaServer Page的支持,并提供Web服务器的一些特有功能。
Tomcat是一款开源轻量级Web应用服务器,是一款优秀的Servlet容器实现。
Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。
Servlet严格来讲是指Java语言实现的一个接口,一般情况下我们说的Servlet是指任何实现了这个Servlet接口的类。
- 实例化并调用init()方法初始化该 Servlet,一般 Servlet 只初始化一次(只有一个对象)
- service()(根据请求方法不同调用doGet() 或者 doPost(),此外还有doHead()、doPut()、doTrace()、doDelete()、doOptions()、destroy())。
- 当 Server 不再需要 Servlet 时(一般当 Server 关闭时),Server 调用 Servlet 的 destroy() 方法。
简单总结下,tomcat是一个中间件,在B/S架构中,浏览器发出的http请求经过tpmcat中间件,转发到最终的目的服务器上,响应消息再通过tomcat返回给浏览器。
tomcat所做的事情主要有:开启监听端口监听用户的请求,解析用户发来的http请求然后访问到你指定的应用系统,然后你返回的页面经过tomcat返回给用户。
Apache,Nginx和Tomcat的区别
- Apache全称是 Apache Http Server Project, Tomcat全称是 Apache Tomcat。
- Apache和 Nginx用于处理静态资源, tomcat用来处理动态资源。
- Apache和Nginx相比,Nginx适合做前端服务器,适合做负载均衡。
一般情况下,使用的时候,都是 Apache+Tomcat一起使用或者 Nginx+tomcat一起使用。
典型的Servlet的处理流程
- 第一个到达服务器的HTTP请求被委派到Servlet容器。
- Servlet容器在调用service()方法之前加载Servlet。
- 然后Servlet容器处理由多个线程产生的多个请求,每个线程执行一个单一的Servlet实例的service()方法。
Tomcat版本介绍
Tomcat版本 | 6 | 7 | 8 | 8.5 | 9 |
---|---|---|---|---|---|
JDK | ≥5.0 | ≥6.0 | ≥7.0 | ≥7.0 | ≥8.0 |
Servlet | 2.5 | 3 | 3.1 | 3.1 | 4 |
JSP | 2.1 | 2.2 | 2.3 | 2.3 | 2.3 |
EL | 2.1 | 2.2 | 3 | 3 | 3 |
WebScoket | N/A | 1.1 | 1.1 | 1.1 | 1.1 |
Servlet规范
Servlet 2.X
项目目录结构必须要有WEB-INF,web.xml等文件夹和文件,在web.xml中配置servlet,filter,listener,以web.xml为java web项目的统一入口。
Servlet 3.x
项目中可以不需要WEB-INF,web.xml等文件夹和文件,在没有web.xml文件的情况下,通过注解实现servlet,filter,listener的声明,当使用注解时,容器自动进行扫描。
8.5版本特点
Tomcat8.5进行了大量的代码重构,对比与7.0的版本,也符合Tomcat未来的代码架构体系。但是Tomcat的核心和主体架构还是一直保持这样的。
- 支持Servlet3.1
- 默认采用NIO,移除BIO
- 支持NIO2(AIO)
- 支持HTTP/2协议
- 默认采用异步日志处理
为什么要使用8.5的版本,首先这个版本比较新,因为太老的版本比如6.0的版本Servlet不支持3所以会导致部署SpringBoot等项目有问题,同时这个版本是在9.0出现以后发布的一个中间版本,主体架构延续8.0,同时又实现了部分9.0的新特性。
Tomcat启动
Tomcat 下载
Tomcat下载地址:https://tomcat.apache.org/download-80.cgi
一般启动
startup.bat 启动 Tomcat
- 通常下载解压版即可,解压后可以直接使用,安装版使用不灵活。
- 直接到 %Tomcat_HOME%/bin 目录下面运行 startup.bat ( linux 中是 startup.sh )文件即可开启 Tomcat,默认端口 8080,浏览器输入 localhost:8080 即可访问。
- 这样做的好处是能直接从窗口中实时的看到项目中所有输出的内容,以及抛出的异常与错误等,适合于调试阶段
- Windws 系统中可以将 startup.bat 创建快捷方式,然后放到启动文件夹中,这样就会开机自起。
启动日志如下
启动成功可以访问到的Tomcat首页 http://localhost:8080/
为什么有这个默认首页:Tomcat“买一送一”的思想。默认Tomcat启动后加载webapps中的项目
IDEA中启动
IDEA中配置Tomcat
- 点击Run—EDit Configurations…
- 点击左侧“+”号,找到Tomcat Server—Local
若是没有找到Tomcat Server 可以点击最后一行 34 items more
- 在Tomcat Server -> Unnamed -> Server -> Application server项目下,点击 Configuration ,找到本地 Tomcat 服务器,再点击 OK按钮。
IDEA发布项目
- 点击Deployment选项卡配置需要发布的服务
- 选择需要发布的war
- 然后点击ok就可以了
- 运行项目
- 然后就可以通过浏览器访问页面了
嵌入式启动
SpringBoot中一个main方法嵌入式启动Tomcat
COPY@SpringBootApplication @Import(MybatisConfig.class) public class AdminApplication { //相当于启动了Tomcat的8080端口 public static void main(String[] args) { SpringApplication.run(AdminApplication.class, args); } }
Tomcat关闭
第一种:Ctrl+C键 关闭Tomcat服务器 第二种:点击Tomcat窗口的右上角关闭按钮 (暴力停止服务器) 第三种:找到tomcat目录/bin/shutdown.bat文件,双击执行关闭Tomcat。
Tomcat项目部署
隐式部署
直接丢文件夹、war、jar到webapps目录,tomcat会根据文件夹名称自动生成虚拟路径,简单,但是需要重启Tomcat服务器,包括要修改端口和访问路径的也需要重启。
显式部署
添加context元素
在Tomcat的conf目录下的server.xml中的Host加入一个Context(指定路径和文件地址)
COPY<Context path="/test" docBase="D:/work/spring_mvc_test.war" />
即/test这个虚拟路径映射到了D:/work/spring_mvc_test目录下(war会解压成文件),修改完servler.xml需要重启tomcat 服务器。
创建xml文件
在Tomcat的conf/Catalina/localhost中创建xml文件,访问路径为文件名
在localhost目录下新建demo.xml
COPY<Context docBase="D:/work/spring_mvc_test" />
不需要写path,虚拟目录就是文件名demo,path默认为/demo,添加demo.xml不需要重启 tomcat服务器。
三种方式比较
- 隐式部署:可以很快部署,需要人手动移动Web应用到webapps下,在实际操作中不是很人性化
- 添加context元素 : 配置速度快,需要配置两个路径,如果path为空字符串,则为缺省配置,每次修改server.xml文件后都要重新启动Tomcat服务器,重新部署.
- 创建xml文件:服务器后台会自动部署,修改一次后台部署一次,不用重复启动Tomcat服务器,该方式显得更为智能化。
本文由
传智教育博学谷狂野架构师
教研团队发布。如果本文对您有帮助,欢迎
关注
和点赞
;如果您有任何建议也可留言评论
或私信
,您的支持是我坚持创作的动力。转载请注明出处!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
用图技术搞定附近好友、时空交集等 7 个典型社交网络应用
两个月之前,我的同事拿了一张推特的互动关系图(下图,由 STRRL 授权)来问我能不能搞一篇图技术来探索社交互动关系的文章,看看这些图是如何通过技术实现的。 我想了想,自己玩推特以来也跟随大部队生成了不少的社交关系组图,当中有复杂的社交群体划分: 我在技术圈,看在金融、数学圈的大佬在彼岸紧密贴贴。当然也有比较简单的关系图: 看谁和你互动比较多,而他们又和谁关系比较密切。那么问题来了,像上面这种常见的社交关系图,甚至是别的更复杂的基于社交网络的图是如何生成的呢?在本文我将用图数据库 NebulaGraph 来解决社交网络问题,而上面的社交关系组图也被包含在其中。btw,文中介绍的方法提供都了 Playground 供大家学习、玩耍。 简单剖析社交网络的选型 从上面的图我们可以知道,一个典型的社交网络拓扑图便是用户的点和关系的边组成的网状结构。 因此,我们可以用图数据库来表示用户和他们的连接关系,来完成这个社交网络的数据模型。基于图数据库,我们可以对用户间的关系进行查询,让各类基于社交网络连接关系的查找、统计、分析需求变得更便捷、高效。 例如,利用图形数据库来识别网络中的“有影响力的用户”...
- 下一篇
TCP 三次握手,给我长脸了噢
大家好,我是小富~ 前言 之前有个小伙伴在技术交流群里咨询过一个问题,我当时还给提供了点排查思路,是个典型的八股文转实战分析的案例,我觉得挺有意思,趁着中午休息简单整理出来和大家分享下,有不严谨的地方欢迎大家指出。 问题分析 我们先来看看他的问题,下边是他在群里对这个问题的描述,我大致的总结了一下。 他们有很多的 IOT 设备与服务端建立连接,当增加设备并发请求变多,TCP连接数在接近1024个时,可用TCP连接数会降到200左右并且无法建立新连接,而且分析应用服务的GC和内存情况均未发现异常。 从他的描述中我提取了几个关键值,1024、200、无法建立新连接。 看到这几个数值,直觉告诉我大概率是TCP请求溢出了,我给的建议是先直接调大全连接队列和半连接队列的阀值试一下效果。 那为什么我会给出这个建议? 半连接队列和全连接队列又是个啥玩意? 弄明白这些回顾下TCP的三次握手流程,一切就迎刃而解了~ 回顾TCP TCP三次握手,熟悉吧,面试八股里经常全文背诵的题目。 话不多说先上一张图,看明白TCP连接的整个过程。 第一步:客户端发起SYN_SEND连接请求,服务端收到客户端发起的SYN...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2全家桶,快速入门学习开发网站教程
- MySQL8.0.19开启GTID主从同步CentOS8
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS6,7,8上安装Nginx,支持https2.0的开启