【问题标题】:How to load servlet on startup using Jersey 2.3 with embedded Jetty如何使用带有嵌入式 Jetty 的 Jersey 2.3 在启动时加载 servlet
【发布时间】:2013-11-02 08:16:14
【问题描述】:

我正在使用 Jetty 9.0.6 将我的 Jersey Web 应用程序从 Jersey 1.17.1 迁移到 2.3.1。使用 Jersey 1.17.1,资源将在启动期间加载。但是,几乎相同的代码(如下)仅在请求进入时启动。但我想确保它在启动期间加载(即,调用带注释的资源类的构造函数)。知道有什么问题吗?

public static void startServer(){
    org.eclipse.jetty.server.Server server = new Server();
    org.eclipse.jetty.servlet.ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
    context.setContextPath("/");
    server.setHandler(context);
    org.glassfish.jersey.servlet.ServletContainer servletContainer = new ServletContainer();
    org.eclipse.jetty.servlet.ServletHolder servletHolder = new ServletHolder(servletContainer);
    servletHolder.setInitParameter(ServerProperties.PROVIDER_PACKAGES, "mypackage");
    servletHolder.setInitOrder(0);  // this does not seem to work
    context.addServlet(servletHolder, "/*");
    server.start();
}

大致如下:

package mypackage;

@Singleton
@Path("/foo")
public class MyResource {

    public MyResource(){
        // I want this to be called when I start the server
    }

    @Path("bar")
    public Response receivePayload(@Context HttpServletRequest request, String payloadString){
        // do some stuff
        return response;
    }
}

【问题讨论】:

    标签: java servlets jersey jetty


    【解决方案1】:

    乌力,

    您所指的servletHolder.setInitOrder(0) 与org.glassfish.jersey.servlet.ServletContainer 类有关。 jetty-9.0.6 中 servlet init 排序的单元测试正在通过,所以我假设 jersey ServletContainer 类实际上在启动时按预期加载。

    也许 jersey 在 1.17 和 2.3 版本之间改变了行为,只是懒惰地初始化使用 @Path 注释映射的资源?

    或者也许 jersey 已经更改为使用一些 servlet 3.0 特性进行初始化,例如 ServletContainerInitializers?如果是这种情况,那么您需要从 ServletContextHandler 升级到 WebAppContext,并确保启用对这些 servlet 3.0 功能的支持(请参阅此处有关使用带有嵌入式码头的注释的码头文档:http://www.eclipse.org/jetty/documentation/current/using-annotations-embedded.html

    干杯 一月

    【讨论】:

    • 谢谢,Jan。在这方面,1.17 和 2.3 之间的行为可能确实发生了变化。我最终做的是将代码从构造函数移动到其他地方,这样我就可以很好地进行延迟初始化了。
    猜你喜欢
    • 1970-01-01
    • 2015-02-25
    • 1970-01-01
    • 2012-12-06
    • 1970-01-01
    • 1970-01-01
    • 2012-01-27
    • 1970-01-01
    • 2023-03-20
    相关资源
    最近更新 更多