关于tomcat的认知升级

简述文章思路:

几年工作经验后对tomcat的简短印象 → 静下心来总结后,提出新疑问 → 自我学习后的再认知

已有认识:

一句话:开源的,基于java语言开发的,部署web项目的容器;

假设:tomcat部署目录=tomcat_home=E:\tools\worktools\apache-tomcat-8.0.3;

通常一个web项目的部署包(如打好的war包),部署在tomcat_home/webapps目录,然后编辑tomcat_home/conf/server.xml文件,在<host></host>标签区间内增加context标识(<Context docBase="testProj" path="/testProj"/>),然后启动startup.bat脚本,项目部署完毕。

疑问:

  • 我们跑一个项目,最少需要哪些支持?
  • tomcat解决了上面问题中的哪些?
  • tomcat相对同类软件的优缺点是啥?

先思考→翻阅资料→带着问题学习:(仅列出部分)

tomcat背景和安装:https://www.cnblogs.com/f-ck-need-u/p/7717488.html

web容器的作用:https://www.jianshu.com/p/99f34a91aefe

http协议的介绍:https://www.cnblogs.com/ranyonsue/p/5984001.html

网络七层协议的介绍:https://baike.baidu.com/item/%E7%BD%91%E7%BB%9C%E4%B8%83%E5%B1%82%E5%8D%8F%E8%AE%AE/6056879

Tomcat: http://tomcat.apache.org/

JCP: https://jcp.org/en/introduction/overview

再认识:

我们跑一个项目,最少需要哪些支持(你觉得至少得干点啥)?

1.项目代码需要被编译成机器码,然后按照计算机的相应机制,启动一个进程程序,进而驱动起来这个代码。--->跑起来

这部分工作与项目代码无关,属于基础工作。

编译成机器码,一般有相应的编程语言提供的编译器给做了,编译后,一般会按照运行环境要求,打包成相应的格式,比如Java程序打包成可执行jar, windows可以打包成.exe文件等。

2.网络上(或者局域网)的请求,可以找到我的服务。---》对外提供服务

这部分工作与项目代码无关,属于基础工作。

这部分,属于网络处理。就类似于你日常购买一个商品一样的通信机制,这部分后面再说(域名解析、请求路由、端口路由等,根据部署的架构不同,套路略微不同,最后会到提供服务的机器根据请求端口找到对应的进程程序)。

3.我的项目得有一个总的入口可以把用户的请求,路由/转发到我代码编写的逻辑(错误处理、登录、业务处理等)。---》按照预期实现业务代码逻辑

这部分工作与项目代码有关。

也就是请求进来后,可以根据预设的规则,什么样的业务找什么样的处理器去处理。

tomcat解决了上面问题中的哪些?

按照前面这个思路,基本上一个程序就跑起来了,那基本上没tomcat啥事。

那tomcat到底有啥用?!

从定义看:tomcat是JCP定义的 Java Servlet、JavaServer Pages、 Java Expression Language 、 Java WebSocket 规范的开源实现。我们可以看出,它实现了一通的规范,然而跟我们项目有啥关系呢?(实现了规范能干啥?为什么需要实现规范才能跟我们的项目挂钩呢?)

从日常我们生活的方式:手机购物、电脑看网页,我们知道其实他们都是发起了http请求到服务端(类比我们的项目)。假如我们的项目就是纯java语言实现,基于socket实现通信,从HTTP协议到TCP/IP协议需要转换,需要了解HTTP协议的详细内容(请求头、体、请求的更多信息等),然后按照tcp、ip的方式取出真正的业务数据,才可以处理业务。有没有发现,我们还基于socket通信的方式已经落伍了(这里只是针对web端的网络请求,底层自定义协议的另说)。其实,我们目前的web服务实现方式一般都是遵循标准的servlet-api,定义好我们的接口实现,然后等待请求进来即可。与此同时需要一个遵循servlet-api的服务处理者,把客户端的请求转发到我们的服务(客户端的请求体映射成servlet-api的对象)。 其实Tomcat、Jetty就是做这个事情(Java Servlet容器,其他场景例子大同小异)。

我们为什么要遵循这个规范:这个规范是JCP定制的,它是负责保证Java技术的标准规范制定、稳定性、跨平台性等等的一个组织。所以追到这里,基本到头了。所以说,你可以不遵循servlet-api规范,你去自己解析网络协议,没问题。如果我们遵循,能事半功倍,多好呢?(想造轮子的另说)

tomcat相对同类软件的优缺点是啥?

个人理解,tomcat的架构还是比较不错的,封装的比较好,需要我们处理的仅仅是部署自己的war包,简短的配置即可(代码还没研读过)。特别是关于lib的处理,共享的lib、独享的lib、tomcat专用的lib。所谓缺点的话,在处理静态项目方面比一些其他容器没有优势(nginx、apache等),当然它的重点也不在这里,它是为了动态服务出现的容器。从通用性上来讲,tomcat作为web服务器还是比较广的。nginx,apache偏静态服务器,同事nginx可以实现网关类需求(比如反向代理多个后端服务等)

自己的见解:

这里仅仅是思考为什么要有个‘web容器’这个东西;如果没有,怎么玩;它在什么背景下催生;解决了什么问题;还有什么缺点;

更多可思考的东西:

  1. 它的设计是否有可借鉴的东西?比如前面提到的lib隔离,应该是可以学习下tomcat在这块,针对类加载器(双亲委派模型)的灵活使用。
  2. java开源的项目,是不是可以通读源码,学习点什么?
  3. 是不是可以尝试造个轮子,然后再去对比tomcat的实现,提升自己在设计方面的能力?

【总结-学习-提升】web应用为什么需要tomcat容器相关推荐

  1. JavaWeb学习之BS/CS架构及tomcat容器项目部署

    BS与CS模式: CS模式:客户端服务器架构模式 优点:充分利用客户端机器的资源,减轻服务器的负荷(一部分安全要求不高的计算任务.存储任务放在客户端执行,不需要把所有计算.存储任务都放在服务器端执行, ...

  2. 基于Docker里的运行的tomcat容器进行部署Java Web项目详解

    引言:在centos-7环境装了docker后,通过docker创建一个tomcat容器,想部署Java web项目,结果就是找不到tomcat 容器的的webapps目录,导致部署不了项目,不过后来 ...

  3. Web学习历程记录(七)——Tomcat

    Web学习历程记录--Tomcat Web 静态Web资源 指Web页面中供人们浏览的数据始终是不变的 动态Web资源 指web页面中供人们浏览的数据是由程序产生的,不同时间点访问web页面看到的内容 ...

  4. sts java配置tomcat_Java Web入门学习(一) STS与Tomcat配置

    Java Web学习(一) STS与Tomcat配置 一.IDE的选择 使用基于Eclipse的STS Ide ,个人感觉挺好用的. 根据以上两张图片,将STS 下载下来.然后解压缩. 用编辑器打开S ...

  5. JavaWeb学习笔记(软件系统体系结构、Tomcat、Web应用、HTTP协议)

    JavaWeb学习笔记 JavaWeb学习笔记 软件系统体系结构 常见软件系统体系结构C/S.B/S Web资源 Web服务器 Tomcat Tomcat概述 安装.启动.配置Tomcat Web应用 ...

  6. Nginx学习总结(15)—— 提升 Web 应用性能的十个步骤

    前言 提升Web应用的性能从未像今天这样刻不容缓.在线经济活动的比例日益提高,就连发展中国家和地区的经济活动都已经有5%以上在线进行了(相关数据请参考本文后面的资源).在这个超级链接.随时在线的现代世 ...

  7. 追新求快的时代,别让 Java Web 开发必备工具 Tomcat 变成“熟悉的陌生人”!

    作者 | 码哥字节 来源 | MageByte技术团队 Tomcat 发展这么多年,已经比较成熟稳定.在如今『追新求快』的时代,Tomcat 作为 Java Web 开发必备的工具似乎变成了『熟悉的陌 ...

  8. 学习(Java Web)编程技术要点及方向; 完成项目的要决

    本文亮点: 传统学习编程技术落后,应跟著潮流,要对业务聚焦处理. 要Jar, 不要War:以小为主,以简为宝,集堆而成. 去繁取简 Spring Boot,明日之春. 集堆综合技术如 jHipster ...

  9. java web 图灵_java架构师学习路线-Web架构的理解

    图灵学院  java架构师学习路线-Web架构的理解 Web体系结构可以理解为具有三种,一种是仅JSP页面,即所有逻辑,业务处理和页面代码都在JSP上.在执行简单而无关紧要的程序时可以使用此方法.它速 ...

最新文章

  1. html视频海报代码,如何在网站头部添加视频海报?添加视频海报的方法(代码示例)...
  2. 导出Excle java
  3. P5540-[BalkanOI2011]timeismoney|最小乘积生成树【最小生成树,凸壳】
  4. 科目三考试里面的会车,调头,靠边停车通过标准
  5. arcgis出界址点成果表_界址点成果表打印
  6. 【Unity开源项目精选】ML-Agents:给你的游戏加入AI
  7. Flask 区域块简单原理实现
  8. 解决From 192.168.1.10: icmp_seq=1 Redirect Network(New nexthop: 192.168.1.1)问题
  9. Ext中Date format含义
  10. 电气技术应用和计算机应用,电气技术应用专业介绍 ppt课件.ppt
  11. 用牛顿迭代法求方程2x^3-4x^2+3x-6=0在1.5附近的解,要求误差小于1e-5
  12. SQL 编写能力提升-01 基础强化(Mysql)
  13. 基于FPGA的2FSK调制解调器
  14. 使用 Learner Lab - 使用 API Gateway 与 Lambda 上传图片到 S3
  15. SQL中DDL、DML、DQL、DCL、TCL是什么意思
  16. CSS实现长宽比的几种方案,CSS如何实现长宽比?
  17. N32926 24小时连续测试720p, h.264 IPCAM功能,为什么基本不发热呢?
  18. A. Binary Decimal acii码 字符 数字的转换 vector容器 sort 排序
  19. 4、数据库服务的启动与登录
  20. ARC101E - Ribbons on Tree 树形DP

热门文章

  1. U盘有占用空间,但无文件或者都变成了快捷方式
  2. c语言中怎么使用float,float在c语言中怎么用
  3. 小心肝队-冲刺日志(第三天)
  4. 学ui需要了解html,学UI设计需要掌握文案知识吗
  5. 字节员工收黑钱、操控抖音热榜,判刑了!
  6. 面向数据结构的分析设计方法(JSD)
  7. 加密解密技术基础及用OpenSSL创建私有CA
  8. Unity API——1
  9. 阅读笔记(Every Document Owns Its Structure: Inductive Text Classification via Graph Neural Networks)
  10. 5G手机今日“下凡”,价格大战暗流涌动