概要
请求由谁接收?又是怎么访问到url应接口的呢?这就涉及到两个基础知识点“web容器”“servlet”,我和大家一起浅浅的复习一下吧
浅显的大致关系
-
请求先到web容器(Tomcat、JBoss、Udertown)
-
创建个servlet(MVC架构模式、DispatcherServlet),根据url找到对应接口
括号中的是帮助理解它们所涉及到的应用点
一、容器
-
容器提供了一种便捷的方式,让 servlet 与 web 服务器进行通信。如果没有容器,开发人员就需要自己创建 serverSocket 去监听端口、创建流等一系列复杂的操作。有了容器,servlet 可以直接跟容器中的环境变量接口交互,不必关注其他系统问题,从而能够专注于业务逻辑的实现。例如,在 Tomcat 中,servlet 只需引用环境变量 session、request、response 等,就可以处理 HTTP 请求,而无需关心底层的通信细节。
-
容器会自动为每一个 servlet 请求创建一个 Java 线程。当请求到达时,容器会从线程池中分配一个线程来处理请求。当 servlet 运行完 Http 相应的服务方法后,这个线程就可以被回收。
二、Servlet
-
定义:Servlet(服务器端Java应用程序)是Java Web应用程序的主要组件之一。它是一个基于Java技术的Web组件,运行在服务器端,用于生成动态的内容。
-
工作原理:Servlet的工作原理是接收客户端的请求,进行处理,并生成响应返回给客户端。具体过程如下:
- 客户端通过浏览器发送请求到Web服务器。
- Web服务器接收到请求后,将请求交给Servlet容器。
- Servlet容器根据请求的URI来确定应该由哪一个Servlet来处理请求。
- 如果该Servlet尚未被加载,容器会将其加载到内存中,并创建一个Servlet实例。
- 容器调用Servlet的初始化方法
init()来初始化Servlet实例。 - 容器调用Servlet的
service()方法来处理请求,并将请求和响应对象传递给该方法。 - Servlet实例根据请求对象进行相应的业务逻辑处理,并将处理结果存储到响应对象中。
- 容器将处理结果返回给Web服务器。
- Web服务器将响应返回给客户端。
三、Web容器与Servlet的关系
- 包含关系:Web容器包含了Servlet容器。Servlet容器是Web服务器或应用程序服务器的一部分,用于在发送的请求和响应之上提供网络服务。
- 协同工作:Web容器和Servlet协同工作,共同处理客户端的请求。Web容器负责接收请求、解析请求以及将请求转发给相应的Servlet进行处理。而Servlet则负责具体的业务逻辑处理,并将处理结果返回给Web容器,最终由Web容器将响应返回给客户端。
DispatcherServlet和Servlet在Java Web开发中都是处理HTTP请求的核心组件,但它们之间存在明显的区别和特定的关系。以下是对它们之间关系的详细阐述:
-
定义:DispatcherServlet是Spring MVC框架中的核心控制器,它是对Servlet的一个扩展实现。DispatcherServlet继承自
HttpServletBean,并实现了前端控制器设计模式。 -
功能:
- 请求分发:在Spring MVC应用程序中,所有HTTP请求首先都会被转发到DispatcherServlet。DispatcherServlet作为前端控制器,负责统一调度和分发这些请求。
- 职责解耦:DispatcherServlet通过读取配置信息,根据请求的URL、请求方法等信息决定将请求路由至哪个具体的Controller。这样,它解耦了各个业务逻辑处理器(Controller)与Servlet API之间的直接依赖。
- 请求处理:DispatcherServlet通过
HandlerMapping、HandlerAdapter等一系列Spring MVC组件完成请求处理、视图渲染等操作。
补充:DispatcherServlet与Servlet的关系
-
定义:DispatcherServlet是Spring MVC框架中的核心控制器,它是对Servlet的一个扩展实现。DispatcherServlet继承自
HttpServletBean,并实现了前端控制器设计模式。 -
功能:
- 请求分发:在Spring MVC应用程序中,所有HTTP请求首先都会被转发到DispatcherServlet。DispatcherServlet作为前端控制器,负责统一调度和分发这些请求。
- 职责解耦:DispatcherServlet通过读取配置信息,根据请求的URL、请求方法等信息决定将请求路由至哪个具体的Controller。这样,它解耦了各个业务逻辑处理器(Controller)与Servlet API之间的直接依赖。
- 请求处理:DispatcherServlet通过
HandlerMapping、HandlerAdapter等一系列Spring MVC组件完成请求处理、视图渲染等操作。
-
继承关系:DispatcherServlet是Servlet的一个子类(或扩展实现)。它继承了Servlet的所有功能,并在此基础上增加了请求分发、职责解耦等特性。
-
使用场景:
- Servlet:通常用于处理简单的HTTP请求和响应。在早期的Java Web应用中,Servlet直接充当了Controller的角色。
- DispatcherServlet:在Spring MVC等现代Java Web框架中,DispatcherServlet作为前端控制器,负责接收所有HTTP请求,并根据配置将请求分发到相应的Controller进行处理。这使得应用程序的结构更加清晰,职责更加明确。
-
配置与初始化:
- Servlet通常需要在
web.xml文件中进行配置,包括Servlet的名称、类名和URL映射等。 - DispatcherServlet也需要在
web.xml中进行配置,但更多情况下,它可以通过Spring的配置文件(如applicationContext.xml)或注解进行配置。在配置时,需要指定DispatcherServlet的上下文加载的Bean,这些Bean通常是只对Spring MVC有效的组件,如Controller、HandlerMapping、HandlerAdapter等。
- Servlet通常需要在
四、总结
DispatcherServlet和Servlet在Java Web开发中都是重要的组件。Servlet作为处理HTTP请求的基本单位,提供了基本的请求处理功能。而DispatcherServlet作为Spring MVC框架中的核心控制器,通过扩展Servlet的功能,实现了请求的分发、职责的解耦以及更复杂的请求处理流程。在使用Spring MVC等现代Java Web框架时,DispatcherServlet通常作为前端控制器来处理所有的HTTP请求。
打算做一个每日java相关技术知识点干货分享账号,有哪些想了解的技术知识点可以在评论下留言,如果这篇文章有帮你知识充电的话,麻烦点个赞支持一下《Java 技术每日充,职场竞争力飙升》