WebServer.java
import java. io. IOException;
import java. net. ServerSocket;
import java. net. Socket;
public class WebServer {
public static final int HTTP_PORT= 8081 ;
private ServerSocket serverSocket;
public void startServer ( int port) {
try {
serverSocket= new ServerSocket ( port) ;
System. out. println ( "web server startup on " + port) ;
while ( true ) {
Socket socket= serverSocket. accept ( ) ;
new Processor ( socket) . start ( ) ;
}
} catch ( IOException e) {
e. printStackTrace ( ) ;
}
}
public static void main ( String[ ] argv) throws Exception{
WebServer server= new WebServer ( ) ;
if ( argv. length== 1 ) {
server. startServer ( Integer. parseInt ( argv[ 0 ] ) ) ;
} else {
server. startServer ( WebServer. HTTP_PORT) ;
}
}
}
Processor.java
import java. io. *;
import java. net. Socket;
public class Processor extends Thread {
private PrintStream out;
private InputStream input;
public static final String WEB_ROOT= "/home/tqc/IdeaProjects/webServer/home" ;
public Processor ( Socket socket) {
try {
input= socket. getInputStream ( ) ;
out= new PrintStream ( socket. getOutputStream ( ) ) ;
} catch ( IOException e) {
e. printStackTrace ( ) ;
}
}
public void run ( ) {
try {
String fileName= parse ( input) ;
readFile ( fileName) ;
} catch ( IOException e) {
e. printStackTrace ( ) ;
}
}
public String parse ( InputStream input) throws IOException{
BufferedReader in= new BufferedReader ( new InputStreamReader ( input) ) ;
String inputContent= in. readLine ( ) ;
String request[ ] = inputContent. split ( " " ) ;
String method= request[ 0 ] ;
String fileName= request[ 1 ] ;
String httpVersion= request[ 2 ] ;
return fileName;
}
public void readFile ( String fileName) throws IOException{
File file= new File ( Processor. WEB_ROOT+ fileName) ;
if ( ! file. exists ( ) ) {
return ;
}
InputStream in= new FileInputStream ( file) ;
byte content[ ] = new byte [ ( int ) file. length ( ) ] ;
in. read ( content) ;
in. close ( ) ;
out. println ( "HTTP/1.1 200 sendFile" ) ;
out. println ( "Content-length: " + content. length) ;
out. println ( ) ;
out. write ( content) ;
out. flush ( ) ;
out. close ( ) ;
}
}