Httpservlet源码及实现机制详解

HttpServlet源码分析 HttpServlet类是专门为HTTP协议准备的 HttpServlet在 jakarta.servlet.http.HttpServlet包下 目前接触的servlet规范中的接口: - jakarta.servlet.Servlet 核心接口(接口) - jakarta.servlet.ServletConfig Servlet配置信息接口(接口) - jakarta.servlet.ServletContext Servlet上下文接口(接口) -.. 阅读详情

Httpservlet源码及实现机制详解

Httpservlet源码及实现机制

HTTP请求刚刚进来的时候实际上只是一个HTTP请求报文,容器会自动将这个HTTP请求报文包装成一个HttpServletRequest对象,并且自动调用HttpServlet的service()方法来解析这个HTTP请求,service()方法会解析HTTP请求行,而HTTP请求行由method,uri,HTTP version三个组成,method就是get或者post,service()方法根据method来决定是执行doGet还是doPost,这一切都是服务器Tomcat/weblogic/websphere/jboss(容器)自动完成的,HTTP的格式也自动被解析。 

只要你的类继承了HttpServlet,并且在web.xml里面配置了相应的servlet和mapping,服务器就会自动帮你执行以上过程。

          在每一个Servlet都必须要实现Servlet接口,GenericServlet是个通用的、不特定于任何协议的Servlet,它实现了Servlet接口,而HttpServlet继承于GenericServlet,因此HttpServlet也实现了Servlet接口,所以我们定义的Servlet只需要继承HttpServlet父类即可。

 Servlet接口中定义了一个service方法,HttpServlet对该方法进行了实现,实现方式就是将ServletRequest与ServletResponse转换为HttpServletRequest与HttpServletResponse。

 

转换完毕后,会调用HttpServlet类中自己定义的service方法,如下所示

在该service方法中,首先获得到请求的方法名,然后根据方法名调用对应的doXXX方法,比如说请求方法为GET,那么就去调用doGet方法;请求方法为POST,那么就去调用doPost方法。

在HttpServlet类中所提供的doGet、doPost等方法都是直接返回错误信息,所以我们需要在自己定义的Servlet类中override这些方法

 

 

Servlet的框架是由两个Java包组成:javax.servlet和javax.servlet.http. 在javax.servlet包中定义了所有的Servlet类都必须实现或扩展的的通用接口和类.在javax.servlet.http包中定义了采用HTTP通信协议的HttpServlet类.

  Servlet的框架的核心是javax.servlet.Servlet接口,所有的Servlet都必须实现这一接口 .在Servlet接口中定义了5个方法,其中有3个方法代表了Servlet的生命周期:

  init方法,负责初始化Servlet对象

  service方法,负责相应客户的请求

  destory方法,当Servlet对象退出声明周期时,负责释放占有的资源

  当Web容器接收到某个Servlet请求时,Servlet把请求封装成一个HttpServletRequest对象,然后把对象传给Servlet的对应的服务方法.

  HTTP的请求方式包括DELETE,GET,OPTIONS,POST,PUT和TRACE,在HttpServlet类中分别提供了相应的服务方法, 它们是,doDelete(),doGet(),doOptions(),doPost(), doPut()和doTrace().

  HttpServlet的功能

  HttpServlet首先必须读取Http请求的内容。Servlet容器负责创建HttpServlet对象,并把 Http请求直接封装到HttpServlet对象中,大大简化了HttpServlet解析请求数据的工作量。HttpServlet容器响应Web客户请求流程如下:

  1)Web客户向Servlet容器发出Http请求;

  2)Servlet容器解析Web客户的Http请求;

  3)Servlet容器创建一个HttpRequest对象,在这个对象中封装Http请求信息;

  4)Servlet容器创建一个HttpResponse对象;

  5)Servlet容器调用HttpServlet的service方法,把HttpRequest和HttpResponse对象作为service方法的参数传给HttpServlet对象;

  6)HttpServlet调用HttpRequest的有关方法,获取HTTP请求信息;

  7)HttpServlet调用HttpResponse的有关方法,生成响应数据;

  8)Servlet容器把HttpServlet的响应结果传给Web客户。

  二、创建HttpServlet的步骤——“四部曲”

  1)扩展HttpServlet抽象类;

  2)覆盖HttpServlet的部分方法,如覆盖doGet()或doPost()方法;

  3)获取HTTP请求信息。通过HttpServletRequest对象来检索HTML表单所提交的数据或URL上的查询字符串;

  4)生成HTTP响应结果。通过HttpServletResponse对象生成响应结果,它有一个getWriter()方法,该方法返回一个PrintWriter对象。

分类:  java服务端
1
1
« 上一篇: HttpServlet详解
» 下一篇: getServletContext()以及getServletConfig() 与getServletContext() 的区别
从毕设小白到Silvaco入门:我的第一个PN结击穿仿真踩坑实录 本文分享了从零开始学习Silvaco TCAD软件进行PN结击穿仿真的实战经验。通过详细的环境搭建、建模基础、仿真优化技巧和结果分析,帮助读者快速掌握Silvaco ATLAS模块的使用,避免常见错误,提升半导体器件仿真效率。 阅读详情

相关推荐

Tomcat源码分析之 doGet方法(一)

摘要: 本文是《Tomcat 源码分析之 doGet方法》的第一篇文章,主要介绍了源码分析的目标以及主要任务有哪些,并对Servlet知识点做了非常细致的介绍,帮助大家更好的了解 Servlet,以及为什么用户自定义的 Servlet 需要继承 HttpServlet。欢迎点击「算法与编程之美」↑关注我们!本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列博客。Servlet是...

算法与编程之美 4137

HttpServlet源码分析及HttpServletRequest接口

HttpServlet与HttpServletRequest相关内容

Michael_Jay的博客 1336

无人机基本组成部件

无人机基本组成部件

qq_37410522的博客 1万+

HttpServlet详解

Servlet简介 在HttpServlet之前,先说下Servlet, Servlet的框架的核心是javax.servlet.Servlet接口,所有的Servlet都必须实现这一接口.在Servlet接口中定义了5个方法,其中有3个方法代表了Servlet的声明周期: init方法,负责初始化Servlet对象 service方法,负责相应客户的请求 destory方法,当Serv...

liu_xue_xue的专栏 997

告别卡顿!用LVGL+DMA刷新STM32F407的SPI屏幕,性能提升实战

本文详细介绍了如何通过LVGL+DMA技术优化STM32F407驱动SPI屏幕的性能,实现接近60FPS的流畅刷新。从硬件瓶颈分析到SPI与DMA的精细化配置,再到LVGL的双缓冲机制与局部刷新优化,提供了一套完整的性能提升方案。特别适合嵌入式GUI开发中面临卡顿问题的工程师参考。

weixin_42531588的博客 379

Unity3D 集成 SQLite 数据库实战:从零搭建到数据可视化

本文详细介绍了在Unity3D项目中集成SQLite数据库的完整实战流程。从SQLite的轻量、稳定、易用特性讲起,逐步指导开发者完成环境配置、驱动集成、C#脚本编写(涵盖连接、建表、增删改查),并进阶演示了数据模型封装与在Unity UI中实现数据可视化的方法。最后提供了多线程访问、路径差异、性能优化等关键避坑指南,帮助开发者构建可靠高效的本地数据管理方案。

weixin_29291069的博客 91

Httpservlet源码及实现机制

Httpservlet源码及实现机制 HTTP请求刚刚进来的时候实际上只是一个HTTP请求报文,容器会自动将这个HTTP请求报文包装成一个HttpServletRequest对象,并且自动调用HttpServlet的service()方法来解析这个HTTP请求,service()方法会解析HTTP请求行,而HTTP请求行由method,uri,HTTP version三个组成,method就是...

durenniu的博客 1802

【Educoder作业】※ 数字图像——绿幕抠像

这次作业比上一篇博客基本得多,大多都是基础函数的运用。没啥说的,就整个sizesizesize即可。 T2 获取一个像素 T3 图像反色 T4 修改透明度 ′RGBA′'RGBA'′RGBA′也是一种图像格式 T5 抠图 T6 添加场景 这个主要是pastepastepaste函数里面的maskmaskmask参量没整明白,转载一篇博客供参考。...

JZYshuraK的博客 7571

Servlet以及HttpServlet的源码分析

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33676492的博客 164

maxwell与steady state thermal 通过workbench耦合仿真

文章目录maxwellsteady state thermal maxwell 1加入maxwell并打开 2导入模型 3选择求解器类型:涡流求解器eddy current 4修改模型名字不能带_等特殊符号 5为模型赋材料 6设立3D边界,各边电流进出方向为0其余方向300 7设置激励条件,可设置电流大小,相位,方向 8设置集肤深度,选取中间铜导体的体然后设置,如何设置看帮助文档 9求解设置 迭代步数 收敛精度 交流电频率 10验证条件满足计算 11求解 发现无法求解,删除ai

roymustang的博客 9201

使用Matlab与V-REP联合仿真

在Matlab中,我们可以使用V-REP提供的远程API(Application Programming Interface)来连接到V-REP仿真环境。为了连接Matlab与V-REP,我们需要在Matlab中添加V-REP的远程API函数库。你可以根据具体的需求编写Matlab脚本来控制V-REP场景中的机器人,并进行系统建模和仿真。一旦成功连接到V-REP,我们可以使用Matlab来控制V-REP场景中的机器人。在本文中,我们将介绍如何使用Matlab与V-REP进行联合仿真,并提供相应的源代码。

HackMasterX的博客 1854

笔记4——GenericServlet,ServletConfig,ServletContext,HttpServlet

可以发现servlet接口中有五个方法,我们平时用的最多的只有一个service方法,所以如果说我们每次写代码都去实现servlet接口的话,会显得代码特别不优雅,因为毕竟你剩下的四个方法都是空白的空着的。这种情况servlet也考虑到了, 他给了我们一个标准通用的servlet叫GenericServlet.他是一个通用的servlet,是一个抽象类,实现了servlet接口。

benpaodeDD的博客 44

AI学习指南RAG篇(19)-API调用与集成

通过上述API调用示例,您可以方便地将RAGFlow与其他系统集成,实现数据集管理、文档处理、会话管理等功能。希望本文的介绍能帮助您更好地理解和使用RAGFlow的API。

俞兆鹏的博客 2546

探索servlet机制(生命周期)

在我们第一次加载servlet的时候,创建一个servlet对象,整个业务过程中servlet对象只有一个,是一个单例。多线程访问:单实例多线程。

weixin_43433372的博客 190

基于Simulink的PMSM轮毂电机崎岖路面悬架协同控制仿真

本文完成了基于Simulink的PMSM轮毂电机崎岖路面悬架协同控制仿真,实现了:✅ 构建了四轮独立驱动+主动悬架高保真整车模型✅ 实现了Skyhook主动悬架控制✅ 设计了驱动-悬架状态共享与协同决策机制✅ 验证了5 m/s高速下连续颠簸路面稳定通过能力✅ 为高性能移动机器人提供一体化底盘解决方案。

xiaoheshang_123的博客 190

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Tomcat Servlet 执行流程源码解析

1. Connector 接收请求2. Engine → Host → Context → Wrapper 定位目标 Servlet3. StandardWrapperValve 分配 Servlet 实例4. 构建 ApplicationFilterChain5. 依次执行 Filter.doFilter()6. 执行 Servlet.service() → doGet()/doPost()7. 返回响应,按 Filter 逆序退出本篇文章我们完整剖析了Servlet 的执行流程生命周期。

波波烤鸭的博客 937

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Java Web后台入门实战(一)-YuaneQi Sharing

很多小伙伴对Java Web后台开发感兴趣,但是又苦于入门,一是书上和网络上的其他资料大多是千篇一律,要么就是偏知识,大量篇幅介绍Servlet相关内容,看不进去,要么太浅,看完又觉得好像并没有学到什么。所以从大家的需求出发,内容主要包括以下四个部分: 第一部分从javax.servlet.http.HttpServlet类源码开始,了解一次http请求过来后,服务器的处理逻辑是什么样儿的。 第二部

登高必自卑 行远必自迩 997

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

servlet的运行工作

我是一个刚学几天的小白,写得不好,如果哪个地方有错误,欢迎你们指出。 在服务器端,我用的是Tomcat作为Servlet 容器,在容器中有一个Servlet接口,你编写一个servlet类放在Tomcat中,当你在浏览器中访问这个servlet的URL时,在这里假设你访问的是存在的servlet,我们都知道接下来就是WEB容器会解析请求,创建servlet 实例,然后调用service( )方法...

weixin_30695195的博客 78

Java笔试必考知识点合集四

1.Java枚举的内部实现:枚举类在后台实现时,实际上是转化为一个继承了java.lang.Enum类的实体类,原先的枚举类型变成对应的实体类型,上例中AccountType变成了个class AccountType,并且会生成一个新的构造函数,若原来有构造函数,则在此基础上添加两个参数,生成新的构造函数,如上例子中:实例枚举源码:enum AccountType { SAVING, FI...

会飞的鱼博客 505

7-HttpServlet详解

本文介绍了HTTP协议的基本概念和组成部分。HTTP协议是W3C制定的超文本传输协议,用于规范浏览器与服务器之间的通信。协议分为请求协议和响应协议两部分: 请求协议包含四个部分: 请求行(请求方式、URI、HTTP版本) 请求头(主机、端口、浏览器信息等) 空白行(分隔请求头和请求体) 请求体(发送的具体数据) 响应协议同样包含四个部分: 状态行(协议版本、状态码、状态描述) 响应头(内容类型、长度、时间等) 空白行(分隔响应头和响应体) 响应体(响应的具体内容) 文章还详细说明了常见状态码的含义,如200

u011488477的博客 662

HttpServlet介绍以及源码分析

d一、HttpServlet 是专门为 HTTP 协议服务的,比 GenericServlet 更适合在 HTTP 协议下开发 二、HttpServlet 在 javax.servlet.http.HttpServlet 包下 三、到目前为止我们接触到了哪些接口? javax.servlet.Servlet 核心接口 javax.servlet.ServletConfig Servlet配置信息接口 javax.servlet.ServletCon...

YZG ' BLOG 2051

HttpServlet类 (源码解析)

HttpServlet源码 HttpServlet类继承GenericServlet类,实现Serializable接口。 显式调用了service()方法this.service(request, response);(在类定义的最后)。 package javax.servlet.http; import java.io.IOException; import java.io.Serializable; import java.lang.reflect.Method; import java.t

demo_yo的博客 1863

HttpServlet源码分析与Servlet开发最佳实践

是专门为HTTP协议设计的Servlet类,它提供了处理HTTP请求的特定方法,如doGetdoPostdoPutdoDelete等。通过继承,开发者可以更方便地处理HTTP请求,而不需要手动解析HTTP协议。通过深入分析的源码,我们了解了其工作原理和处理HTTP请求的具体流程。结合Servlet的生命周期和最佳实践,开发者可以更高效地编写符合HTTP协议的Servlet类。遵循这些最佳实践,可以避免常见的405错误,提高代码的可维护性和可扩展性。

xycxycooo的博客 1302

HTTPServlet源码分析

HTTPServlet源码分析 HttpServelt类是专门为HTTP协议准备的。比GenericServlet更加适合HTTP协议下的开发。 HttpServlet在哪个包下? jakarta.servlet.http.HttpServlet 到目前为止我们接触了了servlet规范中的那些接口? jakarta.servlet.Servelt 核心接口 jakarta.s...

weixin_48370579的博客 264
上一篇: UTF-8编码规则(转)
下一篇: HTTP的请求头标签 If-Modified-Since
javaPie
博客等级 码龄16年 1171粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值