代码之家  ›  专栏  ›  技术社区  ›  Chris K

restlet启动初始化已弃用?

  •  0
  • Chris K  · 技术社区  · 14 年前

    我正试图使用restlet.org库来构建一个RESTful Web界面,我注意到与servlet对应的库不同,它没有对genericservlet.init()的补充。

    除了构建另一个servlet来完成我的启动逻辑之外,是否有任何内置的方法可以避免在第一次请求时构建我的数据库工厂等(以及为了避免多次初始化而必须执行的所有相称的锁定)?

    2 回复  |  直到 14 年前
        1
  •  3
  •   Brad Gardner    14 年前

    您想在servlet容器中运行它吗?如果没有,文档将向您展示如何独立运行它:

    public static void main(String[] args) throws Exception {  
        // Create a new Component.  
        Component component = new Component();  
    
        // Add a new HTTP server listening on port 8182.  
        component.getServers().add(Protocol.HTTP, 8182);  
    
        // Attach the sample application.  
        component.getDefaultHost().attach("/firstSteps",  
                new FirstStepsApplication());  
    
        // Start the component.  
        component.start();
    }  
    

    您当然可以在那里进行初始化。

    如果要使用servlet方法,请尝试编写新的servlet并扩展它们的方法。实现init方法并为超级类调用该方法。

        2
  •  0
  •   Bruno    14 年前

    如果您真的想在servlet环境中这样做,您的webapp中可能有两个servlet:一个用于restlet应用程序/组件,另一个用于初始化,使用 load-on-startup (据我所知,您不必映射到任何URL)。这样,您就不必进行子类划分了。 org.restlet.ext.servlet.ServerServlet . 我认为这可能更容易,因为init servlet只包含 init() ,但这只适用于不依赖要首先初始化的restlet应用程序/组件的情况。

    <context-param>
        <param-name>org.restlet.clients</param-name>
        <param-value>HTTP HTTPS CLAP FILE</param-value>
    </context-param>
    
    <servlet>
        <servlet-name>ExampleInit</servlet-name>
        <servlet-class>example.TestInitServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    
    <servlet>
        <servlet-name>Example</servlet-name>
        <servlet-class>org.restlet.ext.servlet.ServerServlet</servlet-class>
        <init-param>
            <param-name>org.restlet.application</param-name>
            <param-value>example.TestApplication</param-value>
        </init-param>
        <init-param>
            <param-name>org.restlet.autoWire</param-name>
            <param-value>true</param-value>
        </init-param>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>Example</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
    

    或者(或者可能是对其的补充),我倾向于使用JNDI来初始化数据库连接和其他一些配置设置。这也允许我保持相同的配置和加载机制,无论我在webapp中使用restlet独立服务器还是restlet。

    例如,对于servlet容器内的部署(例如jetty或tomcat),我使用容器的JNDI配置,但是对于本地测试(使用独立的restlet应用程序),我使用jetty jndi上下文工厂(您可以从jetty的其余部分获得单独的jar)。