Stage One due this week: 

  (a) Tetris -- what we did in class plus some prose 

  (b) Servlets -- today

  (c) whatever your write in candidate is: 

     document describing what you chose, how it works, plus descriptions of stages 2, 3

http://www.headfirstlabs.com/books/hfjava/

Parts in the Shopping Cart exercise:

  (a) there will be no database 

Options: MySQL (RDBMS), MongoDB (NoSQL).

Compromise: we will save our state in binary form. 

  (b) everything else is there in some form or another

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

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

CLASSPATH=.:$CATALINA_HOME/lib/servlet-api.jar
export CLASSPATH
[xuemeng@silo apache-tomcat-7.0.35]$ source .tomcat-settings
[xuemeng@silo apache-tomcat-7.0.35]$ echo $CATALINA_HOME
/u/xuemeng/c212-workspace/apache-tomcat-7.0.35
[xuemeng@silo apache-tomcat-7.0.35]$

Now what? 

[xuemeng@silo apache-tomcat-7.0.35]$ cd $CATALINA_HOME
[xuemeng@silo apache-tomcat-7.0.35]$ cd webapps/
[xuemeng@silo webapps]$ ls
chat  docs  examples  host-manager  iceblox  manager  ROOT
[xuemeng@silo webapps]$ mkdir project
[xuemeng@silo webapps]$ cd project/
[xuemeng@silo project]$ mkdir WEB-INF
[xuemeng@silo project]$ cd WEB-INF/
[xuemeng@silo WEB-INF]$ mkdir lib
[xuemeng@silo WEB-INF]$ mkdir classes
[xuemeng@silo WEB-INF]$ pwd
/u/xuemeng/c212-workspace/apache-tomcat-7.0.35/webapps/project/WEB-INF
[xuemeng@silo WEB-INF]$

How about some actually working files? 

[xuemeng@silo WEB-INF]$ pwd
/u/xuemeng/c212-workspace/apache-tomcat-7.0.35/webapps/project/WEB-INF
[xuemeng@silo WEB-INF]$ ls -l
total 8
drwx------ 2 xuemeng students 4096 Nov 30 10:11 classes
drwx------ 2 xuemeng students 4096 Nov 30 10:11 lib
[xuemeng@silo WEB-INF]$ nano -w index.html
[xuemeng@silo WEB-INF]$ cat index.html
Welcome to the Shopping Cart project.
[xuemeng@silo WEB-INF]$


Next we develop a servlet.

[xuemeng@silo project]$ pwd
/u/xuemeng/c212-workspace/apache-tomcat-7.0.35/webapps/project
[xuemeng@silo project]$ ls -l
total 8
-rw------- 1 xuemeng students   39 Nov 30 10:13 index.html
drwx------ 4 xuemeng students 4096 Nov 30 10:14 WEB-INF
[xuemeng@silo project]$ du -a .
4       ./index.html
4       ./WEB-INF/classes
4       ./WEB-INF/lib
12      ./WEB-INF
20      .
[xuemeng@silo project]$ pwd
/u/xuemeng/c212-workspace/apache-tomcat-7.0.35/webapps/project
[xuemeng@silo project]$ pwd
/u/xuemeng/c212-workspace/apache-tomcat-7.0.35/webapps/project
[xuemeng@silo project]$ cat ../../conf/tomcat-users.xml
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
  <role rolename="manager-gui"/>
  <user username="francis" password="n3ws" roles="manager-gui"/>
</tomcat-users>
[xuemeng@silo project]$

A little debugging, then.

[xuemeng@silo logs]$ pwd
/u/xuemeng/c212-workspace/apache-tomcat-7.0.35/logs
[xuemeng@silo logs]$ cd ../webapps/project/
[xuemeng@silo project]$ ls -l
total 8
-rw------- 1 xuemeng students   39 Nov 30 10:13 index.html
drwx------ 4 xuemeng students 4096 Nov 30 10:14 WEB-INF
[xuemeng@silo project]$ tree .
.
├── index.html
└── WEB-INF
    ├── classes
    └── lib

3 directories, 1 file
[xuemeng@silo project]$

Now things work, how does a servlet work/look like?

[xuemeng@silo classes]$ ls -l
total 8
-rw------- 1 xuemeng students 194 Nov 30 10:36 One.class
-rw------- 1 xuemeng students  72 Nov 30 10:36 One.java
[xuemeng@silo classes]$ cat One.java
import javax.servlet.http.*;

public class One extends HttpServlet {

}
[xuemeng@silo classes]$ $JAVA_HOME/bin/javac One.java
Picked up _JAVA_OPTIONS: -Xms512m -Xmx512m
[xuemeng@silo classes]$

Let's make it do something: 

[xuemeng@silo classes]$ cat One.java
import javax.servlet.http.*;
import java.util.*;
import java.io.*;

public class One extends HttpServlet {
  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
              throws java.io.IOException {
    PrintWriter out = response.getWriter();
    out.println( new Date() );
  }
}
[xuemeng@silo classes]$ $JAVA_HOME/bin/javac One.java
Picked up _JAVA_OPTIONS: -Xms512m -Xmx512m
[xuemeng@silo classes]$

How do I deploy this? 

[xuemeng@silo WEB-INF]$ pwd
/u/xuemeng/c212-workspace/apache-tomcat-7.0.35/webapps/project/WEB-INF
[xuemeng@silo WEB-INF]$ ls
classes  lib  web.xml
[xuemeng@silo WEB-INF]$ cat web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app
  PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
  "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>

  <servlet>
    <servlet-name>One</servlet-name>
    <servlet-class>One</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>One</servlet-name>
    <url-pattern>/servlet/One</url-pattern>
  </servlet-mapping>

</web-app>
[xuemeng@silo WEB-INF]$
[xuemeng@silo WEB-INF]$ pwd
/u/xuemeng/c212-workspace/apache-tomcat-7.0.35/webapps/project/WEB-INF
[xuemeng@silo WEB-INF]$ ls
classes  lib  web.xml
[xuemeng@silo WEB-INF]$ cat web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app
  PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
  "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>

  <servlet>
    <servlet-name>One</servlet-name>
    <servlet-class>One</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>One</servlet-name>
    <url-pattern>/servlet/One</url-pattern>
  </servlet-mapping>

</web-app>
[xuemeng@silo WEB-INF]$

To check this online we do: 

http://silo.cs.indiana.edu:24127/project/servlet/One

Next: JSP. Controller. Views. Model. 

In lab we will take you to the second half of stage two. 

--

http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequest.html

https://www.cs.indiana.edu/classes/c212-dgerman/fall2016/lab09.html