java - JAX-RS 是建立在 Servlet API 之上的吗?如何?

标签 java servlets jax-rs

我一直在读到 JAX-RS 构建在 servlet 之上。这是真的吗,还是仅仅意味着它是一个更高级别的组件?如果是,它是如何工作的? JAX-RS 是否创建一个 servlet 来解析请求并手动初始化 @Path 注释类并将修改后的参数传递给它们? JSR 似乎没有具体说明这一点,提及它的书籍也没有任何细节。

注意:我在部署 JAX 或 servlet 时没有遇到问题,我只是对细节感到好奇,因为它可以让我更好地理解 Web 容器的工作原理。

最佳答案

I've been reading that the JAX-RS is built on top of servlets. Is this literally true,

简单地说,是的,JAX-RS 规范建立在 Servlet 之上,任何其他部署方法(例如 mentioned by @Jilles van Gurp)特定于实现

Does JAX-RS create a servlet which parses the request and manually initializes @Path annotated classes and passes the modified parameters to them?

JAX-RS 不执行任何操作。它是实现入口点 servlet 的实现(例如 Jersey、RESTEasy、CXF)。实现是否需要显式解析请求?不,不是全部。大部分内容由 servlet 容器处理。主要是实现只需要解析请求正文(因为“请求”不仅仅意味着正文,例如 URL、 header )。

基本上,与 JAX-RS 相关的一切都由实现处理。 servlet 容器除了传递 HttpServletRequest 和 HttpServletResponse 之外没有任何作用,就像您要实现自己的 servlet 一样。如果您要制作自己的 JAX-RS 实现,传递给您 HttpServletRequest(Response) 的 servlet 是请求入口点,其他一切由您决定。

编辑

as "request" implies more than just the body, e.g URL

坏榜样。实际上,JAX-RS 实现解析 URL 以获得路径参数和查询参数。虽然 Servlet 容器将解析 URL 并将查询参数添加到 HttpServletRequest 参数映射,但该映射也有表单 POST 参数,因此实现也需要自己解析查询参数。

关于java - JAX-RS 是建立在 Servlet API 之上的吗?如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41397075/

相关文章:

java - 无法在 JAX-RS 中配置映射

java - 流过滤/减少重复条目

Java模式匹配正则表达式

java - 如何以编程方式创建java文件

spring - 简单的 Web 应用程序 (Tomcat) 性能仪表板

java - 一些文本被添加到 JavaScript 的变量中

java - 未找到媒体类型 = 应用程序/json 的 MessageBodyWriter

java - 对于 Integer,XmlElement required = true 不起作用

java - 将 JSON 结构转换为 BasicDBObject

java - 使用 Shiro 的 Servlet 身份验证,是否可以过滤具有某些关键字的 URL?