一、前言
工作后一直使用springboot,但想想对框架的理解好像仅停留在了表面,内心有点不安。就把最近这段时间看的web应用/Servlet/Tomcat/Spring框架相关的知识点做一个简单的整理,尽量做到知其然也知其所以然,把一些知识点都能够串起来。部分内容摘抄自网络,详情见原址。
二、web应用
Web是万维网(WWW,World Wide Web)的俗称,它是一个体系结构框架。Web是由大量分布在全球范围的内容组成的,这些内容是以web页面的形式表示的。web页面又分为静态页面和动态页面。通常观看这些页面的程序成为浏览器。(两种网络应用程序开发体系结构:一种是基于客户端/服务器的C/S结构,另一种是基于浏览器/服务器的B/S结构)
应用 Java 技术开发 Web 应用系统需要掌握一系列相关技术,主要包括 HTML、XML、 JavaScript、JDBC、Servlet、JSP 等方面。在Sun的Java Servlet规范中,对Java Web应用作了这样定义:“Java Web应用由一组Servlet、HTML页、类、以及其它可以被绑定的资源构成,它可以在各种供应商提供的实现Servlet规范的 Servlet容器中运行。”Servlet容器为JavaWeb应用提供运行时环境,它负责管理Servlet和JSP的生命周期,以及管理它们的共享数据。Servlet容器也称为Java Web应用容器,或者Servlet/JSP容器。目前最流行的Servlet容器软件为:Tomcat、Weblogic......
Spring是一个支持快速开发Java EE应用程序的框架。它提供了一系列底层容器和基础设施,并可以和大量常用的开源框架无缝集成,可以说是开发Java EE应用程序的必备。(The Spring Framework is a lightweight solution and a potential one-stop-shop for building your enterprise-ready applications.)
【1】http://www.wsbookshow.com/uploads/bookfile/201606/9787517043836_1.pdf
【2】https://cloud.tencent.com/developer/article/1146655
【3】《计算机网络第5版》P499
【4】https://www.jianshu.com/p/7b6a070119c7
【5】https://www.liaoxuefeng.com/wiki/1252599548343744/1266263217140032
三、Servlet
早期的Web应用主要用于浏览新闻等静态页面,HTTP服务器(比如Apache、Nginx)向浏览器返回静态HTML,浏览器负责解析HTML,将结果呈现给用户。
随着互联网的发展,我们已经不满足于仅仅浏览静态页面,还希望通过一些交互操作,来获取动态结果,因此也就需要一些扩展机制能够让HTTP服务器调用服务端程序。
于是Sun公司推出了Servlet技术。你可以把Servlet简单理解为运行在服务端的Java小程序,但是Servlet没有main方法,不能独立运行,因此必须把它部署到Servlet容器中,由容器来实例化并调用Servlet。
而Tomcat和Jetty就是一个Servlet容器。为了方便使用,它们也具有HTTP服务器的功能,因此Tomcat或者Jetty就是一个“HTTP服务器 + Servlet容器”,我们也叫它们Web容器。
Servlet容器工作流程:当客户请求某一个资源时,Http服务器会用一个ServletRequest对象把客户的请求信息封装起来,然后调用Servlet容器的service方法,Servlet容器拿到请求后,根据请求的URL和Servlet的映射关系,找到相应的Servlet,如果Servlet还没有被加载,就用反射机制创建这个Servlet,并调用Servlet的init方法来完成初始化,接着调用Servlet的service方法来处理请求,把ServletResponse对象返回给Http服务器,Http服务器会把响应发送给客户端。
Servlet的历史与规范:https://blog.csdn.net/u010297957/article/details/51498018
Web容器(一):Web容器简介: https://blog.csdn.net/hzk1562110692/article/details/94295947
tomcat系列之二:Servlet规范:https://www.cnblogs.com/inspred/p/10949509.html
四、Tomcat
看完下面这四篇文章,就可以对Tomcat的架构有所了解了。
https://www.cnblogs.com/inspred/p/10951013.html
https://www.cnblogs.com/inspred/p/10974600.html
https://www.cnblogs.com/inspred/p/10978151.html
https://www.cnblogs.com/inspred/p/10979366.html
可以结合着源码来看看
五、Spring
https://www.jianshu.com/p/7b6a070119c7
- Spring能帮我们根据配置文件创建及组装对象之间的依赖关系。
- Spring面向切面编程能帮助我们无耦合的实现日志记录,性能统计,安全控制。
- Spring能非常简单的帮我们管理数据库事务。
- Spring还提供了与第三方数据访问框架(如Hibernate、JPA)无缝集成,而且自己也提供了一套JDBC访问模板,来方便数据库访问。
- Spring还提供与第三方Web(如Struts、JSF)框架无缝集成,而且自己也提供了一套Spring MVC框架,来方便web层搭建。
- Spring能方便的与Java EE(如Java Mail、任务调度)整合,与更多技术整合(比如缓存框架)。
Spring Framework差不多有20个模块组成,其中Core Container模块包含spring-beans、spring-core、spring-context、spring-expression。
Spring 框架就像一个家族,有众多衍生产品例如 boot、security、jpa等等。但他们的基础都是Spring 的IOC和AOP:IOC提供了依赖注入的容器,AOP解决了面向横切面的编程,然后在此两者的基础上实现了其他延伸产品的高级功能,更多详见原文链接:https://blog.csdn.net/twt936457991/article/details/90113830、https://blog.csdn.net/kingmax54212008/article/details/83184577
6、实操
1、“徒手”构建一个web应用,部署到Tomcat中并启动。参考:《轻量级Java EE企业应用实战》P74--P75
2、使用IDEA构建一个web应用(使用Spring MVC框架),配置Tomcat并启动。参考:https://www.cnblogs.com/mengd/p/13514758.html