Question: /* * Skeleton program for Web Server assignment. * The server dies after handling one request. Fix it * to run indefinitely, handling multiple sequential

/* * Skeleton program for Web Server assignment. * The server dies after handling one request. Fix it * to run indefinitely, handling multiple sequential * requests * * */

import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io.DataOutputStream; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; import java.nio.charset.StandardCharsets;

public class WebServer {

public static void main(String[] args) { /* * Step 1: We need to create a Server that handles the requests from browser. For creating a * java server, we need to find out an unoccupied port. All the ports from 1 to 999 are assigned * to some of the well known application. So, if you want to create your own server, assign the * server port 4 or 5 digit number. For example, in this case I am using 7777 as port number. * Now for creating a server, first we need to create server socket that will listen the port * 7777. */ int port = 7777; ServerSocket server = null; try{ server = new ServerSocket(port); /* * My server is created at this point. Now the server will listen for one client connection. * The server will start listening when you call the accept() method. When the server receives * a client's connection request, the accept() method returns a Socket instance of that * client. */

System.out.println("Server is waiting for a client..."); /*There are six steps in the Web Server assignment. I've pointed out each step and left blank * some steps. You are responsible to complete those steps. */ /* * ===================================================================== * Step 1: create a connection socket when contacted by a client browser * ===================================================================== */ Socket client = server.accept(); System.out.println("Server is connected to a client!"); /* * At this point, a client is connected to the server. Now, we need to read the client's * request. Since the client is a web browser in the assignment and the browser's request * is a HTTP get request, the server will receive a request like below: * This is an example. You might see more or less fields. But that doesn't create any issue, * because we only need the request line (the first line is the request line). * ======================================================================================== GET /wireshark-labs/HTTP-wireshark-file1.html HTTP/1.1 Host: gaia.cs.umass.edu User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*//*;q=0.8 Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate Connection: keep-alive *========================================================================================= * Now, we need to read the client's input stream in order to get the HTTP header request. * We can get the client's input stream by using the getInputSteam() method. */ //Now we will create a buffer reader to read from the input stream BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream())); /* * ===================================================== * Step 2: receive the HTTP request from this connection * ===================================================== */ //All the HTTP Request header content is read here String line = br.readLine(); while((line = br.readLine()).length() != 0){ System.out.println(line); } /* * ======================================================================== * Step 3: parse the request to determine the specific file being requested * ======================================================================== * To do: You are responsible to complete this step */ /* * ============================================================ * Step 4: get the requested file from the server's file system * ============================================================ * To do: You are responsible to complete this step */ /* * ================================================================================================= * Step 5: create an HTTP response message consisting of the requested file preceded by header lines * ================================================================================================= * An example of the HTTP response header is the following: * ======================================================== HTTP/1.1 200 OK Date: Sat, 17 Sep 2016 04:23:38 GMT Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.1e-fips PHP/5.4.16 mod_perl/2.0.9dev Perl/v5.16.3 Last-Modified: Fri, 16 Sep 2016 05:59:01 GMT ETag: "80-53c99a8b5bfcc" Accept-Ranges: bytes Content-Length: 128 Keep-Alive: timeout=5, max=100 Connection: Keep-Alive Content-Type: text/html; charset=UTF-8 *=========================================================== * I am creating a HTTP Response header when the requested file is not existed in the server, * i.e., a Not Found HTTP Response header, with the content 'File Not Found' text. * You are responsible for completing the part when a file present in server file system */ boolean fileExist = false; String responseMsg = ""; if(fileExist){ //Read from the file and generate the HTTP Response message with the file content }else{ responseMsg += "HTTP/1.1 404 Not Found "; responseMsg += "Content-Type: text/html "; responseMsg += " "; responseMsg += "Page Not Found

The request page is not found!

"; } /* * =========================================================================== * Step 6: send the response over the TCP connection to the requesting browser * =========================================================================== * Now in order to send the response back to the client browser, we need to write * the response message to the client's output stream. */ System.out.println(responseMsg); DataOutputStream outToClient = new DataOutputStream(client.getOutputStream()); sendBytes(responseMsg, outToClient); br.close(); outToClient.close(); client.close(); } catch(Exception ex){ ex.printStackTrace(); } } /* * This method is used for writing the content to the output stream. * Uses: * param1: the message you want to write * param2: the data output stream */ private static void sendBytes(String message, OutputStream os) throws Exception{ InputStream is = new ByteArrayInputStream(message.getBytes(StandardCharsets.UTF_8)); byte[] buffer = new byte[1024]; int bytes = 0; while((bytes = is.read(buffer)) != -1){ os.write(buffer, 0, bytes); } }

}

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!