栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在没有web.xml的情况下将Jersey用作JAX-RS实现?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在没有web.xml的情况下将Jersey用作JAX-RS实现?

就如何在没有web.xml的情况下实现应用程序配置而言,@AlexNevidomsky的回答是正确的。您

@ApplicationPath
Application
子类上使用注释。

@ApplicationPath("/api")public class AppConfig extends Application {}

有关部署选项的更多信息,请参见JAX-RS规范-> 2.3发布-> 2.3.2Servlet。

或更常见的是,以Jersey作为实现,我们将进行扩展

ResourceConfig
(extended
Application
)。

@ApplicationPath("api")public class AppConfig extends ResourceConfig {    public AppConfig() {        packages("package.to.scan");    }}

那么这是如何实现的…

首先,并不是所有的Java
EE服务器都使用Jersey。实际上,我唯一知道使用Jersey的是Glassfish和WebLogic。JBoss使用Resteasy。Tom
EE使用CXF。WebSphere使用Apache Wink。这些是我唯一想到的。

所以我想这个问题是“服务器如何知道如何加载JAX-RS应用程序?”

Servlet
3.0引入了可插拔机制,该机制使用

ServletContainerInitializer
。工作原理是,启动Server/ Servlet容器后,它将在jar
meta-INF/services
文件中扫描名为的文件的文件夹
javax.servlet.ServletContainerInitializer
。此文件应包含的一个或多个完全限定的实现名称
ServletContainerInitializer

该接口只有一种方法

void onStartup(java.util.Set<java.lang.Class<?>> c, ServletContext ctx)

Set<Class<?>
会的类的列表,在装修标准
@HandlesTypes
上标注
ServletContainerInitializer
的实现。如果您看泽西岛的实施

@HandlesTypes({ Path.class, Provider.class, Application.class, ApplicationPath.class })public final class JerseyServletContainerInitializer         implements ServletContainerInitializer {

您应该注意到一些熟悉的注释类以及

Application.class
。在扫描时,所有与条件匹配的所有类都将添加到
Set
传递给
onStartup
方法中。

如果您扫描其余的源代码,则将看到所有这些类都已完成所有注册。

Resteasy用途

@HandlesTypes({Application.class, Path.class, Provider.class})public class ResteasyServletInitializer implements ServletContainerInitializer

我不会和别人接触。

您可以看一些资料…

  • JerseyServletContainerInitializer
    源代码
  • ResteasyServletInitializer
    源代码
  • JAX-RS规格


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/452572.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号