From f7c49cd97689cf8991e77c5bf9b3bbd6ec3d9394 Mon Sep 17 00:00:00 2001 From: Anishmod Date: Thu, 2 Feb 2023 16:36:43 -0700 Subject: [PATCH 1/4] Hello world project updated and ready --- .gitignore | 1 + Circles/build.xml | 0 HelloWorld/src/edu/nmsu/cs/helloworld/helloworld.java | 7 +++++++ Questions/p1Questions.txt | 0 Questions/p2Questions.txt | 0 README.md | 3 +++ SimpleWebServer/build.xml | 0 7 files changed, 11 insertions(+) create mode 100644 Circles/build.xml create mode 100644 HelloWorld/src/edu/nmsu/cs/helloworld/helloworld.java create mode 100644 Questions/p1Questions.txt create mode 100644 Questions/p2Questions.txt create mode 100644 SimpleWebServer/build.xml diff --git a/.gitignore b/.gitignore index 79fbb028..c884b9fd 100644 --- a/.gitignore +++ b/.gitignore @@ -29,3 +29,4 @@ # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml hs_err_pid* /.metadata/ +/bin/ diff --git a/Circles/build.xml b/Circles/build.xml new file mode 100644 index 00000000..e69de29b diff --git a/HelloWorld/src/edu/nmsu/cs/helloworld/helloworld.java b/HelloWorld/src/edu/nmsu/cs/helloworld/helloworld.java new file mode 100644 index 00000000..89d7952d --- /dev/null +++ b/HelloWorld/src/edu/nmsu/cs/helloworld/helloworld.java @@ -0,0 +1,7 @@ +package edu.nmsu.cs.helloworld; + +public class helloworld { + public static void main(String[] args) { + System.out.println("Hello World"); + } +} diff --git a/Questions/p1Questions.txt b/Questions/p1Questions.txt new file mode 100644 index 00000000..e69de29b diff --git a/Questions/p2Questions.txt b/Questions/p2Questions.txt new file mode 100644 index 00000000..e69de29b diff --git a/README.md b/README.md index 685238c5..b1d35643 100644 --- a/README.md +++ b/README.md @@ -9,3 +9,6 @@ This assignment relies on the Coverage programs. ## Program 4 This assignment relies on the Circles programs. + +## user ID +Anishmod diff --git a/SimpleWebServer/build.xml b/SimpleWebServer/build.xml new file mode 100644 index 00000000..e69de29b From 0e182d8715f0a8076b2f4922ca6e59c3814b1998 Mon Sep 17 00:00:00 2001 From: Anishmod Date: Sat, 29 Apr 2023 00:06:04 -0700 Subject: [PATCH 2/4] Program 1 complete. The webserver displays "404 Not Found" for invalid local address and displays test.HTML contents when requested. Build file has been made using help of apache tutorial and copydir from google. Code runs on use of ant and ant run commands. --- SimpleWebServer/build.xml | 16 ++ SimpleWebServer/resources/res/acc/test.html | 7 + .../src/edu/nmsu/cs/webserver/WebServer.java | 64 +++----- .../src/edu/nmsu/cs/webserver/WebWorker.java | 144 +++++++++++------- 4 files changed, 136 insertions(+), 95 deletions(-) create mode 100644 SimpleWebServer/resources/res/acc/test.html diff --git a/SimpleWebServer/build.xml b/SimpleWebServer/build.xml index e69de29b..5c25ded2 100644 --- a/SimpleWebServer/build.xml +++ b/SimpleWebServer/build.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SimpleWebServer/resources/res/acc/test.html b/SimpleWebServer/resources/res/acc/test.html new file mode 100644 index 00000000..3bc5cf19 --- /dev/null +++ b/SimpleWebServer/resources/res/acc/test.html @@ -0,0 +1,7 @@ + + + + +

Hello world, the current date is: . The server is: .

+ + \ No newline at end of file diff --git a/SimpleWebServer/src/edu/nmsu/cs/webserver/WebServer.java b/SimpleWebServer/src/edu/nmsu/cs/webserver/WebServer.java index 0bfe882d..bb77dd8a 100644 --- a/SimpleWebServer/src/edu/nmsu/cs/webserver/WebServer.java +++ b/SimpleWebServer/src/edu/nmsu/cs/webserver/WebServer.java @@ -15,49 +15,38 @@ import java.net.ServerSocket; import java.net.Socket; -public class WebServer -{ - private ServerSocket socket; +public class WebServer { + private ServerSocket socket; - private boolean running; + private boolean running; /** * Constructor **/ - private WebServer() - { + private WebServer() { running = false; } /** - * Web server starting point. This method does not return until the server is finished, so perhaps - * it should be named "runServer" or something like that. + * Web server starting point. This method does not return until the server is + * finished, so perhaps it should be named "runServer" or something like that. * - * @param port - * is the TCP port number to accept connections on + * @param port is the TCP port number to accept connections on **/ - private boolean start(int port) - { + private boolean start(int port) { Socket workerSocket; WebWorker worker; - try - { + try { socket = new ServerSocket(port); - } - catch (Exception e) - { + } catch (Exception e) { System.err.println("Error binding to port " + port + ": " + e); return false; } - while (true) - { - try - { + while (true) { + try { // wait and listen for new client connection workerSocket = socket.accept(); - } - catch (Exception e) - { + } catch (Exception e) { System.err.println("No longer accepting: " + e); break; } @@ -71,38 +60,29 @@ private boolean start(int port) /** * Does not do anything, since start() never returns. **/ - private boolean stop() - { + private boolean stop() { return true; } /** - * Application main: process command line and start web server; default port number is 8080 if not - * given on command line. + * Application main: process command line and start web server; default port + * number is 8080 if not given on command line. **/ - public static void main(String args[]) - { + public static void main(String args[]) { int port = 8080; - if (args.length > 1) - { + if (args.length > 1) { System.err.println("Usage: java Webserver "); return; - } - else if (args.length == 1) - { - try - { + } else if (args.length == 1) { + try { port = Integer.parseInt(args[0]); - } - catch (Exception e) - { + } catch (Exception e) { System.err.println("Argument must be an int (" + e + ")"); return; } } WebServer server = new WebServer(); - if (!server.start(port)) - { + if (!server.start(port)) { System.err.println("Execution failed!"); } } // end main diff --git a/SimpleWebServer/src/edu/nmsu/cs/webserver/WebWorker.java b/SimpleWebServer/src/edu/nmsu/cs/webserver/WebWorker.java index 78bba687..44b1e8eb 100644 --- a/SimpleWebServer/src/edu/nmsu/cs/webserver/WebWorker.java +++ b/SimpleWebServer/src/edu/nmsu/cs/webserver/WebWorker.java @@ -20,73 +20,89 @@ **/ import java.io.BufferedReader; +import java.io.FileInputStream; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.Socket; import java.text.DateFormat; import java.util.Date; +import java.util.StringTokenizer; import java.util.TimeZone; -public class WebWorker implements Runnable -{ +public class WebWorker implements Runnable { private Socket socket; + private boolean exist = false; + private FileInputStream in; + private String fileName; /** * Constructor: must have a valid open socket **/ - public WebWorker(Socket s) - { + public WebWorker(Socket s) { socket = s; } /** - * Worker thread starting point. Each worker handles just one HTTP request and then returns, which - * destroys the thread. This method assumes that whoever created the worker created it with a - * valid open socket object. + * Worker thread starting point. Each worker handles just one HTTP request and + * then returns, which destroys the thread. This method assumes that whoever + * created the worker created it with a valid open socket object. **/ - public void run() - { - System.err.println("Handling connection..."); - try - { - InputStream is = socket.getInputStream(); - OutputStream os = socket.getOutputStream(); + public void run() { + System.err.println("Handling connection..."); // prints to command line when run + try { + InputStream is = socket.getInputStream(); // used for Input + OutputStream os = socket.getOutputStream(); // used for output readHTTPRequest(is); writeHTTPHeader(os, "text/html"); writeContent(os); os.flush(); - socket.close(); + socket.close(); // closes socket + in.close(); // closes File Input Stream + } catch (Exception e) { + System.err.println("Output error: " + e); // prints to command line when there is an error } - catch (Exception e) - { - System.err.println("Output error: " + e); - } - System.err.println("Done handling connection."); + System.err.println("Done handling connection."); // prints to command line before program is closed return; } /** * Read the HTTP request header. **/ - private void readHTTPRequest(InputStream is) - { - String line; + private void readHTTPRequest(InputStream is) { + String line = ""; BufferedReader r = new BufferedReader(new InputStreamReader(is)); - while (true) - { - try - { + int fileCheck = 1; + // while running this is constantly checking for new http request headers + while (line.length() == 0) { + try { while (!r.ready()) Thread.sleep(1); + // saves the HTTP path into string variable line line = r.readLine(); + // checks for a filepath + if (fileCheck > 0) { + // seperates the line into tokens + StringTokenizer token = new StringTokenizer(line); + token.nextToken(); + // goes through tokens to build the file name that will be accessed saves to + // fileName + fileName = token.nextToken(); + fileName = "." + fileName; + in = null; + exist = true; + // open the html file that was built + try { + in = new FileInputStream(fileName); + } catch (Exception fileNotFound) { + exist = false; + } + fileCheck--; + } System.err.println("Request line: (" + line + ")"); - if (line.length() == 0) - break; - } - catch (Exception e) - { + } // end try + catch (Exception e) { System.err.println("Request error: " + e); break; } @@ -97,42 +113,64 @@ private void readHTTPRequest(InputStream is) /** * Write the HTTP header lines to the client network connection. * - * @param os - * is the OutputStream object to write to - * @param contentType - * is the string MIME content type (e.g. "text/html") + * @param os is the OutputStream object to write to + * @param contentType is the string MIME content type (e.g. "text/html") **/ - private void writeHTTPHeader(OutputStream os, String contentType) throws Exception - { + private void writeHTTPHeader(OutputStream os, String contentType) throws Exception { Date d = new Date(); DateFormat df = DateFormat.getDateTimeInstance(); df.setTimeZone(TimeZone.getTimeZone("GMT")); - os.write("HTTP/1.1 200 OK\n".getBytes()); + if (exist) { + os.write("HTTP/1.1 200 OK\n".getBytes()); + } else { + os.write("HTTP/1.1 404 File Not Found\n".getBytes()); + } os.write("Date: ".getBytes()); os.write((df.format(d)).getBytes()); os.write("\n".getBytes()); - os.write("Server: Jon's very own server\n".getBytes()); - // os.write("Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT\n".getBytes()); - // os.write("Content-Length: 438\n".getBytes()); + os.write("Server: Anish's very own server\n".getBytes()); os.write("Connection: close\n".getBytes()); os.write("Content-Type: ".getBytes()); os.write(contentType.getBytes()); - os.write("\n\n".getBytes()); // HTTP header ends with 2 newlines + os.write("\n\n".getBytes()); return; } /** - * Write the data content to the client network connection. This MUST be done after the HTTP - * header has been written out. + * Write the data content to the client network connection. This MUST be done + * after the HTTP header has been written out. * - * @param os - * is the OutputStream object to write to + * @param os is the OutputStream object to write to **/ - private void writeContent(OutputStream os) throws Exception - { - os.write("\n".getBytes()); - os.write("

My web server works!

\n".getBytes()); - os.write("\n".getBytes()); + private void writeContent(OutputStream os) throws Exception { + System.out.println("writeContent"); + if (exist) { + System.out.println("writeContent: File exists"); + byte[] buffer = new byte[1024]; + int bytes = 0; + Date date = new Date(); + // file is used for the html file that will be opened in the browser + String file = ""; + String server = "Anish's Server!"; + + while ((bytes = in.read(buffer)) != -1) { + file = new String(buffer, 0, bytes); + // prints date when date tag is used + if (file.contains("")) { + file = file.replace("", date.toString()); + } + // prints server name when server tag is used + if (file.contains("")) { + file = file.replace("", server); + } + } + + os.write(file.getBytes()); + } else { // if file cannot be open/does not exist this html is opened + os.write("\n".getBytes()); + os.write("

404: File not found.

\n".getBytes()); + os.write("\n".getBytes()); + } } -} // end class +} // end class \ No newline at end of file From 615b215ca230302ade10ff5346e4ec4c94f0f9c5 Mon Sep 17 00:00:00 2001 From: Anishmod <124312004+Anishmod@users.noreply.github.com> Date: Sat, 29 Apr 2023 00:21:16 -0700 Subject: [PATCH 3/4] PROGRAM 1 Program 1 update --- Questions/p1Questions.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Questions/p1Questions.txt b/Questions/p1Questions.txt index e69de29b..020b5520 100644 --- a/Questions/p1Questions.txt +++ b/Questions/p1Questions.txt @@ -0,0 +1,6 @@ +1.4 hours +2.Thought/Design: 3 hours + Programming: 2 hours + Debugging: 2 hours + TOTAL: 7 hours +3.10% accuracy From 2916a87283e7496f1f2c5db2c4419bd6e54552b3 Mon Sep 17 00:00:00 2001 From: Anishmod <124312004+Anishmod@users.noreply.github.com> Date: Thu, 4 May 2023 12:19:50 -0700 Subject: [PATCH 4/4] Update code_formatter-ecologylab-tabs.xml --- meta/code_formatter-ecologylab-tabs.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta/code_formatter-ecologylab-tabs.xml b/meta/code_formatter-ecologylab-tabs.xml index 35b24c1f..cf3ea537 100644 --- a/meta/code_formatter-ecologylab-tabs.xml +++ b/meta/code_formatter-ecologylab-tabs.xml @@ -1,4 +1,4 @@ - +