سؤال

يا يال، لدي مايكيت وأيضا سؤالا متعلقة بالخادم:

بنينا خادم صغير مع جافا (نعم، وأنا أعلم، لماذا أعيد اختراع العجلة ... لقد حصلت على الكثير عندما سألت السؤال على قائمة البصل الإلكتروني) .... لذلك دعونا نقول فقط، هذا حاجة ماسة ل B / C ... EHM ... ما زلت لا أستطيع التفكير في سبب وجيه، ولكن ليس هناك الكثير يمكنني القيام به حيال ذلك ... لذلك حصلت أخيرا على هذا الخادم الصغير لتشغيل servlets ... بقدر ما أعرف، لتشغيل النصيبيت، فأنت بحاجة إلى خادم يمكن أن يدير الخدم ... (أما بالنسبة إلى عدم وجود اللغة الإنجليزية، فهل نقول فقط: من المفترض أن تكون حاوية Servlet مثل Tomcat) ... الآن هذا الخادم الجميل جدا، هل لدى أي شخص فكرة ما يجب علي فعله، بحيث تشغيل تطبيقات النصيبات الخاص بي؟ كيف أقول الخادم الخاص بي أنه من المفترض أن يقوم بتشغيل تطبيق Wicket؟

آمل أن أشرحت ذلك جيدا ... Thnx مقدما :)

... DG.


حسنا، مصدر بسيط ... لقد فعلت ذلك بعد البرنامج التعليمي:

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
}

الآن 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());
 }

}
}
هل كانت مفيدة؟

المحلول

الجواب البسيط هو أنك سوف تحتاج إلى تنفيذ Servlet API.. وبعد لا يبدو أن وثائق النصيبيت يقول ما الإصدار المطلوب بالضبط ولكن أنا متأكد من أنه سيكون 2.4 على الأقل. لا توصي بعمل كنت أوصي به، إنه لأمر صعب أن نفعله بشكل صحيح وفتح نفسك فقط لعالم من الألم.

إذا كنت بحاجة إلى تضمين خادم، فقد أنصحك بالبدء جيتي وتخصيصه لتلبية أي متطلبات لديك على الإطلاق. يتمتع Jetty بترخيص متساهل للغاية حتى لا تقلق بشأن استخدام منتج تجاري ويمكنك أن يطاق إلى حد كبير مع أفضل منهم.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top