[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 |