【仿写框架之仿写Tomact】一、详解Tomcat的工作流程

这篇具有很好参考价值的文章主要介绍了【仿写框架之仿写Tomact】一、详解Tomcat的工作流程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

当涉及到Java Web应用程序的部署和运行,Apache Tomcat无疑是一个备受欢迎的选择。Tomcat作为一个开源的、轻量级的Java Servlet容器和JavaServer Pages (JSP) 容器,扮演着连接用户和应用程序的重要角色。本篇文将向大家阐述Tomcat的执行流程,从启动到请求处理再到关闭,帮助您更好地理解Tomcat在Java Web开发中的作用。

1、启动阶段

在启动阶段,他会扫描webapp目录下的所有子目录和子文件,然后把这个目录下的 .class 文件挑选出来,拿到每个java类的类路径(全限定名),然后for循环遍历这些类路径,通过反射,得到相应的类对象,然后从Class类信息里去获取注解信息,拿到注解信息之后看哪些java的类信息里面有@WebServlet注解,把这些java文件挑选出来。通过newInstance() 生成类的实例,它代替了new操作,为什么这些环节没办法使用直接new的方式而是要用newInstance() 呢,使用 new 的前提是要知道类的名字和它的包路径,很可惜tomcat的开发者事先不知道使用者创建的 servlet 叫什么名字以及所在包是什么,所以 new是不能使用的,才有了newInstance() 的方式生成实例。 生成servlet实例的时候,又进一步通过方法的实例拿到了它里面的 method实例,method实例里面挑选出 doGet 和 doPost实例,同时上面也拿到了注解里的路径值,然后把它们放到了 hashMap 中,其中 key值就是注解里的路径,value值就是对象实例信息。除了method实例,servlet实例也存在hashMap中,method实例和servlet实例对应的key值都是注解的路径。

2、监听阶段:

  • Tomcat根据配置的Connector信息创建并启动监听网络连接的组件,如HTTP Connector。
    Tomcat进入等待状态,开始监听来自客户端的HTTP请求。

3、请求处理阶段:

当有HTTP请求到达时并不是立即开启线程处理的,而是把它放入线程池中。每个线程在工作时,首先把通过端口传过来的 http字符信息封装成 httpRequest 对象和 httpResponce对象,同时提取出请求的 URL ,把URL中的 ip、端口、项目名字去掉剩下的就是要请求的servlet地址或前端地址。如果请求的是前端资源那么会根据请求路径去相应的目录下找前端文件,之后按照相应的编码读取里面的字符串返回给前端;如果请求的是servlet 那么会根据URL去之前启动阶段的 hashMap里匹配Class对象,提取出来之后执行代理。tomcat通过invoke()方法完成了 servlet的调用。

4、发送请求处理后的响应

在业务逻辑处理完成后,Servlet或JSP生成HTTP响应,包括状态码、响应头和响应体。这些内容被封装在HTTP响应对象中,返回给客户端。

Tomcat在启动时,
会先加载配置文件:
读取配置文件中的参数如服务器的端口、线程池核心线程数、最大线程数、非核心线程存活时间、存活时间单位、每个线程的前缀名等。我将这些参数以参数名为key,参数值为value,保存在一个 map集合中,用于创建连接器和线程池时做配置。

创建连接器:
根据配置文件中的连接器设置,Tomcat会创建连接器,这些连接器负责监听指定的端口,接收来自客户端的HTTP请求。

创建线程池:
线程池的参数我在手写时放在了一个单独的线程池工具类中,每个属性都初始了默认值,定义一个无参构造器,如果配置文件中声明了参数的值,那么对应属性就使用配置文件里参数的值,否则还使用默认值.

然后初始化servlet容器:
先将项目中所有以.java结尾的文件扫描出来,保存每个java文件的全限定名。然后遍历这些全限定名,每遍历一个全类名,先通过Class.forName(“全限定名”)反射获得类对象,得到类对象我们就可以获得该类的所有类信息,然后判断这个类是否标记了@WebServlet注解,如果标记了这个注解,通过newInstance() 生成servlet实例(因为事先不知道开发人员创建的servlet叫什么以及所在包是什么)
以@WebServlet注解中路径为Key,servlet实例为value put进一个装路径和servlet实例的hashMap中
生成servlet实例的时候,又进一步通过方法的实例拿到了它里面的 method实例,method实例里面挑选出 doGet 和 doPost实例,同时上面也拿到了注解里的路径值,然后把它们放到了装方法实例的 hashMap 中,其中 key值就是注解里的路径,value值就是对象实例信息。
遍历完成后,servlet容器初始化完成。

接下来是请求转发阶段:
tomcat负责接收来自网络的请求,通过socket监听端口.当接收到HTTP请求后,并不是立即开启线程去处理请求,而是把请求放入线程池中.由里面的线程去处理.

每个线程的工作是,首先把通过端口传过来的 http字符信息封装成 httpRequest 对象和 httpResponse对象,同时提取出请求的 URL ,把URL中的 ip、端口、项目名字去掉剩下的就是要请求的servlet地址或前端地址。如果请求的是前端资源那么会根据请求路径去相应的目录下找前端文件,之后按照相应的编码读取里面的字符串返回给前端;如果请求的是servlet 那么会根据URL去之前启动阶段的 hashMap里匹配 servlet实例和 method对象,提取出来之后执行代理, method.invoke(obj,HttpServletRequest, HttpServletResponse)
tomcat通过invoke()方法完成了 servlet的调用。doGet() 和doPost() 方法都是void方法没有返回值,统一将返回内容写入httpResponse对象中,然后返回给浏览器.

【仿写框架之仿写Tomact】一、详解Tomcat的工作流程,tomcat,java文章来源地址https://www.toymoban.com/news/detail-658336.html

到了这里,关于【仿写框架之仿写Tomact】一、详解Tomcat的工作流程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • RabbitMQ工作流程详解

    (1)生产者连接RabbitMQ,建立TCP连接(Connection),开启信道(Channel) (2)生产者声明一个Exchange (交换器),并设置相关属性,比如交换器类型、是否持久化等 (3)生产者声明一个队列井设置相关属性,比如是否排他、是否持久化、是否自动删除等 (4)生产者通过bindingKey (绑定Key) 将交换器

    2024年02月13日
    浏览(32)
  • OAuth2 工作流程详解

    我们之前谈到了使用saml作为SSO单点登录认证。本文讲解oauth2.0协议,oauth2.0协议避免了客户端直接访问受保护资源 OAuth是一种安全的开放协议,用于在不相关的服务之间授权用户。换句话说,它使一个服务能够访问托管在其他服务上的资源,而无需共享用户凭证,如用户名和

    2024年02月08日
    浏览(30)
  • Cookie和session工作流程详解

    目录 cookie机制 session会话 理解会话机制 Servlet中对Cookie和Session提供的 HttpServletrequest类中的方法: 模拟实现登录功能 首先实现功能分为两个界面:  (1)登录页面代码(前端代码)    (2) 编写LoginServlet处理上述登录请求 登录http请求格式如下:    LoginServlet代码:    验证

    2024年02月07日
    浏览(27)
  • 采购管理怎么做(详解采购工作流程)

    阅读本文您将了解:1.采购管理的意义;2.采购工作流程(中小企业);3.采购管理未来发展趋势。 采购管理是指企业为满足生产经营需要,对外部供应商进行的采购活动的规划、组织、实施和控制。采购是企业日常经营中不可或缺的环节,采购管理则是企业经营管理的一个重

    2024年02月03日
    浏览(28)
  • HTTP协议详解:基本概念与工作流程

    HTTP(Hypertext Transfer Protocol,超文本传输协议)是一种用于在计算机网络上进行数据交换的通信协议。它是互联网上最常用的协议之一,被广泛应用于Web浏览器和服务器之间的通信。本文将深入探讨HTTP协议的基本概念和工作流程,帮助读者更好地理解这个重要的通信协议。

    2024年02月10日
    浏览(30)
  • 【SA8295P 源码分析 (三)】97 - QNX AIS Camera 框架介绍 及 Camera 工作流程分析

    因为一些原因,本文需要移除, 对于已经购买的兄弟,不用担心,不是跑路, 我会继续持续提供技术支持, 有什么模块想学习的,或者有什么问题有疑问的, 请私聊我,我们 +VX 沟通技术问题,一起学习,一起进步 接下来,我一一私聊已经购买的兄弟添加VX,我们继续一起

    2024年02月07日
    浏览(25)
  • SpringMvc拦截器和手写模拟SpringMvc工作流程源码详解

    目录 1. SpringMvc简介 1.1 什么是MVC 1.2 什么是SpringMvc 1.3 SpringMvc 能干什么 1.4 SpringMvc 工作流程 2. SpringMvc拦截器和过滤器 2.1 拦截器 2.1.1 拦截器作用 2.1.2 拦截器和过滤器的区别 2.1.3 拦截器方法说明 2.1.4 多个拦截器执行顺序 2.1.5 自定义拦截器 2.2 过滤器(附加) 3. 手写模拟Spri

    2024年02月09日
    浏览(36)
  • 【SpringMVC】一文带你彻底搞懂SpringMVC的工作流程(最强详解!!)

    目录 首先来说明一下,SpringMVC的各个组成部分 DispatcherServlet  HandlerMapping Handler(通常就是Controller)  HandlerAdapter  ViewResolver View  SpringMVC具体的工作流程  是SpringMVC的核心部分,是 一种前端控制器 ,由框架所提供 作用:统一处理请求和响应。除此之外也是 整个控制流程的

    2024年02月11日
    浏览(33)
  • 如何仿写简易tomcat 实现思路+代码详细讲解

    仿写之前,我们要搞清楚都要用到哪些技术 自定义注解,比如Tomcat使用的是@Servlet,我们可以定义一个自己的@MyServlet 构造请求体和返回体,比如tomcat使用HttpRequest,我们可以自己定义myHttpRequest java去遍历一个指定目录,然后获取到.java文件,再获取到带有@MyServlet注解的类 然

    2024年02月12日
    浏览(24)
  • 【仿写tomcat】三、通过socket读取http请求信息

    这里我们也是创建一个专门管理socket的类 随后在主方法中调用他,让serverSocket监听8080端口,并且一直尝试获取连接信息 接下来在SocketStore中添加处理请求的方法,这里面的主要逻辑就是读取流数据,而且我们知道HTTP协议是一行一行的(看f12就知道了),所以给数据拼上换行

    2024年02月12日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包