org.apache.http.HttpRequest 和 javax.servlet.http.HttpServletRequest 有什么区别?

Pan*_*edi 2 rest frameworks servlets httprequest

到目前为止,我的研究表明 javax.servlet.http.HttpServletRequest 是调用常规 Java Servlet 的接口,而 org.apache.http.HttpRequest 通常用于实现 RESTful 服务。我在我的组织中的一个内部可用框架中看到了一个相同的示例,其中 org.apache.http.HttpRequest 是对 RESTful 服务进行编程的接口。

我仍然觉得 org.apache.http.HttpRequest 已经被 Apache 提供来促进 RESTful 实现,因为这个接口没有任何状态代码并且使用传递实体作为响应。

这两个接口之间到底有什么区别,什么时候应该使用另一个接口?

Ste*_*n C 6

HttpServletRequest 是一个服务器端类,它是 Java EE Servlet API 的一部分。您在实现... servlet 时使用它。

在 Java 上下文中,HttpRequest 可以(理论上)是任何东西……因为它不是 Java SE 或 EE 类。但通常它是 Apache Http Components 库中的一个类。这通常用于客户端代码,但也可以在服务器端使用它。

HttpRequest在非 Java 上下文中也有类......)


这两个接口之间到底有什么区别,什么时候应该使用另一个接口?

  • 它们是不相关的接口。(或“完全”无关......如果你愿意:-))

  • HttpServletRequest在您实现 servlet 时使用。

  • HttpRequest在实现 servlet 时不要使用。

“RESTful”是正交的;即您可以使用 servlet 实现 RESTful 服务器,而无需使用 servlet 即可实现非 RESTful 服务器。


我仍然不清楚两者之间的基本区别。为什么有人需要一个HttpRequest摆在首位,如果HttpServletRequest是已经在那里?

因为某人的应用程序可能没有使用标准的 Java EE servlet 框架。如果它们不是,那么它就不是“已经存在”。

这个角度来看,HttpRequest和之间的基本区别在于HttpServletRequest它们是不同框架的一部分,您使用一个或另一个取决于您使用的框架。


为什么我们有两个班级?因为历史。Java EE servlet 最早出现,并在多年前标准化并被广泛使用。Apache HTTP Components 库是后来实现的,以解决 servlet 没有解决的用例;例如,servlet 太重的地方。

  • Oracle 无法更改 Java EE 以替换HttpServletRequest为 ApacheHttpRequest类,因为它会破坏太多客户代码。
  • Apache 无法HttpServletRequest在 HTTP 组件中采用,因为它具有不适合非 servlet 用例的“行李”。

无论哪种方式,它就是它。


你选择哪个框架?你如何选择?这些问题都是 StackOverflow 的题外话。(建议、主观、过于宽泛等)