关于java:如何使嵌入式servlet引擎热切地实例化servlet?

关于java:如何使嵌入式servlet引擎热切地实例化servlet?

How to make embedded servlet engine instantiate servlets eagerly?

问题很简单,但是我已经在挣扎了。

1
2
3
4
5
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选项对您不起作用。到底注入了什么?我不确定这是否会对您有帮助,因为它与贾斯汀在上面的写法非常相似,但是如果您这样做,Jetty会进行实际的实例化。

1
2
3
4
5
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,"/");

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

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

这里以Jetty 6为例。我认为它也适用于Jetty7。


推荐阅读