CS433 Fall 2002 Setup Guide

 

 

TA’s:   Vincent Gu (vg32@cornell.edu)

            Scott Selikoff (sms65@cornell.edu)

Lin Zhu (lz26@cornell.edu)

 

 

 

 

 

 

Introduction

 

            As discussed in class, each project will be modeled on a modified three-tier architecture:  the database, the application server, and the web browser.  All groups will use the same database server, Egret, and each group will be given a single database from which to work.  If later in the semester a group requires the use of a second database, specifically for the data replication assignment, students can contact one of the TA’s for assistance.

            Each group will run its own application server using Apache Tomcat.  The software has all ready been installed on each of the computers in the CSUG lab in Upson.  If a student is having trouble getting the software to work properly, it is recommended that they try another computer in the lab.

            Finally, you may use either Microsoft Internet Explorer or Netscape to access your web server one it has been loaded.

 

            While reading this guide, keep in mind that writing appropriate SQL statements will be discussed in more detail in CS432.  This guide simply provides a method for executing such queries in a different environment that you will be using in CS432.

 

 

Step I: Setting up the Application Server

 

            Each student needs to configure his or her network drive for use with Apache Tomcat.  This step only needs to be performed once.

 

The Tomcat software for the application server will run locally on the harddrive of the lab computer, and the application server data will be stored on each student’s network drive.  Create the following directories on your network drive exactly as they appear below:

 

Z:\CS433\Work                                       //  Temporary directory for the server

Z:\CS433\ROOT                                     //  Root Directory of the server

Z:\CS433\ROOT\WEB-INF                   //  Hidden System Directory

Z:\CS433\ROOT\WEB-INF\classes    //  Location of java class files

Z:\CS433\ROOT\WEB-INF\lib             //  Location of java .jar files

 

 

Next, download the files “msbase.jar, mssqlserver.jar, msutil.jar”  containing the Microsoft SQL Server 2000 JDBC Drivers from the MSDN SQL Server 2000 website and put the contents in the folder:

 

Z:\CS433\ROOT\WEB-INF\lib

 

These files contain the SQL drivers that allow your allow your application server to access the database and can also be obtained freely from Microsoft’s website.

 

 

 

Step II:  Using the Application Server

 

            Start and Stop the application server using the following two files already located on the harddrive of each lab computer:

 

C:\Program Files\Apache Tomcat 4.0\bin\startup.bat

C:\Program Files\Apache Tomcat 4.0\bin\shutdown.bat

 

After the server has been started, you will see a command window:

 

 

You need to keep this command window open at all times while your server is running.  Closing this window will take the server offline.  We refer to the computer running the application server as the host computer.

 

Tomcat always loads the file, Z:\CS433\ROOT\index.html, when you access the root of the web server.  Initially, you should create or download a simple .html file, rename it to index.html file, and put it in Z:\CS433\ROOT so that you can verify that your server loads properly.

 

 

To test the web server from the host computer, open your browser and go to:

 

            http://localhost

 

Partners attempting to use your web server need to use the host computer’s IP Address, such as:

 

            http://256.256.256.256

 

Notes:

1)  Tomcat has been set up to use the standard Web Browser port 80.

2)  Only one partner needs to run the application server at any given time.

3)  In order for partners to modify the data in the host computer’s root directory, you will need to give your partners security rights to that folder and/or files.

4)  Java Class files go in the WEB-INF\classes directory.  Although not always necessary, it is recommended that you restart the server anytime you add/modify files in this directory.

 

 

 

Step III:  Accessing the Database

 

            We are using Microsoft SQL Server for the database server.  The recommended tool to access the MSSQL Server is called Query Analyzer.  You can start it by going to:

 

Start Menu à All Programs à Microsoft SQL Server à Query Analyzer

 

It will bring up a dialog box looks like below:

 

 

Type EGRET in the SQL Server field and enter your group login name and password.  Now click OK, you should see a window like the following:

 

 

            There is a browser pane on the left showing the databases you have access to.  The only one you have write access to will be your group database.  In addition, we have preconfigured each group so that the default database selected is their own.  Each student will be writing SQL statements in the editor pane, which is the text-editing window on the right.  You can also save/open your queries.  Before executing a query, check that the database selected at the top panel is the one you wish to work with.

 

To execute a query, simply press F5 on the keyboard or click “►”on the toolbar.  If no error occurred, a result pane will appear and show the results of the query.

 

 

Notes:

1)  You can check SQL statement syntax before executing by pressing Ctrl+F5 on the keyboard or click on the checkmark button on the toolbar.

 

 

Step IV:  Establishing Database Connection

 

            To access a database within a JSP/Servlet, you will be using JDBC.  In general, JDBC stands for “Java Database Connectivity”.  Many of you may be familiar with ODBC, which is Microsoft’s version of the same type of software.

 

Before proceeding, make sure that the designated .jar files, mentioned in Step II of this guide, have been downloaded and installed into your library directory.  Second, insert the following line in the top of your JSP file:

 

<%@page import="java.sql.*"%> 

 

This line tells the JSP to load the appropriate SQL libraries.  For servlets, you load the same library using the standard Java method for importing a class.

 

 

 To invoke the JDBC driver, use the following line of code:

 

Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");

 

This line can conceivably throw a “ClassNotFound” exception.  You must make sure to try/catch this exception as well as any other potential exceptions in your code.  To establish a connection, type:

 

Connection con = DriverManager.getConnection("jdbc:microsoft:sqlserver://egret:1433;databasename= g192","g192","password");

 

In our example, we used g192 for the group name and login.  You must replace this with your group name, login, and appropriate password without removing any of the quotes.  Note that getConnection can also throw a SQLException, so you need to catch it as well.  At this point, you have established a valid connection to the database, and can proceed to invoke SQL commands on the database as if you were using Query Analyzer.

 

            The connection is stored in the Connection object called “con”.  Next, you will create a Statement object.  A Statement object is used to pass information to and from the server for an individual SQL statement.  Create a Statement object using the following syntax:

 

Statement stmt = con.createStatement();

 

Once you have a Statement object, you can use it to send SQL statements to the database as is done in the following executeQuery method:

 

String sql =  “SELECT column1, column2 FROM table”;

Statement stmt = con.createStatement();

ResultSet rs = stmt.executeQuery(“sql”);

 

 

Notes:

1)  If your SQL statement is to update the database that uses INSERT, UPDATE, or DELETE, use the method executeUpdate instead of executeQuery.

2)  In our example, we used the labels sql, stmt, and rs to denote the instances of each object.  Keep in mind that you can name these instances anything you wish, and for cases in which you have nested queries, you will need to use other labels.

 

 

In our example, the results of the query are stored in the ResultSet object.  The Java API provides many useful methods to process the ResultSet.  Assuming column1 is of type integer, and column2 is of type string, to print the result of query on screen, type:

 

while(rs.next()) {

out.println(rs.getString(“column1”) + " " +rs.getString(“column2”);

}

 

Results are sent as one record at a time.  rs.next() simply scrolls through each record one at a time and returns false when there are no more records in the set.

 

 

Notes:

1)  Always remember to close your ResultSet, Statement, and Connection when you are done using them by calling rs.close(), stmt.close(), and con.close().

2)  In order to return the results in some specified order, recall that you can use the SQL command ORDER BY as will be discussed in CS432.

3)  The command executeUpdate does not return a ResultSet object, but an integer value, which indicates the successfulness of the query sent.  Do not use a ResultSet object when executing an executeUpdate query or the server will throw an exception.

4)  Here is an example with all the smaller examples put together to show what a simple JSP accessing a server might look like:

 


 

<%@page import="java.sql.*"%> 

 

<%

Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");

 

try {

 

// Open Database connection

Connection con = DriverManager.getConnection("jdbc:microsoft:sqlserver://egret:1433;databasename= g192","g192","password");

 

// Query Database (all queries use the same connection)

String sql =  "SELECT column1, column2 FROM table";

Statement stmt = con.createStatement();

ResultSet rs = stmt.executeQuery("sql");

 

// Print header and each record returned

out.println("List of items in the database:");

while(rs.next())

out.println(rs.getString("column1") + " " +rs.getString("column2"));

 

// Finished using the database instances

rs.close();

stmt.close();

con.close();

}

catch (Exception e) {

out.println(e.toString());  // Error message to display

}

%>

 

Note that in this example, in the event of an error, we output the error exactly as it is returned from the database.  You may want to refine this in practice so that the exact type of error is hidden from the user.