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
6, Java SE beri yerleşik bir HTTP Sunucusucom.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.
Java ile basit bir HTTP server oluştur...
Java kullanarak.net.Ateş ve işlemek iç...
Basit bir senaryo bekle kullanarak() h...
Java Temel kimlik Doğrulaması HttpClie...
Java ile JSON kullanarak HTTP POST...