我正在使用Restlet,GAE和Eclipse开发一个应用程序。哎呀,我明白了:
公共类MainRestletApplication扩展了Application {
public MainRestletApplication()
{
//init code?
}
@Override
public Restlet createInboundRoot() {
Router router = new Router(getContext());
router.attach("/v1/mainstatus",MainStatus.class);
router.attach("/v1/game/{id}/result",GameResult.class);
return router;
}
}
和此:
<servlet>
<servlet-name>RestletServlet</servlet-name>
<servlet-class>org.restlet.ext.servlet.ServerServlet</servlet-class>
<init-param>
<param-name>org.restlet.application</param-name>
<param-value>com.example.MainRestletApplication
</param-value>
</init-param>
</servlet>
<!-- Catch all requests -->
<servlet-mapping>
<servlet-name>RestletServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
那么,我可以在哪里设置一个方法来初始化Web服务,ergo,一些代码只在应用程序启动时启动一些数据(一次),而不是第一次调用时。
由于
答案 0 :(得分:2)
你是否使用Restlet,或者不使用AppEngine,你可以在web.xml中的任何servlet环境中设置一个上下文监听器,如下所示:
<listener>
<listener-class>
example.ServletContextExample
</listener-class>
</listener>
实现这一点;
public class ServletContextExample implements ServletContextListener{
ServletContext context;
public void contextInitialized(ServletContextEvent contextEvent) {
System.out.println("Context Created");
context = contextEvent.getServletContext();
// set variable to servlet context
context.setAttribute("TEST", "TEST_VALUE");
}
public void contextDestroyed(ServletContextEvent contextEvent) {
context = contextEvent.getServletContext();
System.out.println("Context Destroyed");
}
}
当启动GAE上的实例时,将在执行调用之前执行init代码;另一方面,由于必须处理呼叫,因此最有可能启动新实例。鸡肉和鸡蛋的故事......
答案 1 :(得分:0)
为此,您可以覆盖com.example.MainRestletApplication类的start()方法。它的生命周期与包装器RestletServlet同步。