기록용~!

아오.....안드로이드에다가 웹서버를 올려서 뭔가를 하려는 걸 구현하려고 하는데, 안드로이드에서는 com.sun.net.httpserver.HttpServer 이 클래스가 없네요ㅠㅠ 필요 없을 것 같아서 뺀 듯ㅠㅠ 전에 찾았던 소스도 다시 못찾겠고.....선호한테 물어봐야겠네....

암튼 초간단 서버 구축 클래스가 있었네요.

import java.io.IOException;
import java.net.InetSocketAddress;
import java.util.concurrent.Executors;

import com.sun.net.httpserver.HttpServer;


public class Test {

	public static void main(String[] args) throws IOException {
		InetSocketAddress addr = new InetSocketAddress(9000);
		HttpServer server = HttpServer.create(addr, 0);
		
		server.createContext("/", new MyHandler());
		server.setExecutor(Executors.newCachedThreadPool());
		server.start();
	}
}

해당포트로 HttpServer.create로 서버 생성하고, 핸들러클래스를 파라메터로 넣으면 저기 핸들러에서 다 처리를 하는 듯하네요.

MyHandler.java

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URI;

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


public class MyHandler implements HttpHandler {

	private String root = "D:/root/";
	
	@Override
	public void handle(HttpExchange exchange) throws IOException {
		String requestMethod = exchange.getRequestMethod();
		if (requestMethod.equalsIgnoreCase("GET")){
			Headers responseHeaders = exchange.getResponseHeaders();
			responseHeaders.set("Content-Type", "text/html");
			URI uri = exchange.getRequestURI();
			System.out.println(uri.getPath());
			OutputStream responseBody = exchange.getResponseBody();
			BufferedReader br = new BufferedReader(new FileReader(root + uri.getPath()));
			exchange.sendResponseHeaders(200, 0);
			int b = 0;
			while((b = br.read()) != -1){
				responseBody.write(b);
			}
			responseBody.close();
		}
	}
}
get 요청인 경우 해당 path에서 파일을 찾아서 그냥 뿌려주는 게 다임 ㅇㅇ
지금셋팅은 http://localhost:9000/index.html을 요청하면  d:/root/index.html 파일을 읽어서 뿌려줌 ㅇㅇ

ps. 생각해보니 파일을 주고받으려고 찾고 있었는데, ftp서버를 찾았어야 했는데......젠장......ㅠㅠ
 
Posted by 머드초보
,