我一直在读到 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/