【问题标题】:RESTLET GAE ECLIPSE initializate methodRESTLET GAE ECLIPSE 初始化方法
【发布时间】:2012-11-22 06:23:56
【问题描述】:

我正在使用 Restlet、GAE 和 Eclipse 开发应用程序。好的,我明白了:

公共类 MainRestletApplication 扩展应用程序 {

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,一些代码仅在应用程序启动时(一次)初始化一些数据,而不是在第一次调用到来时。

谢谢

【问题讨论】:

    标签: eclipse google-app-engine initialization restlet init


    【解决方案1】:

    无论您是否使用 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 代码;另一方面,很可能会启动一个新实例,因为必须处理一个调用。鸡和蛋的故事……

    【讨论】:

      【解决方案2】:

      为此,您可以覆盖 com.example.MainRestletApplication 类的 start() 方法。它的生命周期与包装器 RestletServlet 同步。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-17
        相关资源
        最近更新 更多