1 connecting databases to the web october 30 th, 2001 xinguang sheng marcus haebler
TRANSCRIPT
1
Connecting Databases to the Web
October 30th , 2001
Xinguang Sheng
Marcus Haebler
Connecting Databases to the Web 2
Outline
• How Does Web application architecture evolves
• Common Gateway Interface (CGI)• Java Applets• Server Extensions• PHP• Active Server Pages/ Java Server Pages• What else is out there?• Architectures• Extended PHP example
Connecting Databases to the Web 3
First Generation Architecture
Connecting Databases to the Web 4
Second Generation Architecture
Connecting Databases to the Web 5
Next Generation Architecture
Connecting Databases to the Web 6
• Some files on server are interpreted as programsdepending on either ext., flag or special directory
• Program is invoked and generates MIME header and HTML on stdout
Web-Server
Common Gateway Interface (CGI)
HTTP-Request
HTML-File
Web-Server
File-SystemLoad File
FileHTML?
HTML
Execute Program
Program?Output
I/O, Network, DB
Connecting Databases to the Web 7
Advantages:
- Standardized: works for every web-server, browser
- Flexible: Any language (C++, Perl, Java, …) can be used
Disadvantages:
- Statelessness: query-by-query approach
- Inefficient: new process forked for every request
- Security: CGI programmer is responsible for security
- Updates: To update layout, one has to be a programmer
CGI: Discussion
Connecting Databases to the Web 8
Java Applets
Web-ServerHTTP-Request
HTML-File
Web-Server
File-System
Load File
FileLoad Applet...
Java-Class Requests
Java-Classes
Execute Applet...
Java Virtual Machine (JVM)
Server-Process
Connecting Databases to the Web 9
Advantages:- Platform independent: works for every web-server and
browser supporting Java
Disadvantages:- Standalone Character:
· Entire session runs inside applet· HTML forms are not used
- Inefficient: loading can take a long time ...- Resource intensive: Client needs to be state of the art- Restrictive: can only connect to server where applet was
loaded from (Java VM but … can be configured)Note: Server-Process can be written in any language
Java Applets: Discussion
Connecting Databases to the Web 10
Java-Server-Process
DB Access in Java
Sybase
Java Applet
TCP/UDP
IP
Oracle ...
JDBC-Driver
JDBC-Driver
JDBC-Driver
JDBC Driver manager
Connecting Databases to the Web 11
Previous Approaches
- Platform independent and standardized
- Simple interface
- Lots of programming necessary
- Inefficient
Server Extensions
- Server is extended with handler/module
- One handler for all incoming requests
- Much more efficient
Server Extensions
Connecting Databases to the Web 12
Server Extensions: The Basic Idea
File-SystemWeb-Server
HTTP-Request
HTML-File
Web-Server
Load File
FileHTML?
HTML
I/O, Network, DB
Script?Output
Server Extension
Connecting Databases to the Web 13
• API depends on Server vendor:- Apache Foundation Apache Server: Apache API- Microsoft Internet Information Server: ISAPI- Netscape Enterprise Server: NSAPI
• One can define it’s own server extension, e.g.- Authentication module- Counter module
Server Extensions
Connecting Databases to the Web 14
• Active Server Pages (ASPs)- Available in IIS and Personal Web
Server- Based on VBScript, Jscript- Modular Object Model- Active Server Components- Active Data Objects
(ADO) for Databaseaccess
- In MS .NET ASP+, ADO+ …
Active Server Pages
File-SystemWeb-Server
HTTP-Request
HTML-File
Load File
ASP-File
HTML
ASP-ScriptOutput
I/O, Network, DBActive Server Page
Scripting Engine
Active Server Components
Connecting Databases to the Web 15
ColdFusion
File-SystemWeb-Server
HTTP-Request
HTML-File
Web-Server
Load File
FileHTML?
HTML
CF Script?HTML
Cold Fusion Server Extension
Cold Fusion Application Server
ODBC-Driver Native
DB DB
Directories
COM/CORBA
Connecting Databases to the Web 16
ColdFusion: Simple Query
• Proprietary Scripting Language CFML - similar to other scripting languages<CFQUERY NAME=“PersonList”
DATASOURCE=“PersonDB”>SELECT * FROM Persons
</CFQUERY><HTML><BODY><H1> Person List </H1><CFOUTPUT QUERY=“PersonList”>
<B>Name:</B> #Name#<B>Age:</B> #Age# <B>Salary:</B> $#Sal# <BR>
</CFOUTPUT></BODY></HTML>
<HTML><BODY><H1> Person List </H1><B>Name:</B> Tom <B>Age:</B> 45<B>Salary:</B> $45000 <BR><B>Name:</B> Jim <B>Age:</B> 38<B>Salary:</B> $40000 <BR><B>Name:</B> Karen <B>Age:</B> 26<B>Salary:</B> $32000 <BR></BODY></HTML>
Connecting Databases to the Web 17
ColdFusion: Form Handling
<HTML><BODY><FORM ACTION="http://www.abc.com/cf/pf.cfm"><H1> Find Person </H1>Person Name <INPUT NAME="PNAME"> <p><INPUT TYPE="submit" VALUE="Find"></FORM></BODY></HTML>
<HTML><BODY><H1> Tom </H1><UL> <LI><B>Age:</B> 45 <LI><B>Salary:</B> $45000 <LI><A HREF=“www.tom.com” <B>Homepage</B></A></UL></BODY></HTML>
<CFQUERY NAME=“PersonInfo” DATASOURCE=“PersonDB”>SELECT * FROM Persons WHERE Name=#Form.PName#
</CFQUERY><HTML><BODY><CFOUTPUT QUERY=“PersonInfo”><H1> #Name# </H1><UL> <LI><B>Age=</B> #Age# <LI><B>Salary=</B> $#Sal# <LI><A href=“#URL#”><B>Homepage</B> </A></UL></CFOUTPUT></BODY></HTML>
Connecting Databases to the Web 18
ColdFusion: Misc. Issues
• Site admin sets up data sources very similar to the handling of ODBC data sources in MS Windows
• In fact ColdFusion combines techniques to access databases:- Generation of HTML code- Java Applets embedded via <CFGRID></CFGRID>
access the database through the application server
• Application server is also gateway to database for the ColdFusion IDE (ColdFusion Studio)
Connecting Databases to the Web 19
PHP
How does PHP differ from ASP and CF?
• Free, open source• Many client libraries
integrated• Runs on any web
server supporting CGIs (MS Windows or Unix)
• Module version for Apache
File-SystemWeb-Server
HTTP-Request
HTML-File
Load File
PHP-File
HTML
PHP-ScriptOutput
Database APIs,
other APIs SNMP,
IMAP, POP3,
LDAP, ...
PHP
Module
Web-Server
Connecting Databases to the Web 20
PHP: A Simple Example
<HTML> <BODY>
<?PHP $db = mysql_connect("localhost", "dbuser"); mysql_select_db("mydb",$db); $result = mysql_query("SELECT * FROM employees",$db);?>
<TABLE BORDER=1> <TR><TD>NAME</TD><TD>POSITION</TR>
<?PHP while ($myrow = mysql_fetch_row($result)) { printf("<tr><td>%s %s</td><td>%s</td></tr>\n", $myrow[1], $myrow[2], $myrow[3]); } ?>
</TABLE></BODY></HTML>
Connecting Databases to the Web 21
PHP: Misc Issues
• Syntax Perl/C like• Form fields are available as variables in
following page• has e.g. image and PDF generation on the fly• some OO features (e.g. classes)• Version 3 installed on fling.seas.upenn.edu• Version 4.0.2 latest version (zend engine)
- more OO features- is based on a different, faster scripting engine- more modular architecture
• The number of functions is steadily increasing
Connecting Databases to the Web 22
Java Server Pages
Connecting Databases to the Web 23
JSP Example—Hello.jsp
<html> <head> <title>My first JSP page </title> </head> <body> <%@ page language=”java” %> <% System.out.println(“Hello World”); %> </body> </html>
Connecting Databases to the Web 24
And the Output IS
<html> <head> <title>My first JSP page </title> </head> <body> Hello World</body> </html>
Connecting Databases to the Web 25
What Else Is Out There?
• Java Server Pages (JSP)- similar to PHP
• Java Servlets - very similar to CGIs
• A couple of solutions from Oracle- PENN ExpressApp is based on OWS
• various web shop applications- all of them use a more or less sophisticated
scripting language
• and a lot more ...
Connecting Databases to the Web 26
Databases Usually Used
• ASP- MS Jet Engine (DB engine behind MS Access)
- MS SQL Server
- Oracle (ODBC)
• ColdFusion- Oracle (native driver support)
- Informix (native driver support)
- Sybase (native driver support)
• PHP- MySQL (linked in client library)
- mSQL (linked in client library)
- Postgres (linked in client library)
- Oracle (linked in client library)
Connecting Databases to the Web 27
Architectures
• The architecture type depends on kind and number of servers involved
• Different archictures different advantages and disadvantages
• Generally we can distinguish between different types:- 2-tier architecture- 3-tier architecture- n-tier architecture
• What matters: SPEED
Connecting Databases to the Web 28
Web-Server
2-tier Architecture
• Web server plus module connecting to database, LDAP, IMAP, ...
HTTP-Request
HTML-File
Module
DB Directory
Mail Server
SNMP
1
2
Connecting Databases to the Web 29
2-tier Architecture
• Advantages:- easy and fast to setup- easy to administrate
• Disadvantages:- not fail safe (single point of failure)- scales badly on high loads
Connecting Databases to the Web 30
3-tier Architecture
• Web server plus application server connecting to database, IMAP, ...
DB DB Mail Server
SNMP
1
3
2
Web Server [Cluster]
Application Server [Cluster]
Other Servers [Cluster]
DBRepl.
Connecting Databases to the Web 31
3-tier Architecture
• Advantages:- better scalabilty- more reliable through failover mechanisms- offers better load balancing
• Disadvantages:- complicated to set up an maintain
Connecting Databases to the Web 32
Architectures: Usage
• 2-tier- Apache-PHP plus Database etc.
• 3-tier- ColdFusion 4.x, BEA Weblogic- Oracle Web Application Server?
• n-tier- big sites with custom systems
like Yahoo, Amazon.com, eBay
Classification not always 100%
Connecting Databases to the Web 33
Technology Choices
• PHP/{Oracle|mySQL} – Minimum Setup use fling or Eniac.
• ASP/Access/ODBC -- Need MS IIS• JSP/{Oracle|mySQL}/JDBC -- Need
Tcomcat or Apache+JServ• Any Other Choices?
Connecting Databases to the Web 36
Plain HTML
<HTML><TITLE>Simple SQL Web Interface for Movie Table</TITLE><BODY><H1>Simple SQL Web Interface for Movie Table</H1>[PHP code here]<FORM ACTION="query.php3" METHOD=GET ENCTYPE="TEXT/PLAIN"><INPUT SIZE=100 MAXLENGTH=250 NAME="query" VALUE="select title, year, mid from movies"> </FORM>
</BODY></HTML>
browser
Connecting Databases to the Web 37
Table Generation (Part 1)
<?php/* check for query, if empty describe movies */if (!isset($query)) {
$query = "describe movies";} else {
$query = stripslashes($query);print "<B>Your query: </B>\"" . $query . "\"\n";
}
$result = mysql_query($query, $conID)or die ("Invalid query");
// disable error reporting$eLevel = error_reporting(0);
?>
browser
Connecting Databases to the Web 38
Table Generation (Part 2)
<?php/* generate table header or catch INSERT, DELETE and UPDATE statements */if (mysql_affected_rows($conID) > 0)
print "<B>affected " . mysql_affected_rows($conID) . " row(s)!</B><P>\n";if (mysql_num_rows($result) > 0) {
$noFields = mysql_num_fields($result);print "<table border=\"1\">\n<tr>\n";for ($i = 0; $i < $noFields; $i++)
print "<th><b>" . mysql_field_name($result, $i) . "</b></th>\n";print "</tr>\n";while ($row = mysql_fetch_array ($result)) {
print "<tr>\n";for ($i = 0; $i < $noFields; $i++)
print "<td> " . $row[$i] . " </td>\n";print "</tr>\n";
} print "</table>\n";
}?>
browser
Connecting Databases to the Web 39
Links
• Software:- Apache: http://www.apache.org/- ASP: http://msdn.microsoft.com/workshop/server/default.asp- ColdFusion: http://www.allaire.com/coldfusion/- MySQL: http://www.mysql.com/ - Oracle: http://www.oracle.com/- Oracle Technet: http://technet.oracle.com/- PHP: http://www.php.net/, http://www.zend.com/
• Others:- c|net: http://www.builder.com/- DevShed: http://www.devshed.com/Server_Side/- Webmonkey: http://www.webmonkey.com/