后端技术面试 38 讲
李智慧
同程艺龙交通首席架构师,前 Intel& 阿里架构师,《大型网站技术架构》作者
37373 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 46 讲
不定期加餐 (1讲)
后端技术面试 38 讲
15
15
1.0x
00:00/00:00
登录|注册

答疑丨Java Web程序的运行时环境到底是怎样的?

硬盘特性约束
未来准备
技术追求
商业模式创新
技术创新
商业能力
技术能力
JVM错误
线程异常
Servlet
war包
Web容器
线程
进程
软件架构师的考虑
职业规划
互联网大厂的发展
互联网公司发展历程
Tomcat设计
异常处理
HTTP请求处理
Web应用
Tomcat
JVM
Hash表的时间复杂度为什么是O(1)
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
立即购买
登录 后留言

全部留言(19)

  • 最新
  • 精选
  • InvisibleDes
    这个大佬太牛了

    作者回复: 谢谢~

    2023-06-28归属地:广东
  • Citizen Z
    成就一个人的,是事业所带来的社会效益。 衡量一个人成就的是他所带来贡献,而非多么华丽惊艳的技术实现。 能力是实现成就的条件,不是终极目标。 技术只是重要工具,应该精进,不必狂热。 做技术的其实挺容易迷失在无尽地追逐技术牛逼的道路上,诚然能带来快乐,却很容易造成思维封闭。想在事业上更上一层楼,要把眼光放在更大的局面上,小到帮助同事朋友,大到给公司战略提供建议、给开源社区贡献力量,虽然各方面能力暂时不一定能匹配得上,但是大的目标能让人豁然开朗,提高学习动力和做事动机。 个人经验,程序员应该敢于务虚、吹理论、玩圈子。不该将自己约束到一个码农的标签里,追求字面意义上的“talke cheap show code”,更不该用“我学技术就是为了挣钱”这种消极思想来对待职业发展,应该回归到“一个会计算机技术的职场人”的角色中。 归根结底,职业发展目标应该建立在事业的成功和价值的创造上,如此,能力、影响力、金钱会很自然地在过程中积累。 价值第一,效率第二,名利第三,目标向善,正向循环。
    2019-12-04
    2
    110
  • 考休
    程序员很容易有一种错觉,觉得这个世界是由技术推动的,其实不是,这个世界一直以来都是由资本推动的,技术只是资本的一种体现而已,工作中目的不应该是实现技术的最高难度,而应该是业务的最大价值呈现
    2019-12-09
    2
    32
  • 技术是伙伴
    最主要的是要去做一流的事,解决现实中大多人的痛点或问题
    2020-03-19
    9
  • 未知
    “BAT 似乎成为当年的 IBM,历史好像进入了某种循环” 老师说的这句话感触很深。平时看公司比较核心的业务系统或者基础系统代码(新做的除外),代码一般都是很久以前的。这种现象应该都比较普遍,程序嘛,只要能满足目前的量并且没BUG,大家都没改重构的动力。但是如果从公司业务上来说,这种现象就比较危险:业务可以关系公司生死。大家都说乔布斯厉害,为什么厉害。感觉就是破、立。乔布斯二次回归时候,苹果已经从初创时候的高点落下来了,还差点卖身了。电脑不好卖加上金融危机,怎么办呢?但是他搞出了iPod。革了CD机的命,有搞出了Imac、iPhone。并且每个产品都标新立异。现在我们看,一个做电脑的公司做音乐播放器、做手机似乎正常。但是我们看看联想做手机、格力做手机、华为做手机。这些在发展初期都很困难,而且有的死了有的成功了。所以大公司转型或者插足新行业(那怕是同行业另一个领域),都比较谨慎,成不成完全未知,就像阿里云的初期一样。 一个产品能够做好,做大,流芳百世实属不易
    2019-12-16
    5
  • 李子木
    老师讲的真的很好,从第一节一直看下来我觉得对我这种想在IT领域深入学习的初学者解答了很多疑问,期待后面的更新!
    2019-12-14
    5
  • Geek_2b3614
    真是有感而发呀。
    2019-12-04
    5
  • escray
    我觉的关于 Java Web 程序运行时环境的讲解是非常精彩的,可能是我读书少,之前一直没有搞明白。这部分内容相对偏底层,平时写代码的时候不一定用得上,但是了解之后,还是会有茅塞顿开的感觉。 至于互联网大厂的技术栈,最近在看淘宝技术发展之类的文章,也感觉有点奇怪,BAT 大厂的架构大多在几年前就已经发展成熟;然后近些年虽然人工智能、大数据、区块链之类的技术热点不断涌现,但是似乎也没有什么特别颠覆性的发展。 互联网大厂最终会像传统 IT 企业那样凋零么? 老师提出应该好好想想未来,我真的想不出来。只是感觉,如果可能的话,教育、医疗等垂直领域应该还有机会,面向企业的软件服务或者是互联网化似乎也有很多事情可做。编程从本质上来说,其实是帮助人们提高效率。
    2020-10-18
    2
  • 不要挑战自己的智商
    选择比努力重要
    2021-11-11
    1
  • 俊伟
    目前技术给我的感觉是,很多都是在基于http协议上面进行开发。最近一直在想还有那些领域可以使用编程提高生产力。
    2019-12-04
    1
收起评论
显示
设置
留言
19
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部