Sei sulla pagina 1di 53

Programming the Web Server

Robert M. Dondero, Ph.D.


Princeton University

1
Objectives

You will learn:


How to "program the web server" using...
PHP
JSP

2
Previously

CGI Programming

Browser Web Server Application runs in distinct


Socket process from web server
HTTP
Pipe
CGI protocol
Application
Pipe
CGI protocol

Socket
HTTP
Browser Web Server database somefile

3
Now

Programming the Web Server


Application runs (typically) as
thread within web server process
Browser
Web Server
Socket
HTTP
Application

Socket
HTTP

Browser
database somefile

4
Part 1: PHP

5
PHP

Who: Rasmus Lerdorf


When: 1995
Why: Create Web apps
that generate pages
dynamically
The name:
Personal Home Page
And later...
PHP Hypertext Processor (recursive acronym)
6
PHP Good News and Bad News

Good news
Apache web server handles PHP
PHP is available on CS computers
Bad news...

7
PHP as a Pgmming Language

Yet another programming language!


And (IMHO) an inelegant one
No time (and inappropriate) to cover thoroughly
See my personal "Subset of PHP"
Link on web pages
Some familiar examples that might help...

8
PHP Examples

See hello.php
Program structure
The echo command
The build/run process
See square.php
Function definitions
Variables
Parameters
String concatenation
9
PHP Examples

See circle.php
Interpreted strings
The fscanf() function
As in C
The printf() and fprintf() functions
As in C
More powerful, less efficient, than echo
command
See euclid.php
Control flow
10
PHP Examples

See intmath.php, testintmath.php


Multi-file programs

Exec Continues File Included


Upon Failure? Only Once?

include y n
include_once y y
require n n
require_once n y

11
PHP Examples

See fraction.php, testfraction.php


Object oriented programming
"$this" object reference
"->" field selector operator
Exception handling

12
PHP Examples

See calls1.php
Call-by-value and call-by-reference
See calls2.php
Call-by-value and call-by-reference with objects
See testdivmod.php
"Returning" multiple values
Call-by-value and call-by-reference
See immutable.php
Immutability of strings
13
PHP Examples

See arrays.php
Arrays
Arrays are not objects!!!
"foreach" statement
See formatter.php
Constants
String manipulation; uninterpreted strings
File handling
Command-line arguments
Regular expressions 14
PHP Examples

See linesort.php
Arrays, sorting, file-handling
Note CPU time consumed
See concord.php
Regular expressions
Associative arrays
Note CPU time consumed

15
PHP for Database Programming

See selectrows.php
Uses the mysqli library (not the mysql library)
See updaterows.php
Transactions
See trans.php
Transactions for recovery
See selectrowsprepared.php
Prepared statements

16
PHP for Web Programming

The Pennypack sequence in PHP...

17
PennypackPhp1 Application

See PennypackPhp1 application


book.php
database.php
index.html
header.php, footer.php
searchform.php, searchresults.php
Generalizing...

18
PHP Superglobal Variables

Superglobal Contents
$_GET Data passed to the current script via
the HTTP GET method
$_POST Data passed to the script via the
HTTP POST method
$_COOKIE Data passed to the script via
cookies
$_SESSION Session data (see description later
in this lecture)
$_REQUEST The union of %_GET, %_POST, and
%_COOKIE
$_SERVER Headers, paths, script locations,
etc.; varies with web server
... ...

19
Toward PennypackPhp2

Problem:
Missing author name is not handled as I wish
Solution:
PHP header() function...

20
PennypackPhp2 Application

See PennypackPhp2 Application


book.php
database.php
index.html
header.php, footer.php
searchform.php, searchresults.php
Generalizing...

21
PHP header() Function

header() function
Sends header to browser
In this case
Sends "location" header to browser
Header specifies web page
Browser automatically visits specified web page

22
Toward PennypackPhp3

"Problem"
Want "previous search" field in searchform page
"Solution"
Sessions via the session implicit object

23
PennypackPhp3 Application

See PennypackPhp3 Application


book.php
database.php
index.html
header.php, footer.php
searchform.php, searchresults.php
Generalizing...

24
PHP $_SESSION Superglobal

Another superglobal variable...


$_SESSION
An associative array()
Provides access to saved "name=value" state pairs

25
PHP session_start()

session_start() function
Commands web server to:
Accept "PHPSESSID=key" cookie from browser,
or create "PHPSESSID=key" cookie
Extract key from cookie
Use key to populate $_SESSION with saved
"name=value" state pairs
Allow PHP code to use/modify $_SESSION
Pass "PHPSESSID=key" cookie to browser

26
Part 2: JSP

27
JSP

Who: Sun
When: 1999
Why:
"Address the perception that the Java programming
environment didn't provide developers with enough
support for the Web" Wikipedia
Sun's answer to PHP (and Microsoft's ASP)
The name:
JavaServer Pages
28
Bad News

Bad news
Apache web server does not handle JSP
Not available on CS computers
Why study JSP?
May be useful for projects
Conceptual bridge between CGI Web programming
and "PHP-style" Web programming
New language isn't necessary!

29
JSP Examples

Using the Apache Tomcat web server


Running locally on my computer
http://localhost:8080/PennypackJsp1/index.html

30
PennypackJsp1 Application

See PennypackJsp1 Application


DateTime.java, Book.java, Database.java
Cannot be in the anonymous package
index.html
searchform.jsp, searchresults.jsp
header.jsp, footer.jsp
Generalizing...

31
JSP Hidden Comment

Hidden comment
<%-- some text --%>
Not sent to Web server
Not sent to browser
As opposed to...
Output comment (not illustrated)
<!-- some text -->
Ordinary HTML comment
JSP Page Directive Tag

"Page Directive" Tag


<%@page language="java"
import="package.class, package.class" %>
Specifies language
Java
... or JavaScript???
Specifies classes to import

33
JSP Scriptlet Tag

"Scriptlet" Tag
<% JavaCodeFragment %>
Contains arbitrary Java code
Uses implicit objects...

34
JSP Implicit Objects

Implicit Objects
request: getParameter(), getParameterNames(),
getParameterValues()
out: print(), println()

35
JSP Expression Tag

"Expression" Tag
<%= JavaExpression %>
Shortcut for:
<% out.print(JavaExpression) %>

36
JSP Include Tag

"Include" Tag
<jsp:include page="{ relativeURL |
<%= JavaExpression %> }" flush="true" />
At run-time, output generated by relativeURL
replaces the tag

37
Toward PennypackJsp2

Problem:
Missing author name is not handled as I wish
Solution:
JSP forwarding...

38
PennypackJsp2 Application

See PennypackJsp2 Application


DateTime.java, Book.java, Database.java
index.html
searchform.jsp, searchresults.jsp
header.jsp, footer.jsp
Generalizing...

39
JSP Forward Tag

"Forward" Tag
<jsp:forward page={ relativeURL |
<%= expression %> }" />
Forwards a client request to an HTML file or JSP
file for processing

40
Toward PennypackJsp3

"Problem"
Want "previous search" field in searchform page
Must make the application stateful
Solution
Sessions via the session implicit object

41
PennypackJsp3 Application

See PennypackJsp3 Application


DateTime.java, Book.java, Database.java
index.html
searchform.jsp, searchresults.jsp
header.jsp, footer.jsp
Generalizing...

42
JSP: Another Implicit Object

Implicit objects (cont.):


session
putValue()
session.putValue() populates session implicit
object with "name=value" state pair
Web server stores "name=value" state pairs on
server side; associates state with key; passes
"JSESSIONID=key" to browser as cookie
getValue()
Web server accepts "JSESSIONID=key" cookie
from browser; extracts key from cookie;
populates session implicit object with
"name=value" state pairs
session.getValue() accesses "name=value" state
pair 43
JSP App Deployment
Using the Apache Tomcat web server:
tomcat

webapps

PennypackJspX
WEB-INF
classes
pennypack
Book.java
Book.class
Database.java
Database.class
DateTime.java
DateTime.class
lib
web.xml
footer.jsp
header.jsp
index.html
searchform.jsp
searchresults.jsp 44
PHP & JSP Parting Thoughts

JSP vs. PHP:


JSP pro: Less eccentric syntax
JSP = Java + some tags
JSP pro: More powerful
Java language, libraries, docs are available
PHP pro: Apache web server support
PHP pro: Simpler, "easier to learn"
Unless you already know Java!!!

45
PHP & JSP Parting Thoughts

PHP & JSP are CGI "turned inside out"

CGI
Program generates HTML
PHP & JSP
HTML contains program

46
PHP & JSP Parting Thoughts

Fixed template data only


=> Use HTML; JSP/PHP adds no value
Dynamically generated data only
=> Use CGI; JSP/PHP adds little value
Mixture (as is almost always the case)
=> PHP/JSP adds value

47
Summary

We have covered:
How to "program the web server" using...
PHP
JSP

48
Appendix 1: PSP

49
PSP Overview

PSP (Python Server Pages)


Java:JSP :: Python:PSP

50
PSP Overview

Good news
Apache web server handles PSP...
Via mod_python plug-in module
Bad news
mod_python not installed into CS Apache web
server
PSP not available on CS Apache web server
An example using Apache/mod_python running
on my local computer...
PennypackPsp1 Application

See PennypackPsp1 application


book.py, database.py
index.html
common.py
searchform.psp, searchresults.psp

52
PSP Parting Thoughts

PSP parting thoughts


A little awkward
Python indentation significant =>
Awkward merge into HTML
(IMHO) Not ready for prime time
Fragile
Poorly documented

53

Potrebbero piacerti anche