Serve from different filenames, add flexibility to handle status messages, pages, and content

main
sigonasr2, Sig, Sigo 3 years ago
parent 80ebd864d9
commit 6cd3a226a9
  1. 2
      sigPlace.java
  2. 37
      sigServer.java

@ -64,7 +64,7 @@ public class sigPlace {
}
System.out.println("Site has been built into the "+OUTDIR+" directory.");
System.out.println("\nStarting web server...");
sigServer server = new sigServer();
new sigServer();
}
private static Set<Path> GetFilesInDir(String directory) {
Path dir = Paths.get(directory);

@ -2,13 +2,11 @@ import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.regex.Pattern;
public class sigServer {
@ -26,13 +24,19 @@ public class sigServer {
String[] splitter = line.split(Pattern.quote(" "));
if (splitter.length==3) {
//This is valid.
if (splitter[0].equals("GET")) { //This is a GET request.
if (splitter[2].equals("HTTP/1.1")||splitter[2].equals("HTTP/2.0")) {
String requestloc = splitter[1];
if (requestloc.equals("/")) {
//Send default directory.
CreateRequest(client,"testfile.html");
CreateRequest(client,"200","OK","testfile.html");
} else {
CreateRequest(client,"200","OK",Paths.get("/", requestloc.replace("/","")).toString());
}
}
} else {
CreateRequest(client,"501","Not Implemented","testfile.html");
}
}
while (!(line=in.readLine()).isBlank()) {
//System.out.println(line);
@ -43,14 +47,31 @@ public class sigServer {
e.printStackTrace();
}
}
private void CreateRequest(Socket client, String string) {
private void CreateRawRequest(OutputStream stream, String statusCode, String statusMsg, String contentType, byte[] content) {
try {
stream.write(("HTTP/1.1 "+statusCode+" "+statusMsg+"\r\n").getBytes());
stream.write(("ContentType: "+contentType+"\r\n").getBytes());
stream.write("\r\n".getBytes());
stream.write(content);
} catch (IOException e) {
e.printStackTrace();
}
}
private void CreateRequest(Socket client, String statusCode, String statusMsg, String string) {
Path file = Paths.get(sigPlace.OUTDIR,string);
try {
OutputStream clientOutput = client.getOutputStream();
clientOutput.write("HTTP/1.1 200 OK\r\n".getBytes());
clientOutput.write(("ContentType: text/html\r\n").getBytes());
clientOutput.write("\r\n".getBytes());
clientOutput.write(Files.readAllBytes(file));
if (statusCode.equals("200")) {
if (Files.exists(file)) {
CreateRawRequest(clientOutput,statusCode,statusMsg,Files.probeContentType(file),Files.readAllBytes(file));
} else {
CreateRawRequest(clientOutput,statusCode,statusMsg,"text/html","We're sorry, your webpage is in another castle!".getBytes());
}
} else {
CreateRawRequest(clientOutput,statusCode,statusMsg,"text/html","We're sorry, your webpage exploded!".getBytes());
}
clientOutput.write("\r\n\r\n".getBytes());
clientOutput.flush();
client.close();

Loading…
Cancel
Save