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,一经查实,立即删除!

相关文章

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…

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

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

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

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

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

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

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

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

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

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

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

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

xampp mysql 查询很慢_如何开启mysql的慢查询机制

1 在mysql中默认是不会开启慢查询日志功能的,我们可以使用show variables like ‘%slow%‘来查看一下。结果如下:参数说明:log_slow_queries表示服务器端是否开启慢查询日志记录功能,slow_query_log表示mysql监测满查询的功能是否…

uaa 授权_使用UAA OAuth2授权服务器–客户端和资源

uaa 授权在上一篇文章中,我介绍了如何使用Cloud Foundry UAA项目启动OAuth2授权服务器,以及如何使用OAuth2授权代码流程中涉及的一些参与者来填充它。 我在Digital Ocean网站上发现这篇文章在描述OAuth2授权代码流方面做得很好,因此&#xf…

ps背景不变换字_PS教程:复杂背景中,如何利用通道轻松抠出发丝?

点击图片 1元抢购 PS、PR、AE等课程活动无缝抠图复杂背景当我们常用的钢笔抠图解决不了细碎的头发丝时我们可以用通道进行抠图,换背景在复杂的背景中把头发丝抠出来配套PS素材请到QQ群:565256668下载首先打开素材,我们发现背景比较复杂&…

阿里云 ram 容器镜像_容器中Java RAM的使用:不会丢失内存的5大技巧

阿里云 ram 容器镜像在本文中,我们希望分享Java内存管理的细节以及容器内部的弹性,这些细节乍一看并不明显。 在下面,您将找到要注意的问题列表以及即将发布的JDK版本中的重要更新,以及针对核心痛点的现有解决方法。 我们收集了5…

java堆内存剩余多少合理_Java堆内存的10个要点

我刚开始学习Java编程时,可不知道什么是堆内存或堆空间(heap space),甚至根本不管对象创建时都放在哪里去了。正式了写一些程序后,经常会遇到java.lang.outOfMemoryError等错误,我才开始关注堆内存。对大多数程序员都经历过这样的…

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

流程说明: 1.客户端浏览器(Client)向服务器发送一个 http 请求(HttpServletRequest) 2.Container(容器) 通过 web.xml 映射请求,并获得控制器(Controller)的…

java中springdi_java中spring入门

1、spring的概念apache推出的java企业框架,提供了基于ioc的对象工厂、aop面向切面编程等功能及其他增强功能。当前版本4.xxx,支持注解的配置。 springmvc。2、控制反转(ioc):inversion of control。用来描述框架的重要特征spring针对ioc的具体实现&#…

tableau选择计算_干货 | 年薪40W, 掌握Tableau的留学生真的赚翻了

文章来源:UniCareer Tableau作为一款数据分析工具向来被视为文科转行Data必学因为它不需要你有Coding经验而且极易上手那么,Tableau究竟该怎么学?学会Tableau可以胜任哪些岗位?1Tableau: 学到就是赚到Tableau作为一款数据可视化工…

Java Servlet 编程,重定向介绍

文章目录什么是重定向重定向流程演示图如何重定向注意的问题重定向的特点重定向演示什么是重定向 服务器向浏览器发送一个状态码 302 及一个消息头 location,浏览器收到后,会立即向 location 所指向的地址发送请求。 重定向流程演示图 (1&a…