答疑丨Java Web程序的运行时环境到底是怎样的?
李智慧
该思维导图由 AI 生成,仅供参考
今天是第一模块的最后一讲。在这一讲中,我们主要讲了软件的基础原理,今天,我将会针对这一模块中大家提出的普遍问题进行总结和答疑,让我们整理一下,再接着学习下一个模块的内容。
问题一
@小美
既然一个 JVM 是一个进程,JVM 上跑 Tomcat,Tomcat 上可以部署多个应用。这样的话,每个跑在 Tomcat 上的应用是一个线程吗?该怎么理解“如果一个应用 crash 了,其他应用也会 crash”?
理解程序运行时的执行环境,直观感受程序是如何运行的,对我们开发和维护软件很有意义。我们以小美同学提的这个场景为例,看下 Java Web 程序的运行时环境是什么样的,来重新梳理下进程、线程、应用、Web 容器、Java 虚拟机和操作系统之间的关系。
我们用 Java 开发 Web 应用,开发完成,编译打包以后得到的是一个 war 包,这个 war 包放入 Tomcat 的应用程序路径下,启动 Tomcat 就可以通过 HTTP 请求访问这个 Web 应用了。
在这个场景下,进程是哪个?线程有哪些?Web 程序的 war 包是如何启动的?HTTP 请求如何被处理?Tomcat 在这里扮演的是什么角色?JVM 又扮演什么角色?
首先,我们是通过执行 Tomcat 的 Shell 脚本启动 Tomcat 的,而在 Shell 脚本里,其实启动的是 Java 虚拟机,大概是这样一个 Shell 命令:
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
Java Web程序的运行时环境是一个复杂而精密的系统,涉及到进程、线程、应用、Web容器、Java虚拟机和操作系统之间的关系。本文通过解答读者提出的问题,深入浅出地解释了Java Web程序的运行机制。首先介绍了Tomcat启动时实际是启动了Java虚拟机进程,然后解释了主线程的执行过程以及Tomcat启动时创建的其他线程。接着,阐述了Web应用被加载到JVM中执行的过程,以及Tomcat根据HTTP请求URL执行应用中的代码的机制。此外,还解释了线程异常对其他线程执行的影响,以及JVM错误导致整个进程无法继续执行的情况。最后,提出了一个有趣的话题,即Tomcat是如何设计的,为读者留下了期待。通过这些内容,读者可以快速了解Java Web程序的运行时环境,对程序的执行过程有了更直观的感受,有助于开发和维护软件。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《后端技术面试 38 讲》,新⼈⾸单¥59
《后端技术面试 38 讲》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(19)
- 最新
- 精选
- InvisibleDes这个大佬太牛了
作者回复: 谢谢~
2023-06-28归属地:广东 - Citizen Z成就一个人的,是事业所带来的社会效益。 衡量一个人成就的是他所带来贡献,而非多么华丽惊艳的技术实现。 能力是实现成就的条件,不是终极目标。 技术只是重要工具,应该精进,不必狂热。 做技术的其实挺容易迷失在无尽地追逐技术牛逼的道路上,诚然能带来快乐,却很容易造成思维封闭。想在事业上更上一层楼,要把眼光放在更大的局面上,小到帮助同事朋友,大到给公司战略提供建议、给开源社区贡献力量,虽然各方面能力暂时不一定能匹配得上,但是大的目标能让人豁然开朗,提高学习动力和做事动机。 个人经验,程序员应该敢于务虚、吹理论、玩圈子。不该将自己约束到一个码农的标签里,追求字面意义上的“talke cheap show code”,更不该用“我学技术就是为了挣钱”这种消极思想来对待职业发展,应该回归到“一个会计算机技术的职场人”的角色中。 归根结底,职业发展目标应该建立在事业的成功和价值的创造上,如此,能力、影响力、金钱会很自然地在过程中积累。 价值第一,效率第二,名利第三,目标向善,正向循环。2019-12-042110
- 考休程序员很容易有一种错觉,觉得这个世界是由技术推动的,其实不是,这个世界一直以来都是由资本推动的,技术只是资本的一种体现而已,工作中目的不应该是实现技术的最高难度,而应该是业务的最大价值呈现2019-12-09232
- 技术是伙伴最主要的是要去做一流的事,解决现实中大多人的痛点或问题2020-03-199
- 未知“BAT 似乎成为当年的 IBM,历史好像进入了某种循环” 老师说的这句话感触很深。平时看公司比较核心的业务系统或者基础系统代码(新做的除外),代码一般都是很久以前的。这种现象应该都比较普遍,程序嘛,只要能满足目前的量并且没BUG,大家都没改重构的动力。但是如果从公司业务上来说,这种现象就比较危险:业务可以关系公司生死。大家都说乔布斯厉害,为什么厉害。感觉就是破、立。乔布斯二次回归时候,苹果已经从初创时候的高点落下来了,还差点卖身了。电脑不好卖加上金融危机,怎么办呢?但是他搞出了iPod。革了CD机的命,有搞出了Imac、iPhone。并且每个产品都标新立异。现在我们看,一个做电脑的公司做音乐播放器、做手机似乎正常。但是我们看看联想做手机、格力做手机、华为做手机。这些在发展初期都很困难,而且有的死了有的成功了。所以大公司转型或者插足新行业(那怕是同行业另一个领域),都比较谨慎,成不成完全未知,就像阿里云的初期一样。 一个产品能够做好,做大,流芳百世实属不易2019-12-165
- 李子木老师讲的真的很好,从第一节一直看下来我觉得对我这种想在IT领域深入学习的初学者解答了很多疑问,期待后面的更新!2019-12-145
- Geek_2b3614真是有感而发呀。2019-12-045
- escray我觉的关于 Java Web 程序运行时环境的讲解是非常精彩的,可能是我读书少,之前一直没有搞明白。这部分内容相对偏底层,平时写代码的时候不一定用得上,但是了解之后,还是会有茅塞顿开的感觉。 至于互联网大厂的技术栈,最近在看淘宝技术发展之类的文章,也感觉有点奇怪,BAT 大厂的架构大多在几年前就已经发展成熟;然后近些年虽然人工智能、大数据、区块链之类的技术热点不断涌现,但是似乎也没有什么特别颠覆性的发展。 互联网大厂最终会像传统 IT 企业那样凋零么? 老师提出应该好好想想未来,我真的想不出来。只是感觉,如果可能的话,教育、医疗等垂直领域应该还有机会,面向企业的软件服务或者是互联网化似乎也有很多事情可做。编程从本质上来说,其实是帮助人们提高效率。2020-10-182
- 不要挑战自己的智商选择比努力重要2021-11-111
- 俊伟目前技术给我的感觉是,很多都是在基于http协议上面进行开发。最近一直在想还有那些领域可以使用编程提高生产力。2019-12-041
收起评论