Question: Don't know how to compile this program This is what was being asked PLEASE READ CAREFULLY In this programming assignment, you will develop a simple

Don't know how to compile this program

This is what was being asked PLEASE READ CAREFULLY

In this programming assignment, you will develop a simple Web server in two steps. In the end, you will have built a multi-threaded Web server that is capable of processing multiple simultaneous service requests in parallel.

You should be able to demonstrate that your Web server is capable of delivering your home page to a Web browser. You will implement a simplified version of HTTP 2.0, as defined in RFC 7540. HTTP 2.0 was made available in May 2015 therefore you should review the RFC. The server will be able to handle multiple simultaneous service requests in parallel. This means that the Web server is multi-threaded. In the main thread, the server listens to a fixed port. When it receives a TCP connection request, it sets up a TCP connection through another port and services the request in a separate thread. To simplify this programming task, we will develop the code in two stages. In the first stage, you will write a multithreaded server that simply displays the contents of the HTTP request message that it receives.

After this program is running properly, you will add the code required to generate an appropriate response. As you are developing the code, you can test your server from a Web browser. But remember that you are not serving through the standard port 80, so you need to specify the port number within the URL that you give to your browser.

For example, if your machine's name is host.someschool.edu, your server is listening to port 6789, and you want to retrieve the file index.html, then you would specify the following URL within the browser: http://host.someschool.edu:6789/index.html If you omit ":6789", the browser will assume port 80 which most likely will not have a server listening on it. When the server encounters an error, it sends a response message with the appropriate HTML source so that the error information is displayed in the browser window.

import java.io.*;

import java.net.*;

import java.util.*;

public final class WebServer

{

public static void main(String argv[]) throws Exception

{

//set the port number

int port = 6789;

//Establish the listen socket.

ServerSocket listenSocket = new ServerSocket(6789);

//Process HTTP service requests in an infinite loop

while (true)

{

//Listen for a TCP connection request

Socket connectionSocket = listenSocket.accept();

//Construct an object to process the HTTP request message.

HttpRequest request = new HttpRequest(connectionSocket);

// Create a new thread to process the request.

Thread thread = new Thread(request);

// Start the thread.

thread.start();

}

}

}

final class HttpRequest implements Runnable

{

final static String CRLF = " ";

Socket socket;

//Constructor

public HttpRequest(Socket socket) throws Exception

{

this.socket = socket;

}

// Implement the run() method of the Runnable interface.

public void run()

{

try {

processRequest();

} catch (Exception e) {

System.out.println(e );

e.printStackTrace();

}

}

private void processRequest() throws Exception

{

//Get a reference to the socket's input and output streams.

InputStream is = socket.getInputStream();

DataOutputStream os = new DataOutputStream(socket.getOutputStream());

//Set up input stream filters.

FilterInputStream fis;

BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));

//Get the request line of the HTTP request message.

String requestLine = br.readLine();

//Display request line.

System.out.println();

System.out.println(requestLine);

// Get and display the header lines

String headerline = null;

while ((headerline = br.readLine()).length() != 0)

{

System.out.println(headerline);

}

//close streams and socket.

//os.close();

//br.close();

//socket.close();

// Extract the filename from the request line.

StringTokenizer tokens = new StringTokenizer(requestLine);

tokens.nextToken(); // skip over the method, which should be "GET"

String fileName = tokens.nextToken();

//Prepend a "." so that file request is within the current directory.

fileName= "." + fileName;

// Open the requested file.

FileInputStream fis1 = null;

boolean fileExists = true;

try {

fis1 = new FileInputStream(fileName);

} catch (FileNotFoundException e) {

fileExists = false;

}

//Construct the response message.

String statusLine = null;

String contentTypeLine = null;

String entityBody = null;

if(fileExists) {

statusLine = "Responding to existing file";

contentTypeLine = "Content-type:" +

contentType( fileName ) + CRLF;

} else {

statusLine = "File doesn't exist ";

contentTypeLine = "no contents ";

entityBody = "" + "Not Found" + "Not Found";

// Send the status line.

os.writeBytes(statusLine);

// Send the content type line.

os.writeBytes(contentTypeLine);

// Send a blank line to indicate the end of the header lines.

os.writeBytes(CRLF);

// Send the entity body.

if (fileExists) {

sendBytes(fis1, os);

fis1.close();

} else {

os.writeBytes(entityBody);

}

}

os.close();

br.close();

socket.close();

}

private static void sendBytes(FileInputStream fis, OutputStream os) throws Exception

{

// Construct a 1K buffer to hold bytes on their way to the socket.

byte[] buffer = new byte[1024];

int bytes = 0;

// Copy requested file into the socket's output stream.

while((bytes=fis.read(buffer)) != -1) {

os.write(buffer, 0, bytes);

}

}

private static String contentType(String fileName)

{

if(fileName.endsWith(".htm") || fileName.endsWith(".html")) {

return "text/html";

}

if(fileName.endsWith(".gif") || fileName.endsWith(".GIF"))

{

return "image/gif";

}

if(fileName.endsWith(".jpeg"))

{

return "image/jpeg";

}

if(fileName.endsWith(".java"))

{

return "java file";

}

if(fileName.endsWith(".sh"))

{

return "bourne/awk";

}

return "application/octet-stream";

}

}

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!