2011-11-23 71 views
4

我有一個的Restlet(2.0.10)應用程序,我開始用下面的代碼:語境的Restlet應用的是空使用內部的Restlet服務器

public static void main(final String[] args) { 
    try { 
     // Create a new Component 
     final Component component = new Component(); 

     // Add a new HTTP server listening on port 8182 
     component.getServers().add(Protocol.HTTP, SERVER_PORT); 

     // Add a client protocol connector for static files 
     component.getClients().add(Protocol.FILE); 

     // Attach the sample application. 
     component.getDefaultHost().attach("/myApp", new MyApplication(Context.getCurrent())); 

     // Start the component. 
     component.start(); 

    } catch (Exception e) { 
     LOGGER.error(e); 
    } 

} 

現在我所需要的應用程序的根(即/對myApp)的內部該應用程序,我嘗試這種根據Java accessing ServletContext from within restlet Resource獲得:

Client serverDispatcher = context.getServerDispatcher(); 
ServletContext servletContext = (ServletContext)serverDispatcher.getContext().getAttributes() 
        .get("org.restlet.ext.servlet.ServletContext"); 
String contextPath = servletContext.getContextPath(); 

這同時部署我的應用程序到Tomcat服務器工作完全正常,但只要我使用組件啓動服務器如上圖所示,我的背景是始終爲空。有人可以告訴我如何使用restlets內部服務器功能獲得正確初始化的上下文嗎?

回答

2

似乎邏輯。

你想要一個servlet上下文,但是你沒有在servlet容器中運行,所以servlet上下文是NULL。

在執行component.start()時,您正在使用Restlet連接器來服務HTTP/HTTPS請求,而不是像Tomcat這樣的servlet容器。

1

你需要拿起從Component類上下文:

component.getDefaultHost().attach("/myApp", 
    new MyApplication(component.getContext().createChildContext()); 

這將只是給你的Restlet範圍內,但Servlet上下文仍然無法使用,因爲這是一個獨立的Java應用程序。