servletRequest是一个接口还是一个class?ServletRequest和HttpServletRequest有什么区别?
servletRequest is a interface or a class?what is the difference between ServletRequest and HttpServletRequest?
基本上我想问一下,如果我们有ServletRequest,HttpServletRequest有什么用?如果它用于 http 协议那么我们的 servlet 如何知道请求是 httprequest
ServletRequest 提供基本的 setter 和 getter 方法来请求 Servlet,但它没有指定如何通信。 HttpServletRequest 使用 getters 扩展接口用于 HTTP 通信(这当然是最常见的通信方式,因为 Servlet 主要生成 HTML)。
Servlet 可以部署在 Tomcat-Web 服务器中。 Tomcat 有一个用于处理 HTTP 请求和响应的组件,称为 Coyote。因此,当收到请求时,Coyote 创建一个 HttpServletResponse 和 HttpServletRequest,其中包含请求参数。然后以这两个Object为参数调用Servlet上的handling方法,在这个方法中根据Request-Object修改Response-Object。之后,Coyote 从 HttpServletResponse-Object 创建一个 HTTP-Response 并将其发送回请求者。
所以为了回答你的问题,servlet 知道请求是一个 Http-Request,因为 Request-Parameter 的数据类型是 HttpServletRequest
ServletRequest
和HttpServletRequest
也是接口。
ServletRequest
表示请求的最通用概念。它对 HTTP 一无所知,因为它被设计为独立于协议的。 HttpServletRequest
将其扩展为表示使用特定协议(在本例中为 HTTP)进行通信的请求。
进行这些分离是设计选择,这样我们就可以通过简单地定义和实现扩展 ServletRequest
的新请求类型来增强 Servlet 容器与其他协议的协同工作。由于继承,我们可以重用现有的 ServletRequest
代码和现有的 Servlet 基础设施来处理这个新协议。
例如,假设您发明了一种优于 HTTP 的协议 (Sandeep Protocol
),您可以通过定义和实现扩展 ServletRequest
的 SandeepServletRequest
让 servlet 容器支持它]
how would our servlet know that the request is httprequest?
这取决于协议是如何设计的。例如,在 HTTP 的情况下,HTTP 规范定义请求应如下所示:
因此容器可能会检查接收字节的第一行是否包含 HTTP 方法和单词 "HTTP" 。如果是,它会将其视为 HTTP 请求并创建一个 HttpServletRequest
实例。
基本上我想问一下,如果我们有ServletRequest,HttpServletRequest有什么用?如果它用于 http 协议那么我们的 servlet 如何知道请求是 httprequest
ServletRequest 提供基本的 setter 和 getter 方法来请求 Servlet,但它没有指定如何通信。 HttpServletRequest 使用 getters 扩展接口用于 HTTP 通信(这当然是最常见的通信方式,因为 Servlet 主要生成 HTML)。
Servlet 可以部署在 Tomcat-Web 服务器中。 Tomcat 有一个用于处理 HTTP 请求和响应的组件,称为 Coyote。因此,当收到请求时,Coyote 创建一个 HttpServletResponse 和 HttpServletRequest,其中包含请求参数。然后以这两个Object为参数调用Servlet上的handling方法,在这个方法中根据Request-Object修改Response-Object。之后,Coyote 从 HttpServletResponse-Object 创建一个 HTTP-Response 并将其发送回请求者。
所以为了回答你的问题,servlet 知道请求是一个 Http-Request,因为 Request-Parameter 的数据类型是 HttpServletRequest
ServletRequest
和HttpServletRequest
也是接口。
ServletRequest
表示请求的最通用概念。它对 HTTP 一无所知,因为它被设计为独立于协议的。 HttpServletRequest
将其扩展为表示使用特定协议(在本例中为 HTTP)进行通信的请求。
进行这些分离是设计选择,这样我们就可以通过简单地定义和实现扩展 ServletRequest
的新请求类型来增强 Servlet 容器与其他协议的协同工作。由于继承,我们可以重用现有的 ServletRequest
代码和现有的 Servlet 基础设施来处理这个新协议。
例如,假设您发明了一种优于 HTTP 的协议 (Sandeep Protocol
),您可以通过定义和实现扩展 ServletRequest
的 SandeepServletRequest
让 servlet 容器支持它]
how would our servlet know that the request is httprequest?
这取决于协议是如何设计的。例如,在 HTTP 的情况下,HTTP 规范定义请求应如下所示:
因此容器可能会检查接收字节的第一行是否包含 HTTP 方法和单词 "HTTP" 。如果是,它会将其视为 HTTP 请求并创建一个 HttpServletRequest
实例。