blu*_*ote 10 java servlets jax-rs
我一直在读,JAX-RS是建立在servlet之上的.这是真的,还是只是意味着它是一个更高级别的组件?如果是,那怎么办?JAX-RS是否创建了一个servlet来解析请求并手动初始化带@Path注释的类并将修改后的参数传递给它们?JSR似乎没有指定这一点,并且提及它的书籍都没有涉及任何细节.
注意:我在部署JAX或servlet方面没有问题,我只是对细节很好奇,因为它可以更好地理解Web容器的工作方式.
我一直在读,JAX-RS是建立在servlet之上的.这是真的,
简单地说,是的,JAX-RS规范是建立在Servlet之上的,任何其他部署方法(如@Jilles van Gurp所提到的)都是特定于实现的.
JAX-RS是否创建一个servlet来解析请求并手动初始化@Path注释类并将修改后的参数传递给它们?
JAX-RS什么都不做.它是实现入口点servlet的实现(例如Jersey,RESTEasy,CXF).实现是否需要显式解析请求?不,不是全部.大部分内容由servlet容器处理.主要是实现只需要解析请求体(因为"请求"意味着不仅仅是正文,例如URL,标题).
基本上,与JAX-RS相关的所有内容都由实现处理.除了传递HttpServletRequest和HttpServletResponse之外,servlet容器与任何东西都没有任何关系,就像你要实现自己的servlet一样.如果你要创建自己的JAX-RS实现,那么传递HttpServletRequest(Response)的servlet就是请求入口点,其他一切都在你身上.
因为"请求"不仅仅意味着身体,例如URL
不好的例子.实际上,JAX-RS实现将解析URL以获取路径参数和查询参数.虽然Servlet容器将解析URL并将查询参数添加到HttpServletRequest参数映射,但该映射还具有表单POST参数,因此实现也需要自己解析查询参数.
Jax rs 并不真正直接使用或依赖 servlet,但它通常由实现它的框架在它之上实现。在这种情况下,您的应用程序用一个 servlet 包装,该 servlet 将传入的请求委托给您的 jax rs 端点,并且整个事情都部署在一个 servlet 容器中,例如 tomcat 或 jetty。
但是,例如 jersey(参考实现)可以在独立服务器中运行而无需 servlet 包装器。为此,我们使用 grizzly 作为容器。我们的应用程序中没有 servlet 容器,我们使用 grizzly 容器代替。当然,grizzly 容器提供了一个非常相似的执行模型,但您不需要一个完整的应用程序服务器来运行它。去这里了解更多关于灰熊的细节
| 归档时间: | 
 | 
| 查看次数: | 1504 次 | 
| 最近记录: |