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


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

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

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

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

  • HTTP 服务器负责处理 HTTP 请求(接收请求、返回请求结果)
  • Servlet 容器负责把 HTTP 请求分派给对应的 servlet 程序处理,并把结果返回给 HTTP 服务器

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

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

什么叫内嵌方式运行servlet容器呢?
你的程序比如SpringBoot直接调用Web容器的提供的API去创建一个Web容器(HTTP服务器和Servlet容器),同时你的程序注册一个Servlet到Servlet容器中,比如SpringMVC的DispatcherServlet,这样请求到达时,Servlet容器负责调用你的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应用程序开发。

我以SpringMVC框架为例,给你讲讲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等等,行业应用和框架更是可以百花齐放。

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

打赏
文章很值,打赏犒劳作者一下
相关推荐
<p> <span style="color:#333333;">本课程详细讲解了以下内容:<br />     1.jsp环境搭建及入门、虚拟路径和虚拟主机、JSP执行流程<br /><br />     2.使用Eclipse快速开发JSP、编码问题、JSP页面元素以及request对象、使用request对象实现注册示例<br /><br />     3.请求方式的编码问题、response、请求转发和重定向、cookie、session执行机制、session共享问题<br /><br />      4.session与cookie问题及application、cookie补充说明及四种范围对象作用域<br /><br />      5.JDBC原理及使用Statement访问数据库、使用JDBC切换数据库以及PreparedStatement的使用、Statement与PreparedStatement的区别<br /><br />      6.JDBC调用存储过程和存储函数、JDBC处理大文本CLOB及二进制BLOB类型数据<br /><br />      7.JSP访问数据库、JavaBean(封装数据和封装业务逻辑)<br /><br />      8.MVC模式与Servlet执行流程、Servlet25与Servlet30的使用、ServletAPI详解与源码分析<br /><br />      9.MVC案例、三层架构详解、乱码问题以及三层代码流程解析、完善Service和Dao、完善View、优化用户体验、优化三层(加入接口和DBUtil)<br /><br />     1 0.Web调试及bug修复、分页SQL(Oracle、MySQL、SQLSERVER)<br /><br />      11.分页业务逻辑层和数据访问层Service、Dao、分页表示层Jsp、Servlet<br /><br />      12.文件上传及注意问题、控制文件上传类型和大小、下载、各浏览器下载乱码问题<br /><br />      13.EL表达式语法、点操作符和中括号操作符、EL运算、隐式对象、JSTL基础及set、out、remove<br /><br />      14.过滤器、过滤器通配符、过滤器链、监听器<br /><br />      15.session绑定解绑、钝化活化<br /><br />      16.以及Ajax的各种应用<br /></span> </p> <p> <span style="color:#333333;"><br /></span> </p> <p> <span style="color:#333333;">     17. Idea环境下的Java Web开发</span> </p>
©️2020 CSDN 皮肤主题: 黑客帝国 设计师:白松林 返回首页

打赏

JavaEdge.

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值