2009-06-11 56 views
-1

嘿亞勒,我有一個wicket-,也是一個服務器相關的問題:檢票編寫自己的基於Java的服務器上

我們建立了一個小服務器用java(是的,我知道,爲什麼要重新發明輪子。 ..當我問了關於wicket-mailing-list的問題時,我得到了很多)....所以我們只是說,這是迫切需要的B/C ...呃...我仍然想不到一個很好的理由,但是我沒有太多可以做的事情......所以我最終得到了這個小服務器來運行servlet ......就我所知,要運行wicket,你需要一個可以運行servlet的服務器...... (至於我缺乏英語,我們只是說:它應該是一個像Tomcat一樣的servlet容器)...現在我有這個非常漂亮的服務器,有沒有人知道我必須做什麼,以便我的檢票口-apps在其上運行?我如何告訴我的服務器它應該運行一個wicket-app?

希望我解釋得很好... 日Thnx提前:)

... DG


OK,一點點源......我這樣做下面的教程:

的HttpServer這裏的 「神奇」 發生了:

while (!shutdown) { 
    // ... all the stuff before 

    //check if this is a request for a servlet or a static resource 
    //a request for a servlet begins with "/servlet/" 
    if (request.getUri().startsWith("/servlet/")) { 
     System.out.println("SERVLET-REQUEST\n\n"); 
     ServletProcessor2 processor = new ServletProcessor2(); 
     processor.process(request, response); 
    } 
    else { 
     System.out.println("STATICRESOURCE-REQUEST"); 
     StaticResourceProcessor processor = new StaticResourceProcessor(); 
     processor.process(request, response); 
    } 
// ... all the stuff after 
} 

現在ServletProcess或:

public class ServletProcessor2 { 

public void process(Request request, Response response) { 

String uri = request.getUri(); 
String servletName = uri.substring(uri.lastIndexOf("/") + 1); 
System.out.println("SERVLETNAME ... " + servletName); 
URLClassLoader loader = null; 

try { 
    // create a URLClassLoader 
    URL[] urls = new URL[1]; 
    URLStreamHandler streamHandler = null; 
    File classPath = new File(Constants.WEB_ROOT); 
    // the forming of repository is taken from the createClassLoader method in 
    // org.apache.catalina.startup.ClassLoaderFactory 
    String repository = (new URL("file", null, classPath.getCanonicalPath() + File.separator)).toString() ; 
    System.out.println("REPOSITORY ... " + repository); 
    // the code for forming the URL is taken from the addRepository method in 
    // org.apache.catalina.loader.StandardClassLoader class. 
    urls[0] = new URL(null, repository, streamHandler); 
    loader = new URLClassLoader(urls); 
} 
catch (IOException e) { 
    System.out.println(e.toString()); 
} 
Class myClass = null; 
try { 
    myClass = loader.loadClass(servletName); 
} 
catch (ClassNotFoundException e) { 
    System.out.println("FEHLER: " + e.toString() + " ... CAUSE: " + e.getCause()); 
    e.printStackTrace(); 
} 

Servlet servlet = null; 
RequestFacade requestFacade = new RequestFacade(request); 
ResponseFacade responseFacade = new ResponseFacade(response); 
try { 
    servlet = (Servlet) myClass.newInstance(); 
    servlet.service((ServletRequest) requestFacade, (ServletResponse) responseFacade); 
} 
catch (Exception e) { 
    System.out.println("Fehler: " + e.toString() + " ... CAUSE: " + e.getCause()); 
    e.printStackTrace(); 
} 
catch (Throwable e) { 
    System.out.println(e.toString()); 
} 

} 
} 
+0

我們如何回答關於您的服務器的問題?你如何在你的服務器上運行一個servlet? – 2009-06-11 11:50:22

回答

3

簡單的答案是,你將需要實現Servlet API。 Wicket文檔似乎沒有說明確切需要的版本,但我相信它至少會達到2.4。不是我推薦你做的工作,做正確的事情是一件困難的事情,而你只是把自己打開到一個痛苦的世界。

如果您需要嵌入服務器,那麼我可能會建議您從jetty開始並對其進行自定義以滿足您的任何要求。 Jetty擁有非常寬鬆的許可證,因此您不必擔心在商業產品中使用,並可以利用其中最好的產品進行擴展。

+0

謝謝你gid,這是我期待的答案......至少「這不容易,更好的做...」 - 一部分......悲傷但真實......謝謝! – doro 2009-06-11 12:13:41

相關問題