جافا: قم بتشغيل خادم HTTP عند الطلب من تطبيقي؟

StackOverflow https://stackoverflow.com/questions/766154

  •  12-09-2019
  •  | 
  •  

سؤال

أريد أن أكتب P2P بسيط اختبار التطبيق الذي يستخدم HTTP كبروتوكول أساسي.
التطبيق له ل اتخاذ قرار بشأن الطلب, ، إذا كان ينبغي أن يكون بمثابة خادم HTTP., أو ك http client..

الطريقة الكلاسيكية التي أعرفها، ستكون لنشر التطبيق على بعض موجود خادم HTTP. ولكن هذه هي الطريقة الخاطئة لقصدي. يجب أن يكون الأمر هو العكس: يتم تشغيل الخادم بواسطة التطبيق (وفقط إذا قرر).

هل هناك طريقة لتنفيذ جزء خادم HTTP على الطلب(دون نشر التطبيق نفسه على الخادم)؟

هل يمكنني أن أفعل ذلك من خلال ربط مكتبات زراعية أو مكتبات Tomcat واستدعاء بعض الأسلوب "الرئيسي"؟

تحرير: يعمل!
لقد حاولت الآن جيتي جنبا إلى جنب مع JAX-RS (جيرسي) بنجاح!
شكرا لكم جميعا.

(فئة الراحة تافهة وتركت)

حزمة my.p2p؛

import com.sun.jersey.spi.container.servlet.*;
import org.mortbay.jetty.*;
import org.mortbay.jetty.servlet.*;

public class Main {
  public static void main(String[] args)
      throws Exception {

    ServletHolder holder = new ServletHolder(ServletContainer.class);

    holder.setInitParameter("com.sun.jersey.config.property.resourceConfigClass",
      "com.sun.jersey.api.core.PackagesResourceConfig");
    holder.setInitParameter("com.sun.jersey.config.property.packages", "my.p2p.rest");

    Server server = new Server(8000);

    Context context = new Context(server, "/", Context.SESSIONS);
    context.addServlet(holder, "/*");
    server.start();
  }
}
هل كانت مفيدة؟

المحلول

يمكنك استخدام جيتي أو بعض خادم HTTP غير قابل للضبط. من موقع Jetty الإلكتروني:

Jetty هو مشروع مفتوح المصدر يوفر خادم HTTP وعميل HTTP و JAVAX.SERVATT حاوية. هذه مكونات Java 100٪ هي كامل المواصفات، المعايير، طباعة القدم الصغيرة، القابلة للتجربة، غير المتزامنة وغير المتزامنة المؤسسة. Jetty هو مرخصة مزدوجة تحت ترخيص Apache 2.0 و / أو Eclipse License 1.0 1.0. Jetty مجاني للاستخدام التجاري والتوزيع تحت شروط أي من هذه التراخيص.

نصائح أخرى

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

نلقي نظرة على الرؤية المشروع. أنها توفر خادم قابلة للضبط، مستقل، وعميل، كلاهما باستخدام نفس api java (الواجهة الموحدة الشهيرة).

سمكة زجاجية، Tomcat أو Servlet API يبدو أن أكثر مبالغة قليلا بالنسبة لي. بلدي 0.02 $ :)

تعديل

عميل

 Client client = new Client(Protocol.HTTP);  
 client.get("http://127.0.0.1").getEntity().write(System.out);  

الخادم

Restlet sayHello = new Restlet() {  
    @Override  
    public void handle(Request request, Response response) {  
        response.setEntity("Hello World!", MediaType.TEXT_PLAIN);  
    }  
};  

new Server(Protocol.HTTP, 80, sayHello).start();  

يتضمن Java 6 خادم ويب مدمج. يمكنك استخدامه مثل:

    HttpServer server = HttpServer.create(new InetSocketAddress(8000), 0);
    server.createContext("/", new HttpHandler() {
        @Override
        public void handle(HttpExchange xchange) throws IOException {
            String response = "This is the response";
            xchange.sendResponseHeaders(200, response.length());
            OutputStream os = xchange.getResponseBody();
            os.write(response.getBytes());
            os.close();
        }
    });
    server.setExecutor(null);
    server.start();

ثم الوصول http: // localhost: 8000 لرؤية ردكم.

هناك المزيد من الأمثلة في Javadoc ل حزمة httpserver.

إذا لم تتمكن من ضمان Java 6، نلقي نظرة على تضمين رصيف 6. وهو ما هو سهل ومضيء إلى حد ما، أي أنك لا تحتاج إلى Webapp بالكامل.

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