Server Technology | PPNT | Server-side Technologies CGI, PHP, Java Servlets, JSP

Server-side Technologies
CGI, PHP, Java Servlets, JSP
Denis Helic
Server-side Technologies: Historical Background(1/3)
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)
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
Dynamic response by server
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
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)
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
Common Gateway Interface (CGI)
CGI is a specification of communication between Web server and external
Current version CGI 1.1
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.)
CGI Specification(1/4)
Environment variables
System specific variables set by Web server
External program reads environment variables and obtains data
about client request
Command line
Using a special HTML tag user sends a command line to the server
Command line executed on the server
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)
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
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
CGI Examples(1/7)
Example 1:
Hello World: CGI as UNIX shell script
GET method, no parameters from client
Write HTML to stdout
# send http-header and a newline afterwards:
echo "Content-Type: text/html"
echo ""
CGI Examples(2/7)
Example 1 (continued):
# send html content:
echo "<HTML>"
echo " <HEAD>"
echo "
<TITLE>Hello World CGI</TITLE>"
echo " </HEAD>"
echo " <BODY>"
echo " Hello World ("
date "+%T, %d.%m.%Y"
echo ")"
echo " </BODY>"
echo "</HTML>"
CGI Examples(3/7)
Example 2:
Dump environment variables: CGI as Perl script
GET method, no parameters from client
Write HTML to stdout
require "";
print &PrintHeader;
print "<hr>";
print &PrintEnv;
CGI Examples(4/7)
Example 2 (continued):
Special CGI library in Perl: cgi-lib
Provides functions for parsing input, parsing parameters, writing
headers, etc.
cgi-lib homepage:
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:
Parameters forwarded as an environment variable (QUERY_STRING) to
special characters encoded by %’ and ASCII-value (hex)
restricted to 1024 bytes!
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
require "";
if (&ReadParse) {
print &PrintHeader, &PrintVariables;
} else {
print &PrintHeader,’<form><input type="submit">
Data: <input name="myfield">’;
CGI Examples(7/7)
Example 4 (continued):
<form action ="/cgi-bin/mmis/"
method ="POST" enctype= "multipart/form-data">
Another CGI example:
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 Applications(2/2)
Finger gateway:
Mail gateway:
CGI Security
Check parameters carefully!!!
if($email =~ /[^a-zA-Z0-9_\-\.@]/){
$_ = "The email address should be of
the form <i>user\@server</i>!";
$_ = qx($finger $email);
Suppose this e-mail address:
something ; mail < /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.)
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:
PHP: Hypertext Preprocessor
(NOT = Parents helping Parents :-))
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)
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 ... ?>
<script language=”php”> ... </script>
<% ... %>
PHP: Hello World(2/3)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
<title>Hello World</title>
<meta http-equiv = "Content-type" content = "text/html; charset=iso-8859-1">
<link rel = "stylesheet" type = "text/css" href = "style.css">
echo "Hello World! ";
echo "(";
echo date ("l dS of F Y h:i:s A");
echo ")";
PHP: Hello World(3/3)
PHP: Syntax
PHP syntax close to C and Java
Object-oriented approach
Control structures
Weakly-typed variables (prefix ’$’)
Operators, etc.
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:
Socket programming
Database connectivity (e.g. MySQL, dBase, Oracle, etc.)
XML/XSLT manipulation
Image manipulation
PHP: Handling Forms(1/8)
PHP interpreter initializes variables correpsonding to form fields
<form action ="/mmis/examples/php/env_vars/printvar.php"
method="GET" enctype= "multipart/form-data">
<input type = "text" name = "name" size = "20" maxlength = "50">
Second Name:
<input type = "text" name = "second_name" size = "20"
maxlength = "50">
Matrikel Number:
<input type = "text" name = "nr" size = "20" maxlength = "50">
<input type = "submit" value = "Register">
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.
"<tr><td>Second Name</td><td>$second_name</td></tr>\n";
"<tr><td>Matrikel Number</td><td>$nr</td></tr>\n";
"<tr><td>Study Field</td><td>$study_field</td></tr>\n";
PHP: Handling Forms(3/8)
Example with GET:
Example with POST:
Example PHP:
Source PHP:
PHP: Handling Forms(4/8)
PHP form variables: Alternative 2
Access form fields through PHP array
$HTTP_GET_VARS for GET method
$name = $HTTP_POST_VARS["name"];
$name = $HTTP_GET_VARS["name"];
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"];
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
PHP: Handling Forms(7/8)
Example of security problem with global form variables
$tempfile = "12345.tmp";
... handle form variables ...
... do something with tempfile ...
PHP: Handling Forms(8/8)
Example of security problem with global form variables (continued)
Suppose a following HTML form:
<input type = "hidden" name = "tempfile" value = "/etc/passwd">
php.ini: register_globals=Off!!!
>=PHP4.2.0 by default off
Use $HTTP_POST_VARS or $_POST instead
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!
PHP: Database Manipulation(2/5)
Example: Inserting and retrieving data from MySQL database
PHP: Database Manipulation(3/5)
$name = $HTTP_POST_VARS["name"];
$second_name = $HTTP_POST_VARS["second_name"];
$nr = $HTTP_POST_VARS["nr"];
$study_field = $HTTP_POST_VARS["study_field"];
mysql_connect() or die("Unable to connect to database server");
@mysql_select_db("$dbname") or die("Unable to select database");
$query = "INSERT INTO $tablename VALUES (’$name’,
’$second_name’, ’$nr’, ’$study_field’, ’null’)";
$result = mysql_query($query) or die (mysql_error());
PHP: Database Manipulation(4/5)
Inserting data with PHP (source):
Retrieving data with PHP:
PHP: Database Manipulation(5/5)
while($i < $rows){
$name = mysql_result($result, $i, "name");
$second_name = mysql_result($result, $i, "second_name");
$nr = mysql_result($result, $i, "nr");
$study_field = mysql_result($result, $i, "study_field");
echo "<tr><td>$name</td><td>$second_name</td><td>$nr</td><td>
Retrieving data with PHP (source):
PHP: XML Manipulation(1/3)
Additional PHP library for manipulating XML data
PEAR library:
Packages for networking, scientific calculations, file system, databases,
XML, XSLT, etc.
XML_Tree one of the packages in the PEAR library
PHP: XML Manipulation(2/3)
header("Content-Type: text/xml");
$tree = new XML_Tree();
$root =& $tree->addRoot("Course");
while($i < $rows){
$reg =& $root->addChild("registered");
$student =& $reg->addChild("Student");
$name = mysql_result($result, $i, "name");
$student->addChild("name", $name);
PHP: XML Manipulation(3/3)
Retrieving data (as XML) with PHP:
Retrieving data (as XML) with PHP (source):
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:
PHP: Image Manipulation(2/3)
Header("Content-Type: image/png");
$im = ImageCreateTrueColor(400, 300);
ImageFill($im, 0, 0, $white);
ImageArc($im, 150, 150, $diameter, $diameter, $last_angle,
ImageFillToBorder($im, $mid_x, $mid_y, $black, $colors[$z]);
ImageFilledRectangle($im, 300, ($z - 1) * 30 + 10, 320,
($z - 1) * 30 + 20, $colors[$z]);
ImageString($im, 5, 330, ($z - 1) * 30 + 10, $fields[$z],
PHP: Image Manipulation(3/3)
Retrieving data (as PNG image) with PHP:
Retrieving data (as PNG image) with PHP (source):
PHP: Tutorials and Resources
PHP Introductory Tutorial:
PHP/MySQL Tutorial:
PHP for beginners:
PHP4 - Webserver-Programmierung f¨ur Einsteiger (book):
Developer Resources
Datenbank, MySQL und PHP:
Java Servlets and Java Server Pages (JSP)
Intro tutorial:
Book: Marty Hall, Core Servlets and JavaServer Pages, Sun Press/Prentice Hall (
Java servlets: server side Java applications
Java server pages: Java code mixed into HTML
Java applets: client-side applications
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
Current version: 5.5.4
Java Servlets: Advantages(1/4)
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 (
Java Servlets: Advantages(2/4)
If you already know Java (most probabaly you do ;))
Huge Java software libraries
Libraries for handling cookies, sessions, etc.
Java Servlets: Advantages(3/4)
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
Maintain information from request to request (e.g. session tracking,
Java Servlets: Advantages(4/4)
Written in Java with a standardized API
Servlets written for Microsoft IIS will run on Apache and other Web
All major Web servers support servlets (directly or via a plug-in)
Installing Servlet Container(1/3)
Servlet Container
Apache software foundation
for others see
Installing Servlet Container(2/3)
installation tomcat
# installation in verzeichnis ’/foo’
cd /foo
unzip <path-to-tomcat-archive>/
cd jakarta-tomcat-4.1.12
# start tomcat:
# stop tomcat:
tomcat: http://localhost:8080 or http://<hostname>:8080
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:
Configure Web server
Set URL prefixes which will be passed to Tomcat
Java Servlets - Internal(1/2)
Java class extending abstract class
Implement public void doGet(request, response) to handle
HTTP GET method
Other methods (need not be implemented)
e.g. public void doPost(request, response)
Java Servlets - Internal(2/2)
servlet template:
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
Java Servlets: Hello World(1/5)
Example: Hello World!
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException{
String hello = "Hello World";
PrintWriter writer = response.getWriter();
"\t\t<link rel = \"stylesheet\" type = \"text/css\" href = \"style.css\"
writer.println("\t\t<title>" + hello + "</title>");
writer.println(hello + " (" + (new Date()) + ")");
Java Servlets: Hello World(2/5)
Installing and running the HelloWorldServlet
Tomcat web applications (in webapp directory)
| |
| |
| |-*.jar
| |
| |-*.class
Java Servlets: Hello World(3/5)
web.xml declares all servlets in a particular Web application
<?xml version="1.0" encoding="ISO-8859-1"?>
"-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
<servlet-name>Hello World Servlet</servlet-name>
<description>Hello World from a Java servlet</description>
<servlet-name>Hello World Servlet</servlet-name>
Java Servlets: Hello World(4/5)
Hello World:
Source code:
Java Servlets: Hello World(5/5)
Element Construction Set (Apache project)
Supports generation of HTML and XML
No need for numerous println statements
Copy ecs.jar into lib directory!
Hello World with ECS:
Source code:
Java Servlets: HTTP and Environment Variables(1/2)
Similar communication mechanism between a Java servlet and the Web
All communication wrapped in a high-level Java objects (e.g. HttpServletRequest)
Java Servlets: HTTP and Environment Variables(2/2)
CGI Variables:
Source code:
HTTP Headers:
Source code:
Java Servlets: Handling Forms(1/2)
All form parsing done automatically
Invoke a method on the instance of HttpServletRequest class to obtain
String name = request.getParameter("name");
Java Servlets: Handling Forms(2/2)
Example with GET:
Example with POST:
Source code:
Java Servlets: Database Manipulation(1/5)
Advantage of Java: great support for database connectivity
Similar to PHP
Java Database Connectivity - JDBC
Drivers for many DBMS available
For MySQL copy mysql-connector-java.jar into lib directory
Advanced features: Persistent database connections
Huge advantage over CGI!
Java Servlets: Database Manipulation(2/5)
Example: Inserting and retrieving data from MySQL database
Form for inserting data:
Java Servlets: Database Manipulation(3/5)
Connection connection = DriverManager.getConnection(
"jdbc:mysql://" + dbms_host_ + "/" + dbms_db_,
Statement statement = connection.createStatement();
int row = statement.executeUpdate(
"INSERT INTO " + dbms_db_table_ + " VALUES(’" +
name + "’,’" + second_name + "’,’" + nr + "’,’" +
study_field + "’,’null’)");
Inserting data with Java (source):
Java Servlets: Database Manipulation(4/5)
Retrieving data with Java
Connection connection = DriverManager.getConnection(...);
Statement statement = connection.createStatement();
ResultSet result = statement.executeQuery(
"SELECT * FROM " + dbms_db_table_);
String name = result.getString("name");
TR table_row = new TR(true);
table_row.addElement((new TD(true)).addElement(name));
Java Servlets: Database Manipulation(5/5)
Retrieving data with Java
Retrieving data with Java (source):
Java Servlets: XML Manipulation(1/2)
Java SE 1.4+ includes library for manipulating XML data
Element root = document.createElement("Course");
Connection connection = DriverManager.getConnection(...);
Statement statement = connection.createStatement();
ResultSet result = statement.executeQuery("SELECT * FROM " + dbm
String name = result.getString("name");
Element el_name = document.createElement("name");
Text name_text = document.createTextNode(name);
Java Servlets: XML Manipulation(2/2)
Retrieving data (as XML) with Java:
Retrieving data (as XML) with Java (source):
Java Servlets: Tutorials and Resources
Java Servlets Introductory Tutorial:
Book: Marty Hall, Core Servlets and JavaServer Pages, Sun Press/Prentice Hall (
JDBC Tutorial:
Developer Library (includes form multipart parser)
Developers Resources
Java Server Pages (JSP)
Combine static HTML with Java Code
<TITLE>JSP-Hello World</TITLE>
Static Hello World<BR>
<% out.print("Dynamic Hello World :-)<br>"); %>
HelloWorld JSP:
Java Server Pages (JSP) - Internal
JSP pages are converted to Java classes
public void _jspService(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException
out.write("<HTML>\r\n <HEAD>\r\n
<TITLE>JSP-Hello World</TITLE>\r\n
</HEAD>\r\n <BODY>\r\n");
JSP Elements(1/7)
JSP expression
<%= "Hello World <BR>" %>
XML syntax: <jsp:expression>
JSP expression evaluated and printed out!
JSP Elements(2/7)
JSP Scriplet
<% out.print("Hello World <BR>");
XML syntax: <jsp:scriptlet>
JSP scriplet code is inserted into the service method and executed
Combining JSP scriplet and JSP expression:
<% String hello2 = "Hello World <BR>"; %>
<%= hello2 %>
JSP Elements(3/7)
JSP Declaration
<%! private int access_count = 0; %>
XML syntax: <jsp:declaration>
JSP declaration code is inserted outside the service method
JSP Elements(4/7)
JSP Page Directive
<%@ page import = "java.util.*" %>
XML syntax: < import=”java.util.∗”/>
Directions to the servlet engine about general page setup
import, session, buffer, mimeType, etc.
JSP Elements(5/7)
JSP comments
JSP Include Directive (includes other files at run-time)
JSP Elements to handle Java Beans
JSP Elements(6/7)
JSP predefined variables
request, response
config, pageContext
JSP Elements(7/7)
Servlets, CGI, JSP, PHP, ... - Problems!(1/3)
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
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
Servlets, CGI, JSP, PHP, ... - Problems!(3/3)
Java Web Frameworks try to solve this problem
Coocon (XML Publishing framework)
More on Java Web Frameworks in MMIS 2
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
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)
Session Tracking(2/5)
Keep track with:
Hidden form fields:
<INPUT type=”HIDDEN”name=”sessionInfo”value=”username”>
Session Tracking(3/5)
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
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, ...)
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:
Session example (source):
Distributed Programming on the Web
Very hot topic right now
.NET from Microsoft
Web services
More on Web services in MMIS 2
Download PDF