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

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,以便我可以预先完成所有艰苦的工作,而不是在第一个用户请求时完成?

有帮助吗?

解决方案

我不知道为什么使用 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, "/");

其他提示

使用 Context.addServlet 过载需要一个 ServletHolder. ServletHolder 是一个接受 Class 或 Servlet 实例的类。

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top