肝了一个通宵!给学弟学妹们看的JavaWeb架构师学习路线

Posted JavaEdge.

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了肝了一个通宵!给学弟学妹们看的JavaWeb架构师学习路线相关的知识,希望对你有一定的参考价值。


早期Web应用主要用于浏览新闻等静态页面,HTTP服务器(比如Apache、nginx)向浏览器返回静态html,浏览器负责解析HTML,将结果呈现给用户。

随着互联网的发展,已不满足于仅浏览静态页面,还希望通过一些交互获取动态的结果,因此也就需要机制能让HTTP服务器调用服务端程序。

于是Sun公司发布Servlet,相当于运行在服务端的Java小程序,但Servlet无main方法,无法独立运行,因此必须把它部署到Servlet容器,由容器来实例化并调用Servlet。

而Tomcat和Jetty就是一个Servlet容器。为了方便使用,它们也具有HTTP服务器的功能,因此Tomcat或Jetty就是一个“HTTP服务器 + Servlet容器”,也叫Web容器。

其他应用服务器比如JBoss和WebLogic,它们不仅仅有Servlet容器的功能,也包含EJB容器,是完整的Java EE应用服务器。从这个角度看,Tomcat和Jetty算是一个轻量级应用服务器。

微服务时代的我们更喜欢稳定、轻量级的应用服务器,最流行的就是SpringBoot应用程序用内嵌方式运行Servlet容器。

  • 轻量级,是因为在微服务下,把一个大而全的单体应用,拆分成一个个功能单一的微服务,在这个过程中,服务数量大大增加,但为减少资源消耗,并且降低部署成本,我们希望运行服务的Web容器也是轻量级,Web容器本身应消耗较少的内存和CPU资源,并且由应用本身启动一个嵌入式的Web容器,而不是通过Web容器来部署和启动应用,这样可以降低应用部署的复杂度。

因此轻量级的Tomcat和Jetty就是一个很好的选择,并且Tomcat它本身也是Spring Boot默认的嵌入式Servlet容器。最新版本Tomcat和Jetty都支持Servlet 4.0规范。

该怎么学?

操作系统基础

像Java这种高级语言,其实都是对操作系统API的封装,上层应用包括Web容器都是通过操作系统来工作的,因此掌握相关的操作系统原理是我们深刻理解Web容器的基础。

对于Web容器来说,操作系统方面你应该掌握它的工作原理,比如

  • 什么是进程
  • 什么是内核
  • 什么是内核空间和用户空间
  • 进程间通信的方式
  • 进程和线程的区别
  • 线程同步的方式
  • 什么是虚拟内存
  • 内存分配的过程
  • 什么是I/O、什么是I/O模型、阻塞与非阻塞的区别、同步与异步的区别
  • 网络通信的原理
  • OSI七层网络模型以及TCP/IP、UDP和HTTP协议。

推荐阅读名著《UNIX环境高级编程》。

Java语法、JVM基础

推荐的经典书籍有

  • 《Java核心技术》
  • 《Java编程思想》
  • 《Java并发编程实战》
  • 《深入理解Java虚拟机 第三版》

Java Web开发基础

学习一些通用的设计原则和设计模式。了解Web的工作原理,同时提高你的设计能力,注重代码的质量。我的建议是可以从学习Servlet和Servlet容器开始。
Web框架的本质是,开发者在使用某种语言编写Web应用时,总结出的一些经验和设计思路。很多Web框架都是从实际的Web项目抽取出来的,其目的是用于简化Web应用程序开发。

我以Spring框架为例,给你讲讲Web框架是怎么产生的。Web应用程序的开发主要是完成两方面的工作。

  • 设计并实现类,包括定义类与类之间的关系,以及实现类的方法,方法对数据的操作就是具体的业务逻辑
  • 类设计好之后,需要创建这些类的实例并根据类与类的关系把它们组装在一起,这样类的实例才能一起协作完成业务功能

就好比制造一辆汽车,汽车是由零件组装而成的。第一步是画出各种零件的图纸,以及定义零件之间的接口。第二步把把图纸交给工厂去生产零件并组装在一起。因此对于Web应用开发来说,第一步工作是具体业务逻辑的实现,每个应用都不一样。而第二步工作,相对来说比较通用和标准化,工厂拿到零件的图纸,就知道怎么生产零件并按照零件之间的接口把它们组装起来,因此这个工作就被抽取出来交给Spring框架来做。

Spring又是用容器来完成这个工作的的,容器负责创建、组装和销毁这些类的实例,而应用只需要通过配置文件或者注解来告诉Spring类与类之间的关系。

我们把Spring的IOC容器理解为一个工厂,这个工厂负责创建组装你的Bean。
但是我们怎么向IOC容器中放入Bean呢?可能通过配置文件或者注解或者其他方式,于是容器除了做创建、组装Bean的工作,还需要去做解析配置文件或者注解的工作,于是把容器换个说法,叫应用上下文

但是容器的概念不是Spring发明的,最开始来源于Servlet容器,并且Servlet容器也是通过配置文件来加载Servlet的。你会发现它们的“元神”是相似的,在Web应用的开发中,有一些本质的东西是不变的,而很多“元神”就藏在“老祖宗”那里,藏在Servlet容器的设计里。

Spring框架就是对Servlet的封装,Spring应用本身就是一个Servlet,而Servlet容器是管理和运行Servlet的,因此我们需要先理解Servlet和Servlet容器是怎样工作的。

总结

当前web技术涉及的知识包括这样几层,
第一层:核心规范相当于宪法,主要包括servlet规范、网络协议等;
第二层:主流技术支撑相当于各类法律,包括java语言、各类中间件等;
第三层:基于各行业的业务应用和框架,相当于行政法规地方法规。
规范是基础,具体实现可以用java也可以用python等等,行业应用和框架更是可以百花齐放。

我们的学习一定是从具体技术入手,从规范和体系结构统筹安排,最后再落实到实现。是一个自底向上再由上向下的一个过程,也是一个由薄到厚再由厚到薄的过程。

以上是关于肝了一个通宵!给学弟学妹们看的JavaWeb架构师学习路线的主要内容,如果未能解决你的问题,请参考以下文章

给学弟学妹肝的一篇Java学习路线,保证学弟学妹们大三大四的时候顺利找到实习 Offer

如何成为一名合格的架构师呢?我连夜肝了这份架构师必备核心技能

祝高考学子逢考必过,学长不才整理了一份Java开发学习路线以及规划送给即将踏入程序员领域的学弟学妹们

花了好几百大洋买的Python资料,免费分享给学弟学妹们全站最新

呕心沥血整理了~这100款告白源码❤学妹们看呆了~(520/七夕/告白/求婚/脱单)

Java 实习生(月薪 3k-5k 水平)应具备哪些知识能力?给学弟学妹们支招