-
Notifications
You must be signed in to change notification settings - Fork 0
/
WebServer.java
139 lines (115 loc) · 5.82 KB
/
WebServer.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
/**
* ***
**
** USCA ACSC415 *
*/
import java.io.*;
import java.net.*;
import java.util.*;
import java.nio.file.Files;
import java.nio.file.InvalidPathException;
import java.nio.file.Path;
import java.nio.file.Paths;
class WebServerHint {
public static void main(String argv[]) throws Exception {
String clientSentence = " ";
String serverSentence = " ";
ServerSocket welcomeSocket=null;
// Create Server Socket
try {
welcomeSocket= new ServerSocket(80);
while (true) {
// create client socket, blocking if no incoming request.
Socket connectionSocket = welcomeSocket.accept();
System.out.println("Accept connection from" + connectionSocket.getRemoteSocketAddress());
// input stream
Scanner inFromClient = new Scanner(connectionSocket.getInputStream());
// ouput stream
DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream());
// get the message from client
// HTTP Request ----- GET /main.html HTTP/1.1
clientSentence =inFromClient.nextLine();
System.out.println("From Client:" + clientSentence);
//Tokenize this line, check whether it is a valid request.
String[] temp = clientSentence.split(" ");
System.out.println("Http Request Method:" + temp[0]);
System.out.println("File path: "+ temp[1]);
// Get the file if the request is valid
if (!temp[0].contains("GET")){
break;
}
// You need to ignore the request for favicon.ico.
else if (temp[1].equals("/favicon.ico")){
temp[1]=" index.html";
}
// else{
// Otherwise get the name of the file -- temp[1] and send the file requested by client
// I will show an example which opens a pdf file.
try{
Path inFilePath = Paths.get(temp[1].substring(1)); // current directory
// read file into byte arrays (all in memory!!)
byte[] buffer = Files.readAllBytes(inFilePath); // read bytes to a buffer
// construct the response message and send it to client
String requestline = "HTTP/1.1 200 OK\r\n";
String headlines1="";
String headlines2="";
if(temp[1].contains(".pdf")){
headlines1= "Content-Type: application/pdf\r\n";
headlines2= "Content-Length:"+buffer.length+"\r\n\r\n";
}
if(temp[1].contains(".html")){
headlines1= "Content-Type: text/html\r\n";
headlines2= "Content-Length:"+buffer.length+"\r\n\r\n";
}
if(temp[1].contains(".txt")){
headlines1= "Content-Type: text/plain\r\n";
headlines2= "Content-Length:"+buffer.length+"\r\n\r\n";
}
if(temp[1].contains(".jpg")){
headlines1= "Content-Type: image/jpg\r\n";
headlines2= "Content-Length:"+buffer.length+"\r\n\r\n";
}
if(temp[1].contains(".png")){
headlines1= "Content-Type: image/png\r\n";
headlines2= "Content-Length:"+buffer.length+"\r\n\r\n";
}
if(temp[1].contains(".bmp")){
headlines1= "Content-Type: image/bmp\r\n";
headlines2= "Content-Length:"+buffer.length+"\r\n\r\n";
}
if(temp[1].contains(".gif")){
headlines1= "Content-Type: image/gif\r\n";
headlines2= "Content-Length:"+buffer.length+"\r\n\r\n";
}
// send the requestline and headlines
outToClient.writeBytes(requestline+headlines1+headlines2);
// send the entity body
outToClient.write(buffer,0,buffer.length);
outToClient.flush();
}catch(Exception e) {
// send 404 request if the file is not found
// more codes need to be added here.
Path inFilePath = Paths.get("404.html"); // current directory
// read file into byte arrays (all in memory!!)
byte[] buffer = Files.readAllBytes(inFilePath);
String requestline = "HTTP/1.1 404 Not Found\r\n";
String headlines1="Content-Type: text/html\r\n";
String headlines2="Content-Length: "+buffer.length+"\r\n\r\n";
outToClient.writeBytes(requestline+headlines1+headlines2);
System.out.println(requestline+headlines1+headlines2);
outToClient.write(buffer,0,buffer.length);
outToClient.flush();
System.err.println( e.getMessage());
}
// close stream and socket
inFromClient.close();
outToClient.close();
connectionSocket.close();
}
}catch (IOException e) {
System.err.println("Caught Exception " + e.getMessage());
}finally{
if (welcomeSocket !=null ) welcomeSocket.close(); // no need in java 7 above
}
}
}