代码之家  ›  专栏  ›  技术社区  ›  Marcin

如何让嵌入式servlet引擎热切地实例化servlet?

  •  1
  • Marcin  · 技术社区  · 18 年前

    问题很简单,但我已经有点挣扎了。

    Server server = new Server(8080);  
    Context context = new Context(server, "/", Context.NO_SESSIONS);
    context.addServlet(MainPageView.class, "/");
    context.addServlet(UserView.class, "/signup");
    server.start();
    

    这是一段非常标准的代码,你可以在Jetty世界的任何地方找到。我有一个应用程序,它将Jetty嵌入为servlet引擎,并包含一些servlet。

    实例化其中一些servlet需要大量的启动工作。比如说,读取其他配置文件、连接到数据库等。我如何让servlet引擎急切地实例化所有servlet,这样我就可以提前完成所有艰巨的工作,而不是在第一个用户请求时完成?

    2 回复  |  直到 18 年前
        1
  •  2
  •   delux247    18 年前

    我不知道为什么使用Guice make的Justin选项不适合你。到底注射了什么?我不确定这是否会对你有所帮助,因为它与Justin上面写的非常相似,但如果你这样做,Jetty将实际实例化。

    Context context = new Context(server, "/", Context.NO_SESSIONS);
    ServletHolder mainPageViewHolder = new ServletHolder(MainPageView.class);
    // Do this to force Jetty to instantiate the servlet
    mainPageViewHolder.getServlet();  
    context.addServlet(mainPageViewHolder, "/");
    
        2
  •  0
  •   Derrick    8 年前

    使用 Context.addServlet 过载需要 ServletHolder . 伺服支架 是一个接受class或Servlet实例的类。

    Servlet myServlet = new MyServlet();
    ServletHolder holder = new ServletHolder(myServlet);
    context.addServlet(holder, "/");
    

    假设是Jetty 6。我认为它也适用于Jetty 7。