본문 바로가기

JAVA

HttpServer를 이용한 JAVA 서버

- com.sun.net.httpserver.HttpServer 를 이용한 JAVA 서버 

: GET 또는 POST 방식으로 전송시 해당 파라메터를 받아서 문자열 형태로 리턴하는 서버 구성


> 포트 및 핸들러 설정


public class HttpConnection {

private int port = 9000;

HttpServer server = null;

// 서버 연결 및 Context 설정

public HttpConnection() {

try {

server = HttpServer.create(new InetSocketAddress(port),0);

server.createContext("/rg", new HttpGetHandler());

server.createContext("/rp", new HttpPostHandler());

server.setExecutor(null);

server.start();

System.out.println("서버 시작");

} catch (IOException e) {

e.printStackTrace();

System.out.println("서버 연결 실패");

}

}

}


> URL에서 파라메터를 가져오기 위한 클래스 생성


public class UriParser {

public UriParser() {}

public void parseQuery (String query, Map<String, Object> parameters) throws UnsupportedEncodingException {

if (query != null) {

String[] pairs = query.split("[&]");

for (String pair : pairs) {

String param[] = pair.split("=");

String key = null;

String value = null;

if (param.length > 0) {

key = URLDecoder.decode(param[0], System.getProperty("file.encoding"));

}

if (param.length > 1) {

value = URLDecoder.decode(param[1], System.getProperty("file.encoding"));

}

if (parameters.containsKey(key)) {

Object obj = parameters.get(key);

if (obj instanceof List<?>) {

List<String> values = new ArrayList<String>();

values.add(value);

} else if (obj instanceof String) {

List<String> values = new ArrayList<String>();

values.add((String) obj);

values.add(value);

parameters.put(key, values);

}

} else {

parameters.put(key, value);

}

}

}

}

}


> GET 방식으로 요청시 처리


public class HttpGetHandler implements HttpHandler{


@Override

public void handle(HttpExchange arg) throws IOException {

System.out.println("request method Get");

arg.getResponseHeaders().add("Access-Control-Allow-Origin", "*");


Map<String, Object> parameters = new HashMap<String, Object>();

URI requestedUri = arg.getRequestURI();

String query = requestedUri.getRawQuery();

UriParser uriParser = new UriParser();

uriParser.parseQuery(query, parameters);

String response = "";

for (String key : parameters.keySet()) {

response += key + " = " + parameters.get(key) + "\n";

}

System.out.println("response : " + response);

arg.sendResponseHeaders(200, response.length());

OutputStream os = arg.getResponseBody();

os.write(response.toString().getBytes());

os.close();

}

}


> POST 방식으로 요청시 처리


public class HttpPostHandler implements HttpHandler{

@Override

public void handle(HttpExchange arg) throws IOException {

System.out.println("request method Post");

arg.getResponseHeaders().add("Access-Control-Allow-Origin", "*");

Map<String, Object> parameters = new HashMap<String, Object>();

InputStreamReader isr = new InputStreamReader(arg.getRequestBody(), "utf-8");

BufferedReader br = new BufferedReader(isr);

String query = br.readLine();

UriParser uriParse = new UriParser();

uriParse.parseQuery(query, parameters);

String response = "";

for (String key : parameters.keySet()) {

response += key + "=" + parameters.get(key) + ",   ";

}

System.out.println("response : " + response);

arg.sendResponseHeaders(200, response.length());

OutputStream os = arg.getResponseBody();

os.write(response.toString().getBytes());

os.close();

}

}