web容器:tomcat,servlet基本概念

126 阅读6分钟

概要

请求由谁接收?又是怎么访问到url应接口的呢?这就涉及到两个基础知识点“web容器”“servlet”,我和大家一起浅浅的复习一下吧

浅显的大致关系

  1. 请求先到web容器(Tomcat、JBoss、Udertown)

  2. 创建个servlet(MVC架构模式、DispatcherServlet),根据url找到对应接口

括号中的是帮助理解它们所涉及到的应用点

一、容器

  1. 容器提供了一种便捷的方式,让 servlet 与 web 服务器进行通信。如果没有容器,开发人员就需要自己创建 serverSocket 去监听端口、创建流等一系列复杂的操作。有了容器,servlet 可以直接跟容器中的环境变量接口交互,不必关注其他系统问题,从而能够专注于业务逻辑的实现。例如,在 Tomcat 中,servlet 只需引用环境变量 session、request、response 等,就可以处理 HTTP 请求,而无需关心底层的通信细节。

  2. 容器会自动为每一个 servlet 请求创建一个 Java 线程。当请求到达时,容器会从线程池中分配一个线程来处理请求。当 servlet 运行完 Http 相应的服务方法后,这个线程就可以被回收。

二、Servlet

  1. 定义:Servlet(服务器端Java应用程序)是Java Web应用程序的主要组件之一。它是一个基于Java技术的Web组件,运行在服务器端,用于生成动态的内容。

  2. 工作原理:Servlet的工作原理是接收客户端的请求,进行处理,并生成响应返回给客户端。具体过程如下:

    • 客户端通过浏览器发送请求到Web服务器。
    • Web服务器接收到请求后,将请求交给Servlet容器。
    • Servlet容器根据请求的URI来确定应该由哪一个Servlet来处理请求。
    • 如果该Servlet尚未被加载,容器会将其加载到内存中,并创建一个Servlet实例。
    • 容器调用Servlet的初始化方法init()来初始化Servlet实例。
    • 容器调用Servlet的service()方法来处理请求,并将请求和响应对象传递给该方法。
    • Servlet实例根据请求对象进行相应的业务逻辑处理,并将处理结果存储到响应对象中。
    • 容器将处理结果返回给Web服务器。
    • Web服务器将响应返回给客户端。

三、Web容器与Servlet的关系

  1. 包含关系:Web容器包含了Servlet容器。Servlet容器是Web服务器或应用程序服务器的一部分,用于在发送的请求和响应之上提供网络服务。
  2. 协同工作:Web容器和Servlet协同工作,共同处理客户端的请求。Web容器负责接收请求、解析请求以及将请求转发给相应的Servlet进行处理。而Servlet则负责具体的业务逻辑处理,并将处理结果返回给Web容器,最终由Web容器将响应返回给客户端。

DispatcherServlet和Servlet在Java Web开发中都是处理HTTP请求的核心组件,但它们之间存在明显的区别和特定的关系。以下是对它们之间关系的详细阐述:

  1. 定义:DispatcherServlet是Spring MVC框架中的核心控制器,它是对Servlet的一个扩展实现。DispatcherServlet继承自HttpServletBean,并实现了前端控制器设计模式。

  2. 功能

    • 请求分发:在Spring MVC应用程序中,所有HTTP请求首先都会被转发到DispatcherServlet。DispatcherServlet作为前端控制器,负责统一调度和分发这些请求。
    • 职责解耦:DispatcherServlet通过读取配置信息,根据请求的URL、请求方法等信息决定将请求路由至哪个具体的Controller。这样,它解耦了各个业务逻辑处理器(Controller)与Servlet API之间的直接依赖。
    • 请求处理:DispatcherServlet通过HandlerMappingHandlerAdapter等一系列Spring MVC组件完成请求处理、视图渲染等操作。

补充:DispatcherServlet与Servlet的关系

  1. 定义:DispatcherServlet是Spring MVC框架中的核心控制器,它是对Servlet的一个扩展实现。DispatcherServlet继承自HttpServletBean,并实现了前端控制器设计模式。

  2. 功能

    • 请求分发:在Spring MVC应用程序中,所有HTTP请求首先都会被转发到DispatcherServlet。DispatcherServlet作为前端控制器,负责统一调度和分发这些请求。
    • 职责解耦:DispatcherServlet通过读取配置信息,根据请求的URL、请求方法等信息决定将请求路由至哪个具体的Controller。这样,它解耦了各个业务逻辑处理器(Controller)与Servlet API之间的直接依赖。
    • 请求处理:DispatcherServlet通过HandlerMappingHandlerAdapter等一系列Spring MVC组件完成请求处理、视图渲染等操作。
  3. 继承关系:DispatcherServlet是Servlet的一个子类(或扩展实现)。它继承了Servlet的所有功能,并在此基础上增加了请求分发、职责解耦等特性。

  4. 使用场景

    • Servlet:通常用于处理简单的HTTP请求和响应。在早期的Java Web应用中,Servlet直接充当了Controller的角色。
    • DispatcherServlet:在Spring MVC等现代Java Web框架中,DispatcherServlet作为前端控制器,负责接收所有HTTP请求,并根据配置将请求分发到相应的Controller进行处理。这使得应用程序的结构更加清晰,职责更加明确。
  5. 配置与初始化

    • Servlet通常需要在web.xml文件中进行配置,包括Servlet的名称、类名和URL映射等。
    • DispatcherServlet也需要在web.xml中进行配置,但更多情况下,它可以通过Spring的配置文件(如applicationContext.xml)或注解进行配置。在配置时,需要指定DispatcherServlet的上下文加载的Bean,这些Bean通常是只对Spring MVC有效的组件,如Controller、HandlerMapping、HandlerAdapter等。

四、总结

DispatcherServlet和Servlet在Java Web开发中都是重要的组件。Servlet作为处理HTTP请求的基本单位,提供了基本的请求处理功能。而DispatcherServlet作为Spring MVC框架中的核心控制器,通过扩展Servlet的功能,实现了请求的分发、职责的解耦以及更复杂的请求处理流程。在使用Spring MVC等现代Java Web框架时,DispatcherServlet通常作为前端控制器来处理所有的HTTP请求。

打算做一个每日java相关技术知识点干货分享账号,有哪些想了解的技术知识点可以在评论下留言,如果这篇文章有帮你知识充电的话,麻烦点个赞支持一下《Java 技术每日充,职场竞争力飙升》