[PC] Web Server Programming

2020. 6. 5. 00:43
package kr.ac.cnu.computer;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.nio.file.Paths;
public class Response extends Thread {
	private Socket client;
	public Response(Socket client) {
		// TODO: client 지정
		this.client = client;
	}
	@Override
	public void run() {
		BufferedReader bufferedReader = null;
		PrintWriter printWriter = null;
		try {
			// TODO:
			bufferedReader = new BufferedReader(new InputStreamReader(this.client.getInputStream()));
			String line = bufferedReader.readLine();
			String url = getUrl(line);
			String uri = getUri(url);
			String staticResource = getStaticResource(uri);
			String responseHeaders = getResponseHeaders(staticResource.getBytes().length);
			printWriter = new PrintWriter(new OutputStreamWriter(client.getOutputStream()));
			printWriter.write(responseHeaders);
			printWriter.write("\r\n");
			printWriter.write(staticResource);
			printWriter.flush();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if (printWriter != null) {
					printWriter.close();
				}
				if (bufferedReader != null) {
					bufferedReader.close();
				}
				if (this.client != null) {
					client.close();
				}
			} catch (Exception e) {
			}
		}
	}
	private static final String WEB_ROOT = "C:\\project";
	public String getResponseHeaders(int size) {
		StringBuffer headers = new StringBuffer("");
		headers.append("HTTP/1.1 200 OK\r\n");
		headers.append("headers.append(\"Host: localhost\"\r\n");
		headers.append("Content-Length: " + size + "\r\n");
		headers.append("Content-Type: text/html;charset=UTF-8\r\n");
		// TODO: 과제 문서에 나온 양식대로 응답 생성
		return headers.toString();
	}
	public String getUrl(String line) {
		return line.split("[ ]")[1];
	}
	public String getUri(String url) {
		System.out.println("---->" + url);
		return url.substring(url.lastIndexOf("/") + 1);
	}
	public String getStaticResource(String uri) throws IOException {
		StringBuffer html = new StringBuffer("");
		try (BufferedReader bufferedReader = new BufferedReader(new FileReader(Paths.get(WEB_ROOT, uri).toFile()))) {
			String line = null;
			while ((line = bufferedReader.readLine()) != null) {
				html.append(line).append("\r\n");
			}
		}
		return html.toString();
	}
}

간단하게 Java로 웹 서버를 프로그래밍하고 결과를 확인하는 것을 해 보았다.

세 가지의 코드가 있지만, 그 중에서 url과 uri를 읽어와서 client별로 응답을 해주는 response에 대한 코드만 첨부해본다.

주소 파싱의 문제로 인해 약간의 오류가 뜨는 것 같지만 정상적으로 서버가 작동하여 원하는 화면을 결과로 띄워주었다.

'Undergraduate Records' 카테고리의 다른 글

[React] 계산기 만들기  (0) 2020.06.09
[PL] 인터프리터 콘솔 구현  (0) 2020.06.06
[ITE] Interview 준비하기  (0) 2020.06.04
[OS] 라즈베리 파이를 이용한 LED 제어  (0) 2020.06.02
[PL] interpreter 구현하기  (0) 2020.05.29

BELATED ARTICLES

more