我从 JavaEE 6中 了解到,它web.xml
是可选的。
因此,如果没有 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
源代码我从JavaEE 6中读到了这一点。 所以如果没有web.xml,我如何告诉应用程序服务器使用Jersey作为JAX-RS规范的实现呢?
TL;DR:将@webservlet(“/find-customers”)放在servlet(通过Tomcat 7部署)的开头并不是将servlet映射到host:port/webproject/find-customers中,即使servlet位于src文件夹中。
null } Pok
问题内容: 我想知道如何在Spring MVC上引导我的应用程序? 我有一个初始化器: 我知道我们为什么需要以及如何使用它来引导应用程序。但是我不明白,如果没有文件(只有),怎么知道应该使用哪个servlet来引导应用程序? 依存关系 我在Spring核心中找到了此类。使用它来引导我的应用程序是否正确? http://docs.oracle.com/javaee/7/api/javax/servl
我知道关于这个问题有很多答案,但我仍然不清楚JAX-RS API(规范)和Jersey框架(参考实现)之间的区别。 我读到: Jersey框架基本上使用com.sun.Jersey.spi.container.servlet.ServletContainer servlet拦截所有传入的请求。正如我们在项目web.xml中配置的那样,所有传入的rest请求都应该由该servlet处理。有一个ini
我知道这可以在Servlet3.0中通过@Webservlet注释实现,在这里您只需分配url模式,而不必在web.xml中进行任何配置。是否有一种方法可以通过编程方式为运行Servlet2.5的应用程序分配servlets url模式? 我正在创建一个库,多个应用程序将依赖于它,并试图使它,以便这些应用程序中的每一个都不必显式配置任何servlet url映射,我正在创建的库中的servlet在