CMPUT 391 Database Management Systems

Web based Applications, Tomcat and Servlets - Lab 3 -

CMPUT 391 – Database Management Systems Department of Computing Science University of Alberta The Basic

Lab 3 CMPUT 391 – Database Management Systems 2 Tomcat and Servlets CGI

‹ CGI – ‹ Processing forms & Generating dynamic content (early solution ) ‹ Spawning an external program, pass the data from the HTML form to the program ‹ Limitation: An expensive process (Spawning an external program)

Lab 3 CMPUT 391 – Database Management Systems 3 Tomcat and Servlets CGI: Illustration

Browser Browser Browser Browser

GET Response Form.cgi

Web Server Web Server Web Server Web Server

Spawn an Read environment external program variables Response

Start form.cgi CGfoI rPmr.ocggria m CGI Program CGI Program CteGrIm Pinroagterasm

time

Lab 3 CMPUT 391 – Database Management Systems 4 Tomcat and Servlets ASP

‹ ASP – Active Server Pages ‹ Microsoft’s answers to CGI programming ‹ ASP page - a Web page with code embedded inside, interpreted by the Web server ‹ Using special HTML tags, VBScript/JavaScript code can be inserted

Lab 3 CMPUT 391 – Database Management Systems 5 Tomcat and Servlets Servlets

‹ Java technology's answer to CGI programming ‹ A Java class handling forms on Java Web servers ‹ Applet -- a little piece of program (client side) ‹ Servlet -- a little piece of program (server side) ‹ A servlet can do everything that a CGI program can ‹ Running inside the JVM along with the Web server itself

Lab 3 CMPUT 391 – Database Management Systems 6 Tomcat and Servlets Servlets: Illustration

Browser Browser Browser Browser

GET Response /Form

Java Web Server Java Web Server Java Web Server Java Web Server

Request Response

Create an Form Instance of Form Form Servlet the servlet if it Servlet Servlet is not loaded Remains loaded

time

Lab 3 CMPUT 391 – Database Management Systems 7 Tomcat and Servlets Servlets Support in Existing Servers

‹ Apache Web Server & some other Java-enabled Web servers ‹ Servlet engine Usually a separate process, not within the same process at the Web server e.g. Tomcat

Lab 3 CMPUT 391 – Database Management Systems 8 Tomcat and Servlets Typical Servlet Engine Implementation

Servlet Engine Web Server

Servlet 1 HTTP Custom TCP/IP traffic Protocol Browser API dispatcher Servlet 2

Servlet N

‹ Tomcat A Servlet Engine for Apache Web Server

Lab 3 CMPUT 391 – Database Management Systems 9 Tomcat and Servlets JSP

‹ JSP – Java Server Pages - Java Version of ASP - A Web page with Java code embedded inside it and running on the Web server ‹ Java’s answer to both CGI and ASP ‹ Compiled into servlets ‹ JSP & servlets can easily interact

Lab 3 CMPUT 391 – Database Management Systems 10 Tomcat and Servlets Tomcat

‹ Servlet &JSP engine for Apache Web Server ‹ An open-source package part of the Apache Software Foundation’s Jakarta project ‹ The Tomcat Web site: – http://jakarta.apache.org/tomcat/index.html

Lab 3 CMPUT 391 – Database Management Systems 11 Tomcat and Servlets Installing Tomcat

‹ Setting the CLASSPATH: the same classpath settings as your JVM ‹ Change the CLASSPATH environment variable from your login shell – Follow the instructions in: http://ugweb.cs.ualberta.ca/~c391/tutorial/softwInstall. ‹ Test your installation

Lab 3 CMPUT 391 – Database Management Systems 12 Tomcat and Servlets Installation Tips

‹ Use “echo $SHELL” to double check your shell ‹ When editing catalina/conf/server.xml, is Port 2 and is Port 1 ‹ Use “Port 1” when you input the URL ‹ Take advantage of the alias to start and stop Tomcat (commands are the same in Bourne shell and C shell)

Lab 3 CMPUT 391 – Database Management Systems 13 Tomcat and Servlets URL Mapping

‹ Unlike ASP, JSP, etc., servlets have no extension:

‹ A special URL mapping is needed for each servlet you create. These mappings are defined in web.xml file. ‹ In our lab, the special URL is like: http://.cs.ualberta.ca:/proj1/servlet

Machine Name …/proj1/firstservlet

Lab 3 CMPUT 391 – Database Management Systems 14 Tomcat and Servlets Mapping URL to Machine Directory

Put your plain HTML Catalina files here

Webapps http://ui???.cs.ualberta.ca:portNum/proj1

proj1

WEB-INF Put your servlets here

classes http://ui???.cs.ualberta.ca:portNum/proj1/servlet

Lab 3 CMPUT 391 – Database Management Systems 15 Tomcat and Servlets Your First Servlet import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class FirstServlet extends GenericServlet { public void service(ServletRequest request, ServletResponse response) throws IOException { // Tell the Web server that the response is HTML response.setContentType("text/html");

// Get the Printwriter for writing out the response PrintWriter out = response.getWriter();

// Write the HTML back to the browser out.println(""); out.println(""); out.println("

Welcome to CMPUT391 Lab!

"); out.println(""); out.println(""); } } http://ugweb.cs.ualberta.ca/~c391/tutorial/examples/FirstServlet.java

Lab 3 CMPUT 391 – Database Management Systems 16 Tomcat and Servlets Compiling the Servlet

‹ Edit the file “FirstServlet.java” ‹ javac FirstServlet.java ‹ Start your Tomcat

‹ Launch a browser, input the URL like: http://ui00.cs.ualberta.ca:16410/proj1/firstservlet

Lab 3 CMPUT 391 – Database Management Systems 17 Tomcat and Servlets What Does Your First Servlet Look Like?

Lab 3 CMPUT 391 – Database Management Systems 18 Tomcat and Servlets The FirstServlet In-Depth

import java.io.*; The javax.servlet and javax.servlet.http import javax.servlet.*; packages provide interfaces and classes import javax.servlet.http.*; for writing servlets. public class FirstServlet extends GenericServlet { public void service(ServletRequest request, ServletResponse response) throws IOException {

// Tell the Web browser that the response is HTML response.setContentType("text/html");

// Get the Printwriter for writing out the response PrintWriter out = response.getWriter();

// Write the HTML back to the browser out.println(""); out.println(""); out.println("

Welcome to CMPUT391 Lab!

"); out.println(""); out.println(""); } }

Lab 3 CMPUT 391 – Database Management Systems 19 Tomcat and Servlets The FirstServlet In-Depth import java.io.*; import javax.servlet.*; Implement the Servlet interface: subclassing the existing import javax.servlet.http.*; GenericServlet class that implements Servlet public class FirstServlet extends GenericServlet { public void service(ServletRequest request, ServletResponse response) throws IOException {

// Tell the Web browser that the response is HTML response.setContentType("text/html");

// Get the Printwriter for writing out the response PrintWriter out = response.getWriter();

// Write the HTML back to the browser out.println(""); out.println(""); out.println("

Welcome to CMPUT391 Lab!

"); out.println(""); out.println(""); } }

Lab 3 CMPUT 391 – Database Management Systems 20 Tomcat and Servlets The FirstServlet In-Depth import java.io.*; import javax.servlet.*; Invoke the servlet’s import javax.servlet.http.*; service method public class FirstServlet extends GenericServlet { public void service(ServletRequest request, ServletResponse response) throws IOException { The service method takes two arguments: • ServletRequest: containing info about // Tell the Web browser that the response is HTML the request from the browser. response.setContentType("text/html"); • ServletRespone: containing info about the response going back. // Get the Printwriter for writing out the response PrintWriter out = response.getWriter();

// Write the HTML back to the browser out.println(""); out.println(""); out.println("

Welcome to CMPUT391 Lab!

"); out.println(""); out.println(""); } }

Lab 3 CMPUT 391 – Database Management Systems 21 Tomcat and Servlets The FirstServlet In-Depth import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class FirstServlet extends GenericServlet { public void service(ServletRequest request, ServletResponse response) throws IOException {

// Tell the Web browser that the response is HTML response.setContentType("text/html"); Tell the Web browser what will // Get the Printwriter for writing out the response be returned is HTML. Required! PrintWriter out = response.getWriter();

// Write the HTML back to the browser out.println(""); out.println(""); out.println("

Welcome to CMPUT391 Lab!

"); out.println(""); out.println(""); } }

Lab 3 CMPUT 391 – Database Management Systems 22 Tomcat and Servlets The FirstServlet In-Depth import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class FirstServlet extends GenericServlet { public void service(ServletRequest request, ServletResponse response) throws IOException { The response object has the methods necessary to get an output stream for // Tell the Web browser that the response is HTML writing a response. response.setContentType("text/html"); A general rule of thumb: // Get the Printwriter for writing out the response • Writing out text: use a PrintWriter object PrintWriter out = response.getWriter(); by calling getWriter() • Sending binary data to the browser: use // Write the HTML back to the browser a ServletOutputStream by calling out.println(""); getOutputStream() out.println(""); out.println("

Welcome to CMPUT391 Lab!

"); Some content types require a slightly out.println(""); different character set, and the out.println(""); PrintWriter object automatically adjusts } the character set based on the content } type.

Lab 3 CMPUT 391 – Database Management Systems 23 Tomcat and Servlets The FirstServlet In-Depth import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class FirstServlet extends GenericServlet { public void service(ServletRequest request, ServletResponse response) throws IOException {

// Tell the Web browser that the response is HTML response.setContentType("text/html");

// Get the Printwriter for writing out the response PrintWriter out = response.getWriter();

// Write the HTML back to the browser out.println(""); out.println(""); out.println("

Welcome to CMPUT391 Lab!

"); out.println(""); out.println(""); } You don’t need to worry about closing } the output stream when you have done.

Lab 3 CMPUT 391 – Database Management Systems 24 Tomcat and Servlets Servlet Life Cycle

Loads the servlet (if it has not yet been loaded)

Initializes the servlet instance -run init method

Servlets accept request from Clients and return data back - run service method

If the engine needs to remove the servlet, it finalizes the servlet - run destroy method

Lab 3 CMPUT 391 – Database Management Systems 25 Tomcat and Servlets The Servlet Interface Hierarchy

Definition of The Servlet Interface Servlet Interface Package javax.servlet;

Public interface Servlet { GenericServlet Class public void destroy(); public ServletConfig getServletConfig(); public String getServletInfo(); public void init (ServletConfig config) HttpServlet Class throws ServletException; public void service (ServletRequest request, ServletResponse response) throws ServletException, java.io.IOException; Your servlet class }

Lab 3 CMPUT 391 – Database Management Systems 26 Tomcat and Servlets The HttpServlet Class

‹ It has extra methods and special request- and-response objects that are geared toward the HTTP protocol ‹ The HttpServlet provides separate methods for handling the different type of HTTP requests. The two most common ones are GET and POST: – public void doGet(HTTPServletRequest request, HTTPServletResponse response) throws ServletException, java.io.IOException; – public void doPost(HTTPServletRequest request, HTTPServletResponse response) throws ServletException, java.io.IOException;

Lab 3 CMPUT 391 – Database Management Systems 27 Tomcat and Servlets The HttpServlet Class

doGet Get Post Web HTTP request doPost Browser service Put doPut Delete doDelete

• The doGet, doPost, doPut, doDelete methods are of the same general form as the service method. • The service method of HttpServlet looks at the type of the HTTP request and then calls the appropriate handler methods.

Lab 3 CMPUT 391 – Database Management Systems 28 Tomcat and Servlets The Second Servlet Example

‹ Refer to Asn2Sample.java and Asn2Sample.html in http://ugweb.cs.ualberta.ca/~c391/tutorial/servletbasics.html

‹ Acces servlet using the HTML form ‹ “Subclass” the HttpServlet class rather than the GenericServlet class

Lab 3 CMPUT 391 – Database Management Systems 29 Tomcat and Servlets Servlet Resources

‹ Mark Wutka, Using Java Server Pages and Servlets, 2000, Que. ‹ http://java.sun.com/developer/onlineTraining/ Servlets/Fundamentals/contents.html ‹ http://java.sun.com/webservices/docs/1.0/tuto rial/doc/Servlets.html ‹ Other resources: – http://ugweb.cs.ualberta.ca/~c391

Lab 3 CMPUT 391 – Database Management Systems 30 Tomcat and Servlets Servlet Exercise

‹ create and populate a table in your Oracle account (At least 2 columns & 4 records) ‹ extend Example 3.3 in servletbasics.html – servlet should connect to Oracle database – execute the SQLStatement received from the browser (e.g. select * from “YourTable”;) – display ResultSet on the browser(Tip: use ResultSetMetaData presented in JDBC tutorial) – display an error if the SQL statement was not executed correctly in Oracle (e.g. select * from “Wrong table”)

Lab 3 CMPUT 391 – Database Management Systems 31 Tomcat and Servlets