servletRequest是接口还是类?ServletRequest和HttpServletRequest有什么区别?

san*_*pta 2 jakarta-ee

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

Ken*_*han 5

ServletRequest都是HttpServletRequest接口。

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

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

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

我们的 servlet 如何知道该请求是 httprequest?

这取决于协议是如何设计的。例如,对于 HTTP ,HTTP 规范定义的请求应如下所示:

在此输入图像描述

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