简单总结Tomcat/SpringMVC/Spring/SpringBoot的关系

Tomcat是一个Web应用服务器,可以作为Servlet容器。它的作用是,解析客户端client发起的request,并组装出HttpRequest、创建HttpResponse,将二者交于内部的HttpServlet处理和填充,如图所示

(图源见参考文档1)

Tomcat映射处理请求的Servlet是通过web.xml做的。

SpringMVC使用一个DispatcherServlet来接收所有的请求,并把它们分发到不同的controller中来做进一步处理。

SpringMVC = Spring + Web框架,Spring这部分主要是AOP/IOC容器。

SpringBoot是Spring的扩展,简化了Spring的配置,通过starter的方式简化了常用组件依赖的引入,使其更加易用。

SpringBoot内置了tomcat。

关于Servlet,由于直接接触的少,请教了一下kimi:

  • Servlet是什么?

Servlet是Java EE规范的一部分,用于生成动态响应。它是运行在服务器端的Java程序,可以处理客户端的HTTP请求并生成响应。Servlet提供了一种将Java代码与HTTP协议交互的方式,使得Java开发者可以创建动态网站和Web应用程序。

  • Servlet的生命周期是什么?

Servlet的生命周期包括以下几个阶段:
加载(Loading):Servlet容器加载Servlet类。
实例化(Instantiation):Servlet容器为Servlet创建一个实例。
初始化(Initialization):调用init()方法进行初始化,可以接收一个ServletConfig对象。
服务(Service):调用service()方法来处理客户端请求,根据请求类型(GET、POST等)调用相应的doGet()或doPost()等方法。
销毁(Destruction):调用destroy()方法,清理资源,然后实例被销毁。
卸载(Unloading):Servlet实例被垃圾回收器回收。

  • Servlet和CGI脚本有什么区别?

Servlet和CGI都是服务器端技术,用于生成动态响应。主要区别包括:
Servlet是Java-based,而CGI可以是任何语言编写的脚本。
Servlet是可重用的组件,CGI脚本通常为每个请求创建和销毁。
Servlet运行在Servlet容器中,可以利用容器提供的多线程和生命周期管理功能。
Servlet具有平台无关性,而CGI脚本可能依赖于特定的操作系统。

  • 什么是Servlet容器?

Servlet容器是一个服务器端软件,负责管理Servlet的生命周期,处理HTTP请求,并生成响应。常见的Servlet容器包括Apache Tomcat、Jetty和WildFly。

  • 如何创建一个Servlet?

创建Servlet的步骤:
编写一个继承自HttpServlet的类,并实现doGet()或doPost()等方法。
在类中实现业务逻辑,处理请求并生成响应。
在web应用的web.xml配置文件中声明Servlet,并映射URL模式。
编译Servlet类,并将其部署到Servlet容器中。

  • Servlet的多线程模型是如何工作的?

Servlet容器是多线程的,可以同时处理多个请求。Servlet容器为每个请求创建一个线程,并调用Servlet的service()方法。Servlet必须设计为线程安全的,以避免多线程环境下的数据竞争和同步问题。

  • 什么是Servlet的service()方法?

service()方法是Servlet的核心,它根据请求的HTTP方法(如GET、POST)调用相应的doGet()或doPost()方法。service()方法负责将请求和响应对象传递给这些处理方法。

  • 什么是Servlet的事件监听器?

Servlet的事件监听器用于监听和响应Servlet生命周期中的事件。例如,ServletContextListener可以监听ServletContext的创建和销毁事件。

  • 如何配置和部署Servlet?

Servlet通过web.xml配置文件进行配置,包括Servlet的类名、初始化参数和URL映射。部署Servlet时,需要将编译好的Servlet类打包成WAR文件,并将其放置在Servlet容器的部署目录中。

  • Servlet与JavaServer Faces (JSF)的关系是什么?

JSF是一个用于构建用户界面的Java EE规范,而Servlet是JSF实现的一部分。JSF的生命周期和事件处理在底层通过Servlet来实现。Servlet处理HTTP请求,并将请求转发给JSF组件,JSF组件生成响应后再由Servlet发送给客户端。

参考文档:
SpringMVC、Tomcat怎样完成一次Http请求的?
Spring与SpringMVC的区别
SpringBoot:简述SpringBoot和Spring的区别
SpringBoot内置tomcat启动原理

posted @ 2020-05-27 02:37  五岳  阅读(6005)  评论(0编辑  收藏  举报
回到顶部