我一直在阅读JAX-RS是建立在servlet之上的。这是真的吗,
简单地说,是的,JAX-RS规范是在Servlets之上构建的,任何其他部署方法(例如@Jilles van Gurp提到的)都是特定于实现的。
JAX-RS 是否创建了一个 servlet 来解析请求并手动初始化@Path带注释的类,并将修改后的参数传递给它们?
JAX-RS 不执行任何操作。它是实现(例如 Jersey、RESTEasy、CXF)实现入口点 servlet 的实现。实现是否需要显式解析请求?不,不是全部。大部分内容由 servlet 容器处理。主要是实现只需要解析请求正文(因为“请求”意味着不仅仅是正文,例如URL,标头)。
基本上,与 JAX-RS 相关的所有内容都由实现来处理。servlet 容器除了传递 HttpServletRequest 和 HttpServletResponse 之外,没有任何关系,就像你要实现自己的 servlet 一样。如果您要创建自己的 JAX-RS 实现,那么传递给您的 HttpServletRequest(Response) 的 servlet 就是请求入口点,其他一切都取决于您。
编辑
因为“请求”意味着不仅仅是正文,例如URL
不好的例子。实际上,JAX-RS 实现将解析 URL 以获取路径参数和查询参数。尽管 Servlet 容器将解析 URL 并将查询参数添加到 HttpServletRequest 参数映射中,但该映射也具有表单 POST 参数,因此实现还需要对查询参数进行自己的解析。