From Woodburn Hall in beautiful Bloomington IN: 

https://www.youtube.com/watch?v=I6eQ78HCGEA

I would like to give you an idea of how do Stages 02, 03.

[schmitmi@silo ~]$ cd c212-workspace/
[schmitmi@silo c212-workspace]$ ls
apache-tomcat-7.0.35  apache-tomcat-7.0.35.tar
[schmitmi@silo c212-workspace]$ cat .tomcat-settings
JAVA_HOME=/usr/lib/jvm/java-1.7.0
export JAVA_HOME

CATALINA_HOME=/u/schmitmi/c212-workspace/apache-tomcat-7.0.35
export CATALINA_HOME

CLASSPATH=.:$CATALINA_HOME/lib/servlet-api.jar
export CLASSPATH
[schmitmi@silo c212-workspace]$ source .tomcat-settings
[schmitmi@silo c212-workspace]$ cd $CATALINA_HOME
[schmitmi@silo apache-tomcat-7.0.35]$ clear
[schmitmi@silo apache-tomcat-7.0.35]$ cd webapps/
[schmitmi@silo webapps]$ ls
docs  examples  host-manager  manager  ROOT
[schmitmi@silo webapps]$ mkdir qotd
[schmitmi@silo webapps]$ pwd
/u/schmitmi/c212-workspace/apache-tomcat-7.0.35/webapps
[schmitmi@silo webapps]$ cd qotd/
[schmitmi@silo qotd]$ mkdir WEB-INF
[schmitmi@silo qotd]$ mkdir WEB-INF/classes
[schmitmi@silo qotd]$ mkdir WEB-INF/src
[schmitmi@silo qotd]$ mkdir lib
[schmitmi@silo qotd]$ cd ..
[schmitmi@silo webapps]$ pwd
/u/schmitmi/c212-workspace/apache-tomcat-7.0.35/webapps
[schmitmi@silo webapps]$ tree qotd/
qotd/
+-- lib
|
+-- WEB-INF
    +-- classes
    |
    +-- src

4 directories, 0 files
[schmitmi@silo webapps]$

I have created a context for the project. 

https://addyosmani.com/resources/essentialjsdesignpatterns/book/

https://www.cs.indiana.edu/classes/c212/fall2016/resources/bchgfn.pdf

https://www.cs.indiana.edu/classes/c212/fall2016/resources/griffin/b.pdf

MVC pattern, we use it for the project 

professional web developers usually work within an MVC framework 

MVC is a composite OO pattern

Steps in the project:

  (a) set up a server 

  (b) create a model and test it (database) 

  (c) implement functionality as a collection of views/controller(s)

[schmitmi@silo webapps]$ pwd
/u/schmitmi/c212-workspace/apache-tomcat-7.0.35/webapps
[schmitmi@silo webapps]$ cd qotd/
[schmitmi@silo qotd]$ ls
WEB-INF
[schmitmi@silo qotd]$ mkdir permanent
[schmitmi@silo qotd]$ cd permanent/
[schmitmi@silo permanent]$ nano -w inventory.txt
[schmitmi@silo permanent]$ ls -l
total 4
-rw------- 1 schmitmi students 434 Nov 28 14:56 inventory.txt
[schmitmi@silo permanent]$ cat inventory.txt
Seneca
Time discovers truth.
Steven Wright
How do you know when you're out of invisble ink?
Marilyn Monroe
It's not true I had nothing on. I had the radio on.
Thomas Neil
Of those who say nothing few are silent.
Oscar Wilde
The only way to get rid of temptation is to yield to it.
Donald J Trump
Who is General Failure and why is he reading my hard disk?
Steven Wright
I almost had a psychic girlfriend but she left me before we met.
[schmitmi@silo permanent]$

I have a text file with quotes (above). 

I create and compile two files that will help me create the database:

[schmitmi@silo src]$ pwd
/u/schmitmi/c212-workspace/apache-tomcat-7.0.35/webapps/qotd/WEB-INF/src
[schmitmi@silo src]$ ls -l
total 8
-rw------- 1 schmitmi students 584 Nov 28 15:01 Four.java
-rw------- 1 schmitmi students 526 Nov 28 15:02 Quote.java
[schmitmi@silo src]$ ls ../classes/
[schmitmi@silo src]$ $JAVA_HOME/bin/javac -d ../classes/ *.java
Picked up _JAVA_OPTIONS: -Xms512m -Xmx512m
[schmitmi@silo src]$ ls ../classes/
qotd
[schmitmi@silo src]$ ls ../classes/qotd/
Four.class  Quote.class
[schmitmi@silo src]$

I create the database by running Four on inventory:

[schmitmi@silo src]$ pwd
/u/schmitmi/c212-workspace/apache-tomcat-7.0.35/webapps/qotd/WEB-INF/src
[schmitmi@silo src]$ ls -l
total 8
-rw------- 1 schmitmi students 584 Nov 28 15:01 Four.java
-rw------- 1 schmitmi students 526 Nov 28 15:02 Quote.java
[schmitmi@silo src]$ ls ../classes/
[schmitmi@silo src]$ $JAVA_HOME/bin/javac -d ../classes/ *.java
Picked up _JAVA_OPTIONS: -Xms512m -Xmx512m
[schmitmi@silo src]$ ls ../classes/
qotd
[schmitmi@silo src]$ ls ../classes/qotd/
Four.class  Quote.class
[schmitmi@silo src]$ clear
[schmitmi@silo src]$ pwd
/u/schmitmi/c212-workspace/apache-tomcat-7.0.35/webapps/qotd/WEB-INF/src
[schmitmi@silo src]$ cd ../classes/
[schmitmi@silo classes]$ tree .
.
└── qotd
    ├── Four.class
    └── Quote.class

1 directory, 2 files
[schmitmi@silo classes]$ $JAVA_HOME/bin/java qotd.Four ../../permanent/inventory.txt
Picked up _JAVA_OPTIONS: -Xms512m -Xmx512m
{0=(0: [Seneca, Time discovers truth.]), 1=(1: [Steven Wright, How do you know when you're out of invisble ink?]), 2=(2: [Marilyn Monroe, It's not true I had nothing on. I had the radio on.]), 3=(3: [Thomas Neil, Of those who say nothing few are silent.]), 4=(4: [Oscar Wilde, The only way to get rid of temptation is to yield to it.]), 5=(5: [Donald J Trump, Who is General Failure and why is he reading my hard disk?]), 6=(6: [Steven Wright, I almost had a psychic girlfriend but she left me before we met.])}
[schmitmi@silo classes]$ ls ../../permanent/
database  inventory.txt
[schmitmi@silo classes]$ ls -l ../../permanent/
total 8
-rw------- 1 schmitmi students 849 Nov 28 15:08 database
-rw------- 1 schmitmi students 434 Nov 28 14:56 inventory.txt
[schmitmi@silo classes]$ file ../../permanent/inventory.txt
../../permanent/inventory.txt: ASCII text
[schmitmi@silo classes]$ file ../../permanent/database
../../permanent/database: Java serialization data, version 5
[schmitmi@silo classes]$

I now have a database. 

I now need to create (and test) a model for this database. 

[schmitmi@silo src]$ pwd
/u/schmitmi/c212-workspace/apache-tomcat-7.0.35/webapps/qotd/WEB-INF/src
[schmitmi@silo src]$ ls -l
total 12
-rw------- 1 schmitmi students  584 Nov 28 15:01 Four.java
-rw------- 1 schmitmi students 1857 Nov 28 15:16 Model.java
-rw------- 1 schmitmi students  526 Nov 28 15:02 Quote.java
[schmitmi@silo src]$ cat Model.java
package qotd;

import java.io.*;
import java.util.*;

public class Model {
  private Model() {
    try {
      this.reset();
    } catch (Exception e) {

    }
  }
  private static Model instance = new Model();
  public static Model getInstance() {
    return instance;
  }
  Integer nextAvailableId = 0;
  Map<Integer, Quote> a;
  String pathToDatabase = "/u/schmitmi/c212-workspace/apache-tomcat-7.0.35/webapps/qotd/permanent/database"; // [1]
  // String pathToTextFile = "/u/dgerman/c212-workspace/apache-tomcat-7.0.35/webapps/0425/permanent/database"; // [2]
  synchronized void reset() throws Exception {
    FileInputStream fis = new FileInputStream(pathToDatabase); // [3]
    ObjectInputStream ois = new ObjectInputStream(fis);
    this.a = (HashMap<Integer, Quote>) ois.readObject();
    ois.close();
    this.nextAvailableId = (this.a.keySet()).size();
  }
  Quote randomQuote() {
    ArrayList<Quote> a = new ArrayList<Quote>();
    for (Integer key : this.a.keySet()) {
      a.add(this.a.get(key));
    }
    return a.get((int)(Math.random() * a.size()));
  }
  Quote retrieveQuote(Integer id) {
    return a.get(id);
  }
  ArrayList<Quote> retrieveAll() {
    ArrayList<Quote> a = new ArrayList<Quote>();
    for (Integer key : this.a.keySet()) {
      a.add(this.a.get(key));
    }
    return a;
  }
  synchronized void delete(Integer id) {
    this.a.remove(id);
  }
  synchronized void addQuote(String author, String quote) {
    Integer id = nextAvailableId++;
    this.a.put(id, new Quote(id, author, quote));
  }
  synchronized void updateQuote(Integer id, Quote quote) {
    this.a.put(id, quote);
  }
  synchronized void save() throws Exception {
    FileOutputStream fout = new FileOutputStream(pathToDatabase);
    ObjectOutputStream oos = new ObjectOutputStream(fout);
    oos.writeObject(this.a);
  }
}
[schmitmi@silo src]$ $JAVA_HOME/bin/javac -d ../classes/ *.java
Picked up _JAVA_OPTIONS: -Xms512m -Xmx512m
Note: Model.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
[schmitmi@silo src]$ tree ../classes/
../classes/
└── qotd
    ├── Four.class
    ├── Model.class
    └── Quote.class

1 directory, 3 files
[schmitmi@silo src]$

I will now set to test my model. 

[schmitmi@silo src]$ pwd
/u/schmitmi/c212-workspace/apache-tomcat-7.0.35/webapps/qotd/WEB-INF/src
[schmitmi@silo src]$ ls -l
total 16
-rw------- 1 schmitmi students  584 Nov 28 15:01 Four.java
-rw------- 1 schmitmi students 1857 Nov 28 15:16 Model.java
-rw------- 1 schmitmi students  526 Nov 28 15:02 Quote.java
-rw------- 1 schmitmi students 2052 Nov 28 15:19 Test.java
[schmitmi@silo src]$ $JAVA_HOME/bin/javac -d ../classes/ *.java
Picked up _JAVA_OPTIONS: -Xms512m -Xmx512m
Note: Model.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
[schmitmi@silo src]$ ls ../classes/qotd/
Four.class  Model.class  Quote.class  Test.class
[schmitmi@silo src]$

I have the servlet all I need to work with it is to deploy it. 

[schmitmi@silo src]$ pwd
/u/schmitmi/c212-workspace/apache-tomcat-7.0.35/webapps/qotd/WEB-INF/src
[schmitmi@silo src]$ ls -l
total 16
-rw------- 1 schmitmi students  584 Nov 28 15:01 Four.java
-rw------- 1 schmitmi students 1857 Nov 28 15:16 Model.java
-rw------- 1 schmitmi students  526 Nov 28 15:02 Quote.java
-rw------- 1 schmitmi students 2052 Nov 28 15:19 Test.java
[schmitmi@silo src]$ $JAVA_HOME/bin/javac -d ../classes/ *.java
Picked up _JAVA_OPTIONS: -Xms512m -Xmx512m
Note: Model.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
[schmitmi@silo src]$ ls ../classes/qotd/
Four.class  Model.class  Quote.class  Test.class
[schmitmi@silo src]$ nano -w ../../web.xml
[schmitmi@silo src]$ tree ../..
../..
├── permanent
│   ├── database
│   └── inventory.txt
├── WEB-INF
│   ├── classes
│   │   └── qotd
│   │       ├── Four.class
│   │       ├── Model.class
│   │       ├── Quote.class
│   │       └── Test.class
│   ├── lib
│   └── src
│       ├── Four.java
│       ├── Model.java
│       ├── Quote.java
│       └── Test.java
└── web.xml

6 directories, 11 files
[schmitmi@silo src]$

Now I am ready to test my model. 

--

[schmitmi@silo permanent]$ pwd
/u/schmitmi/c212-workspace/apache-tomcat-7.0.35/webapps/qotd/permanent
[schmitmi@silo permanent]$ ls -l
total 8
-rw------- 1 schmitmi students 361 Nov 28 15:44 database
-rw------- 1 schmitmi students 434 Nov 28 14:56 inventory.txt
[schmitmi@silo permanent]$ tree ..
..
├── index.html
├── permanent
│   ├── database
│   └── inventory.txt
└── WEB-INF
    ├── classes
    │   ├── One.class
    │   ├── One.java
    │   └── qotd
    │       ├── Four.class
    │       ├── Model.class
    │       ├── Quote.class
    │       └── Test.class
    ├── lib
    ├── src
    │   ├── Four.java
    │   ├── Model.java
    │   ├── Quote.java
    │   └── Test.java
    └── web.xml

6 directories, 14 files
[schmitmi@silo permanent]$

--