如何让嵌入式servlet引擎急切地实例化servlet?
题
问题很简单,但我已经有点挣扎了。
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。
不隶属于 StackOverflow