Frage

Hey, ich habe ein Wicket- und auch eine serverbezogene Frage:

Wir haben einen kleinen Server mit Java erstellt (ja, ich weiß, warum das Rad neu erfinden? wird dringend gebraucht b/c ... EHM ... Ich kann mir immer noch keinen guten Grund vorstellen, aber ich kann nicht viel dagegen tun ... also habe ich endlich diesen kleinen Server, um Servlets auszuführen ... Soweit ich weiß, benötigen Sie einen Server, der Servlets ausführen kann ... (Wie für meinen Mangel an Englisch, sagen wir einfach: Es soll ein Servlet -Container wie Tomcat sein) ... jetzt, wo ich habe Dieser sehr schöne Server hat jemand eine Idee, was ich tun muss, damit meine Wicket-Apps darauf laufen? Wie sage ich meinem Server, dass er eine Wicket-App ausführen soll?

Hoffe ich habe es gut erklärt ... danke im Voraus :)

... dg


Ok, eine kleine Quelle ... ich habe das nach einem Tutorial gemacht:

Httpserver, wo die "Magie" passiert:

 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
}

Jetzt der ServletProcessor:

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());
 }

}
}
War es hilfreich?

Lösung

Die einfache Antwort ist, dass Sie die implementieren müssen Servlet API. Die Wicket -Dokumentation scheint nicht zu sagen, was genau die erforderliche Version ist, aber ich bin sicher, dass es mindestens 2,4 sein wird. Kein Job, den ich Ihnen empfehlen würde, es ist schwierig, es richtig zu machen und Sie sich nur für eine Welt des Schmerzes zu öffnen.

Wenn Sie einen Server einbetten müssen Steg und passen Sie es an, um die Anforderungen zu erfüllen. Jetty hat eine sehr zulässige Lizenz, sodass Sie sich keine Sorgen machen müssen, dass Sie in einem kommerziellen Produkt verwenden und so ziemlich mit den Besten von ihnen skalieren können.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top