首页 > 解决方案 > servletRequest是接口还是类?ServletRequest和HttpServletRequest有什么区别?

问题描述

基本上我想问如果我们有ServletRequest,HttpServletRequest有什么用?如果它用于http协议,那么我们的servlet如何知道请求是httprequest

标签: jakarta-ee

解决方案


两者ServletRequestHttpServletRequest也是 接口 .

ServletRequest代表请求的最通用概念。它对 HTTP 一无所知,因为它被设计为独立于协议。HttpServletRequest扩展它以表示使用特定协议(在这种情况下为 HTTP)进行通信的请求。

具有这些分离是设计选择,这样我们可以通过简单地定义和实现扩展的新请求类型来增强 Servlet 容器可以与其他协议一起使用ServletRequest。由于继承,我们可以重用现有的ServletRequest代码和现有的 Servlet 基础设施来处理这个新协议。

例如,假设您发明了一个Sandeep Protocol优于 HTTP 的协议( ),您可以通过定义和实现SandeepServletRequest扩展来使 servlet 容器支持它ServletRequest

我们的 servlet 怎么知道请求是 httprequest?

这取决于协议的设计方式。例如,在 HTTP 的情况下,HTTP 规范定义的请求应如下所示:

在此处输入图像描述

因此容器可能会检查接收字节的第一行是否包含 HTTP 方法和单词 "HTTP" 。如果是,则将其视为 HTTP 请求并创建一个HttpServletRequest实例。


推荐阅读