390 likes | 496 Views
Connecting Databases to the Web. Outline. Common Gateway Interface (CGI) Java Applets Server Extensions PHP Active Server Pages/ Java Server Pages What else is out there? Architectures Extended PHP example. First Generation Architecture. Second Generation Architecture.
E N D
Outline • Common Gateway Interface (CGI) • Java Applets • Server Extensions • PHP • Active Server Pages/ Java Server Pages • What else is out there? • Architectures • Extended PHP example
Output Program? Execute Program I/O, Network, DB Common Gateway Interface (CGI) • 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 Web-Server File-System HTTP-Request Load File HTML HTML? HTML-File File
CGI: Discussion 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
Java-Class Requests Java-Classes Server-Process Execute Applet... Java Virtual Machine (JVM) Java Applets Web-Server Web-Server HTTP-Request Load File File-System HTML-File File Load Applet...
Java Applets: Discussion 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
DB Access in Java Java Applet TCP/UDP IP Java-Server-Process JDBC Driver manager JDBC-Driver JDBC-Driver JDBC-Driver Sybase Oracle ...
Server Extensions 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
Script? Output I/O, Network, DB Server Extension Server Extensions: The Basic Idea Web-Server Web-Server HTTP-Request File-System Load File HTML HTML? File HTML-File
Server Extensions • 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
Web-Server File-System HTTP-Request Load File HTML HTML-File ASP-File Output ASP-Script Active Server Page Scripting Engine I/O, Network, DB Active Server Components Active Server Pages • Active Server Pages (ASPs) • Available in Personal Web Server • Based on VBScript, Jscript • Modular Object Model • Active Server Components • Active Data Objects (ADO) for Databaseaccess • In MS .NET ASP+, ADO+ …
Cold Fusion Application Server ODBC-Driver Native Email Directories COM/CORBA DB DB ColdFusion Web-Server Web-Server HTTP-Request Load File File-System HTML HTML? HTML-File File HTML CF Script? Cold Fusion Server Extension
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>
ColdFusion: Form Handling <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> <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> <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>
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 ofHTML 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)
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 Web-Server Web-Server File-System HTTP-Request Load File HTML HTML-File PHP-File Output PHP-Script PHP Module Database APIs, other APIs SNMP, IMAP, POP3, LDAP, ...
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>
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) • The number of functions is steadily increasing
JSP Example—Hello.jsp <html> <head> <title>My first JSP page </title> </head> <body> <%@ page language=”java” %> <% System.out.println(“Hello World”); %> </body> </html>
And the Output IS <html> <head> <title>My first JSP page </title> </head> <body> Hello World </body> </html>
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 ...
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)
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
HTTP-Request HTML-File 2-tier Architecture • Web server plus module connecting to database, LDAP, IMAP, ... 1 Web-Server Module 2 DB Directory Mail Server SNMP
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
3-tier Architecture • Web server plus application server connecting to database, IMAP, ... 1 Web Server [Cluster] Application Server [Cluster] 2 Other Servers [Cluster] 3 DBRepl. DB DB Mail Server SNMP
3-tier Architecture • Advantages: • better scalabilty • more reliable through failover mechanisms • offers better load balancing • Disadvantages: • complicated to set up an maintain
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 systemslike Yahoo, Amazon.com, eBay Classification not always 100%
Technology Choices • PHP/{Oracle|mySQL} • ASP/Access/ODBC -- Need MS IIS • JSP/{Oracle|mySQL}/JDBC -- Need Tomcat or Apache+JServ • Any Other Choices?
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>
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); ?>
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"; } ?>
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/