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

Jakarta ee servletRequest是接口还是类?servletRequest和HttpServletRequest有什么区别?,jakarta-ee,Jakarta Ee,基本上我想问如果我们有ServletRequest,HttpServletRequest有什么用?如果它用于http协议,那么我们的servlet如何知道请求是httprequest呢?ServletRequest提供了请求servlet的基本setter和getter方法,但它没有指定如何通信。HttpServletRequest扩展了用于HTTP通信的getter接口(这当然是最常见的通信方式,因为servlet主要生成HTML) servlet可以部署在Tomcat Web服务器中。Tom

基本上我想问如果我们有ServletRequest,HttpServletRequest有什么用?如果它用于http协议,那么我们的servlet如何知道请求是httprequest呢?ServletRequest提供了请求servlet的基本setter和getter方法,但它没有指定如何通信。HttpServletRequest扩展了用于HTTP通信的getter接口(这当然是最常见的通信方式,因为servlet主要生成HTML)

servlet可以部署在Tomcat Web服务器中。Tomcat有一个用于处理HTTP请求和响应的组件,称为Coyote。因此,当请求传入时,Coyote会创建一个HttpServletResponse和HttpServletRequest,并在其中封装请求参数。然后用这两个对象作为参数调用Servlet上的处理方法,在该方法中,响应对象根据请求对象进行修改。之后,Coyote从HttpServletResponse对象创建一个HTTP响应,并将其发送回请求者


为了回答您的问题,servlet知道请求是Http请求,因为请求参数的数据类型是HttpServletRequest,ServletRequest提供了请求servlet的基本setter和getter方法,但它没有指定如何通信。HttpServletRequest扩展了用于HTTP通信的getter接口(这当然是最常见的通信方式,因为servlet主要生成HTML)

servlet可以部署在Tomcat Web服务器中。Tomcat有一个用于处理HTTP请求和响应的组件,称为Coyote。因此,当请求传入时,Coyote会创建一个HttpServletResponse和HttpServletRequest,并在其中封装请求参数。然后用这两个对象作为参数调用Servlet上的处理方法,在该方法中,响应对象根据请求对象进行修改。之后,Coyote从HttpServletResponse对象创建一个HTTP响应,并将其发送回请求者


因此,为了回答您的问题,servlet知道请求是Http请求,因为请求参数的数据类型是HttpServletRequest

ServletRequest
HttpServletRequest
也是接口

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

这是一种设计选择,通过定义和实现扩展
ServletRequest
的新请求类型,我们可以增强Servlet容器与其他协议的协作能力。由于继承,我们可以重用现有的
ServletRequest
代码和现有的Servlet基础结构来处理这个新协议

例如,假设您发明了一种优于HTTP的协议(
Sandeep protocol
),您可以通过定义和实现扩展了
ServletRequest

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

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


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

这两个
ServletRequest
HttpServletRequest
也是接口

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

这是一种设计选择,通过定义和实现扩展
ServletRequest
的新请求类型,我们可以增强Servlet容器与其他协议的协作能力。由于继承,我们可以重用现有的
ServletRequest
代码和现有的Servlet基础结构来处理这个新协议

例如,假设您发明了一种优于HTTP的协议(
Sandeep protocol
),您可以通过定义和实现扩展了
ServletRequest

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

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


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

感谢您回答服务器是否发送HttpServletRequest obj,以及他们为什么调用公共服务方法(在该方法中,他们将请求转换为HttpServletRequest,然后调用受保护的服务方法)虽然他们可以调用httpServlet类的受保护服务方法,该类具有参数HttpServletRequest和HttpServletResponse。@Josef98感谢您回答如果服务器发送HttpServletRequest obj,那么他们为什么调用公共服务方法(在该方法中,他们将请求转换为HttpServletRequest,然后调用受保护服务方法)而它们可以调用httpServlet类的受保护服务方法,该类具有参数HttpServletRequest