Servlet 运行原理

文章目录

  • Servlet 如何运行
  • 演示 Servlet 运行原理

Servlet 如何运行

用户向浏览器地址栏输入:http://ip:port/helloweb/sayHello?name=zs

  1. 浏览器使用 ip:port(端口号)连接服务器

  2. 浏览器将请求数据按照 http 协议打成一个数据包(请求数据包)发送给服务器

请求数据包的内容包含了请求资源路径(/helloweb/sayHello?name=zs),另外,在请求数据包当中,还会包含浏览器自动生成的一些信息。

  1. 服务器创建两个对象:请求对象(Request)和响应对象(Response)
    服务器解析请求数据包,将解析之后的数据存放到请求对象里面,方便 servlet 读取请求数据(因为 servlet 不用解析请求数据包,如果 要解析,需要理解 http 协议)。
    请求对象是 HttpServletRequest 接口的一个实现。
    响应对象是 HttpServletResponse 接口的一个实现,响应对象用于存放 servlet 处理的结果。

  2. 依据请求资源路径找到相应的 servlet 配置,通过反射创建 servlet 实例。然后调用其 service() 方法。
    在调用 service()方法时,会将事先创建好的请求对象(request)和响应对象(response)作为参数进行传递。在 servlet 内部,可以通过 request 获得请求数据,或者通过 response 设置响 应数据。

  3. 服务器从 response 中获取数据,按照 http 协议打成一个数据包(响应数据包),发送给浏览器。

  4. 浏览器会解析响应数据包,取出相应的数据,生成相应的界面。

演示 Servlet 运行原理

当用户向浏览器地址栏输入 http://ip:port/helloweb/sayHello?name=xxx

原理图

在这里插入图片描述

说明:

  1. 建立连接
    浏览器根据 IP 地址和端口号(port)和服务器建立连接

  2. 打包
    浏览器将请求数据按 HTTP 协议打成数据包(http 请求数据包)
    http 请求数据包包含“helloweb/sayHello”(请求资源路径)

  3. 发送请求
    浏览器向服务器发送请求数据包

  4. 创建 Request 对象
    Servlet 引擎(Tomcat 负责通讯的模块)创建请求对象(Request),方便我们自定义的 Servlet 获得请求数 据包中的内容
    该对象符合 HttpRequest 接口

  5. 创建 Response 对象
    Servlet 引擎(Tomcat 负责通讯的模块)创建相应对象(Response)
    该对象符合 HttpResponse 接口

  6. 创建 HelloServlet 对象
    服务器通过反射的方式创建 Servlet 实例

  7. 调用 Servlet 实例的 service(request , response)方法
    7.1)访问参数
    在 service()方法中访问 Request 对象,获得用户提交的一些参数
    7.2)处理结果
    在 service()方法中将处理结果放入 Response 对象

  8. 取数据
    Servlet 引擎从 Response 对象中取出数据

  9. 打包
    Servlet 引擎将取出的数据打包,该数据包符合 http 协议要求

  10. 发送响应
    浏览器将响应数据包中的数据取出,生成界面

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/334969.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python dicom 器官分割_python+opencv阈值分割

37 #获取像素点的最大值和最小值38 arr_temp np.reshape(img_arr,(lens,))39 max_val max(arr_temp)40 min_val min(arr_temp)41 #图像归一化42 img_arr (img_arr-min_val)/(max_val-min_val)43 #绘制图像并保存44 #保存图片时去掉周围白边45 plt.axis(off)46 fig plt.gcf()47…

解析浏览器访问服务器 Servlet 应用程序的交互过程(Servlet 容器如何处理请求资源路径)

案例 1: 请求资源路径:http://localhost:8080/web01/greeting?namezs 浏览器通过 localhost:8080 连接服务器;服务器在 webapps 目录下寻找 web01 目录,找到后进入web01 目录内寻找 WEB-INF 目录,在进入 WEB-INF 目…

java github_GitHub Research:超过50%的Java记录语句写错了

java github为什么生产日志无法帮助您找到错误的真正根本原因? 询问您是否使用日志文件监视您的应用程序几乎就像询问…您是否喝水。 我们都使用日志,但是我们如何使用它们则是一个完全不同的问题。 在下面的文章中,我们将对日志进行更深入…

yolov5论文_YOLOv5的妙用:学习手语,帮助听力障碍群体

编辑:魔王、杜伟计算机视觉可以学习美式手语,进而帮助听力障碍群体吗?数据科学家 David Lee 用一个项目给出了答案。如果听不到了,你会怎么办?如果只能用手语交流呢?当对方无法理解你时,即使像订…

python制作系统程序与html交互_python+html语音人物交互_flask后台与前端(html)交互的两种方法...

基于python flask框架搭建webflask后台与前端(html)交互的两种方法:方法1 使用flask-wtf 提供的表单用常见的登录为例:// An highlighted blockfrom flask_wtf import Formclass LoginForm(Form): # 登录表单ROLE SelectField(角色, choices[(s, 管理员…

Java 程序执行过程的内存流程图(结合类加载器 ClassLoader 讲解)

Student s new Student(); s.play(); Student s2 new Student();以上代码的执行流程如下: JVM 作为操作系统的一个迚程在系统中执行,那么系统会为 JVM 分配一块内存空间,这块内存空 间被 JVM 分为 3 大块(栈区、堆区、方法区) 一般而言&a…

java javap_javap的用途不断发展:您的Java类文件中隐藏了什么?

java javap什么是Javap,如何使用它以及何时要反汇编类文件? 作为Java开发工具包(JDK)的一部分,我们可以使用许多工具,这些工具有助于更好地理解Java代码。 这些工具之一是javap命令,它使我们能…

虚拟内存越大越好吗_手机的运行内存真的是越大越好吗?6GB和8GB到底又该如何选择?...

许多人买手机,除了看处理器、外观以外,关注最多的莫过于手机的运行内存了。选择一个合适的运行内存几乎关系到整个手机使用寿命和命脉。那么我们现在买手机选择多大的运行内存合适呢?真的是越大越好吗?下面我们就来一起看看吧。选…

Adobe PhotoShop(PS) for Windows 快捷键/PS快捷键

文章目录一、工具栏二、文件操作三、选择功能四、视图操作五、编辑操作六、图像调整七、图层操作一、工具栏 功能说明快捷键备注移动工具V矩形、椭圆选框工具M套索、多边形套索、磁性套索L快速选择工具、魔棒工具W裁剪、透视裁剪、切片、切片选择工具C吸管、颜色取样器、标尺、…

kafka和storm集成_Storm和Kafka集成的重要生产错误和修复

kafka和storm集成我将在此处描述Storm和Kafka集成模块的一些细节,一些您应该意识到的重要错误以及如何克服其中的一些错误(尤其是对于生产安装)。 我在生产安装中大量使用Apache Storm,并将Kafka作为主要输入源(Spout…

显微镜自动聚焦原理是什么_什么是共聚焦显微镜?你了解过共聚焦显微镜吗?...

更出色的表面分析ZEISS Smartproof 5产品表面粗糙度质量控制ZEISS Smartproof 5是一款集成式转盘共聚焦显微镜,依托孔径关联技术将传统共聚焦显微镜的高分辨率与转盘系统的高速采集相结合,能够高速、准确地采集表面3D数据。二维测量:距离、高…

java string args_java – 语法“final String … args”是什么意思/做什么?

Java中参数的省略号表示类型的vararg.因此,在您的情况下,…意味着您可以将任意数量的String参数传递给doInBackground方法.因此,您可以调用此方法doInBackground(“String1”,“String2”,“String3”)或doInBackground(“String1”)或doInBackground(“String1”,“String3”,…

Java 程序执行过程的内存流程图(手写稿)

操作系统会分配一定的内存空间给JVM,空间大小可以在JVM里面设置,JVM会将内存分为三个区域:栈、堆、方法区。

unsafe jdk9_JDK 9清单:Project Jigsaw,sun.misc.Unsafe,G1,REPL等

unsafe jdk9Java 9距离(希望)数月了,现在该回顾一下即将发生的变化以及您应该采取的措施 Java 9即将来临(我们正在计算到达的日子 ),其中包含一系列新功能和改进功能。 这就是为什么我们决定创建一份清单来…

DAO 学习笔记

文章目录什么是 DAO?如何写 DAO?示例代码什么是 DAO? Data Access Object(DAO),数据访问对象/数据存取对象。DAO 是封装数据库访问逻辑的组件/类 。 定义一个类,这个类中的方法封装了数据库访问逻辑,要访问数据库时,只要调用…

dc/os_DC / OS中具有Java和数据库应用程序的服务发现

dc/os该博客将展示一个简单的Java应用程序如何使用DC / OS中的服务发现与数据库进行对话。 为什么要进行服务发现? 应用程序通常由多个组件组成,例如应用程序服务器,数据库,Web服务器,缓存和消息传递服务器。 通常&am…

python进阶项目设计_Python进阶循环设计

之前在“循环”一节,我们已经讨论了Python最基本的循环语法。这一节,我们将接触更加灵活的循环方式。1. 利用range(), 得到下标在Python中,for循环后的in跟随一个序列的话,循环每次使用的序列元素,而不是序列的下标。之…

python调试器入门教程_PyCharm入门第一步(二)——调试第一个Python应用|python基础教程|python入门|python教程...

https://www.xin3721.com/eschool/pythonxin3721/第2步:调试您的第一个Python应用程序找出问题的根源PyCharm报告运行时错误:a ZeroDivisionError。深入研究一下代码,找出问题所在。这里可以使用PyCharm调试器来查看代码中发生了什么。要开始…

Struts2请求处理的内部流程图/结构图/原理图(版本二)

文章目录请求处理流程图流程说明请求处理流程图 流程说明 第 1 步: 客户端初始化一个指向 Servlet 容器(例如 Tomcat)的请求,例如:在浏览器中输入 http:localhost:8080/Struts2/helloworld/helloworldAction.action …

jboss 配置上下文路径_为单个Web应用程序配置多个上下文根– JBoss

jboss 配置上下文路径有时&#xff0c;我们通过在jboss-web.xm l中定义一个来对应用程序进行更改&#xff0c;以支持利用JBoss功能的多个上下文根&#xff0c;如下所示&#xff1a; webapp / WEB-INF / jboss-web.xml&#xff1a; <?xml version"1.0" encoding…