SORU
17 EYLÜL 2010, Cuma


Java kullanarak Java SE server sadece basit bir HTTP API

Orada bir yol oluşturmak için çok temel bir HTTP Sunucusu (destekleyen sadece GET/POST) Java kullanarak sadece Java SE API olmadan kod yazma için el ile ayrıştırma HTTP istekleri ve elle format HTTP yanıtları? Java SE API güzelce HTTP istemci işlevselliği HttpURLConnection içinde saklar, ama orada HTTP Sunucusu işlevi ile bir analog?

Sadece açık olmasını, sorun bende de var bir sürü ServerSocket örnekler gördüm online olduğunu onlar kendi isteği ayrıştırma/yanıt biçimlendirme ve hata işleme, sıkıcı, hata eğilimli, ve amacıyla hazırlanmış kapsamlı, ve deniyorum önlemek için.

Kaçmaya çalışıyorum manuel HTTP örnek olarak manipülasyon:

http://java.sun.com/developer/technicalArticles/Networking/Webserver/WebServercode.html

CEVAP
17 EYLÜL 2010, Cuma


6, Java SE beri yerleşik bir HTTP SunucusuGüneşOracle TOTEM. com.sun.net.httpserver package summary dahil sınıfları özetliyor ve örnekler içerir.

İşte (temel) maçın başlamasına bir örnek dokümanlar göre, sadece Java 6 ''sini' 'run kopyalayabilirsiniz .

package com.stackoverflow.q3732109;

import java.io.IOException;
import java.io.OutputStream;
import java.net.InetSocketAddress;

import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;

public class Test {

    public static void main(String[] args) throws Exception {
        HttpServer server = HttpServer.create(new InetSocketAddress(8000), 0);
        server.createContext("/test", new MyHandler());
        server.setExecutor(null); // creates a default executor
        server.start();
    }

    static class MyHandler implements HttpHandler {
        @Override
        public void handle(HttpExchange t) throws IOException {
            String response = "This is the response";
            t.sendResponseHeaders(200, response.length());
            OutputStream os = t.getResponseBody();
            os.write(response.getBytes());
            os.close();
        }
    }

}

Onların örnek response.length() Bölüm kötü olduğunu olması gerektiğini kaydetti, response.getBytes().length olmalıydı. O zaman bile, getBytes() yöntemi açıkça size daha sonra yanıt başlığında belirtin hangi karakter kümesi belirtmek gerekir. Ne yazık ki, yeni başlayanlar için yanıltıcı olsa da, sonuçta sadece temel başlangıç bir örnek.

Çalıştırmak ve http://localhost:8000/test gidin ve aşağıdaki yanıtı görürsünüz.

Bu yanıttır


com.sun.* sınıfları kullanarak gibi, bu, bazı geliştiriciler düşündüğünün tam aksine, kesinlikle iyi bilinen SSS Why Developers Should Not Write Programs That Call 'sun' Packages tarafından yasak olduğunu unutmayın. Bu SSS kaygılar sun.* paket (sun.misc.BASE64Encoder) için dahili kullanım ile Oracle TOTEM (hangi nedenle öldürmek uygulamanızı çalıştırdığınızda üzerinde farklı TOTEM), com.sun.* paketi. Sun/Oracle da sadece Apache gibi her şirket gibi ve benzerleri gibi kendilerini SE API Java üzerine yazılım geliştirmek. com.sun.* sınıfları kullanarak bir ilgilendiriyorsa (ama yasak) önerilmezuygulamaÖnemli olan (impl Java EE), mojarra bağlamda OLUMSUZLUK impl), Jersey (JAX-RS impl), vb gibi belirli bir Java API.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • MrRandomSong

    MrRandomSong

    29 Kasım 2009
  • sk8ingis4me

    sk8ingis4me

    16 Mart 2006
  • ThreadBanger

    ThreadBanger

    2 Mart 2007