Föredrag om dynamisk webbprogrammering

Kulturanatomen 2002-03-04
SSLUG & DF 2002-05-08
Linus Walleij (min hemsida).

Lite exempel som visades, exemplen gör inget anspråk på att vara lämpade för skarp drift, endast för test av principerna bakom CGI.

Serverside scripting/programming: samma CGI-script i olika språk

Unix BASH (test.sh):

#!/bin/sh
echo 'Content-type: text/html'
echo
echo '<html>'
echo ' <head>'
echo ' <title>Test Page</title>'
echo ' </head>'
echo ' <body>'
echo ' <h1>It Worked!</h1>'
echo '<p>'
echo $REMOTE_HOST
echo '</p>'
echo ' </body>'
echo '</html>'

Testa programmet

Perl (test.pl):

#!/usr/bin/perl -w

use strict;

print <<EOT;
Content-Type: text/html; charset=iso-8859-1

<html>
<head>
<title>Test Fnord</title>
</head>
<body>
<h1>It Worked!</h1>
<p>
EOT
print "$ENV{REMOTE_HOST}";
print <<EOT;
</p>
</body>
</html>
EOT

C:

int main(int argc,
         char *argv[])
{
  const char *host = (char *) getenv("REMOTE_HOST");

  printf("Content-Type: text/html\n\n");
  printf("<html>\n<head>\n<title>Test Fnord</title>\n</head>\n");
  printf("<body>\n<h1>It Worked!</h1>\n<p>\n");
  printf(host);
  printf("</p>\n</body>\n</html>\n");
}

Kompilera med gcc -o test.cgi test.c

Hypertextpreprocesorer:

Kända som:

Server Side Includes (foo.shtml):

<html>
<head>
<title>Test Fnord</title>
</head>
<body>
<h1>It Worked!</h1>
<p>
<!--#echo var="REMOTE_HOST" -->
</p>
</body>
</html>

Testa programmet

Cold Fusion (foo.cfm):

<html>
<head>
<title>Test Fnord</title>
</head>
<body>
<h1>It Worked!</h1>
<p>
<cfoutput>#CGI.remote_host#</cfoutput>
</p>
</body>
</html>

ASP (foo.asp):

<html>
<head>
<title>Test Fnord</title>
</head>
<body>
<h1>It Worked!</h1>
<p>
<%
    Response.Write Request.ServerVariables("REMOTE_HOST")
%>
</p>
</body>
</html>

PHP (foo.php):

<html>
<head>
<title>Test Fnord</title>
</head>
<body>
<h1>It Worked!</h1>
<p>
<?php
    echo $_SERVER["REMOTE_HOST"]
?>
</p>
</body>
</html>

Testa programmet

Generellt rörande CGI-program och preprocessorer:

Vad gör CGI-program / hypertextpreprocessorer oftast?

Roligt exempel på CGI-program:

http://www.elsewhere.org/cgi-bin/postmodern/ - tryck "Reload" några gånger. Förstasidan på min hemsida är också helt dynamisk (för att inte säga dadaistisk) vilket man ser om man kör "reload" ett par gånger.

Vad behöver man kunna för att skriva bra serverside-kod?

Vanliga kombinationer:

Windows 2000
Internet Information Server (IIS)
ASP (Active Server Pages)
Microsoft SQL Server

GNU/Linux eller Free/Open/NetBSD
Apache
PHP (Hypertext Preprocessor)
MySQL

IBM 360
Websphere
JSP
J2EE
Oracle


Clientside scripting/programming

JavaScript/JScript/ECMAscript exempel:

<html>
<head>
<title>10.000</title>
<script language="JavaScript">
<!--
function calculatedate()
{
        var strSplitme = (document.TheForm.fodelse.value);
        arrayOfStrings = strSplitme.split('-',3);
        var dtmFodd = new Date(arrayOfStrings[0],arrayOfStrings[1]-1,arrayOfStrings[2]);
        intMillis = dtmFodd.valueOf();
        intMillis = intMillis + (24*60*60*1000*10000);
        dtmFodd.setTime(intMillis);
        var intYear = dtmFodd.getFullYear();
        var intMonth = dtmFodd.getMonth()+1;
        var strMonth = new String(intMonth);
        if (strMonth.length<2) strMonth = '0'+strMonth;
        var intDay = dtmFodd.getDate();
        var strDay = new String(intDay);
        if (strDay.length<2) strDay = '0'+strDay;
        var strDate = 'All right du blir 10.000 dagar ';
        strDate = strDate+intYear+"-"+strMonth+"-"+strDay;
        alert(strDate);
}
//-->
</script>
</head>
<body>
<p>När blir jag 10.000 dagar?</p>
<form name="TheForm">
<input name="fodelse" type="text" size="10" value="1972-06-05">
<input type="button" onClick="calculatedate()" value="räkna din djävul">
</form>
</p>
</body>
</html>

Testa här:

När blir jag 10.000 dagar?

Skriv in ditt födelsedatum:

Fibonaccital:

function fibbonum(i)
{
        if (i == 0 || i == 1)
	    return 1;
	else
	    return fibbonum(i-1) + fibbonum(i-2);
}

function fibbostring()
{
        var x = "";
        for (i = 0; i < 16; i++)
	    x = x + fibbonum(i) + ", ";
	x += "....";
	alert(x);
}

Document Object Model (DOM)

Används för att lokalisera objekt i en webbsida så att de kan processeras av Javascript/Jscript/ECMAscript.

Används också i Cascading Style Sheets (CSS) för att välja vilka delar av markup:en man vill påverka.


I framtiden...

I framtiden vill vi skilja på form och innehåll och därför vill vi använda XML för innehållet och XSL för formen.

Redan idag kan vi använda HTML för innehållet och CSS för formen om vi är noggranna.


Länkar jag tycker är bra att börja med:

INTERNET DEVELOPMENT

HISTORICAL

History of the Web
History and growth
A Little History of the World Wide Web
Tim Berners-Lee: A short history of web development
A Brief History of the Internet
Michael Buckland's Paul Otlet Page
Internets födelse 17 maj 1991
Index of /History

HTTP

HTTP - Hypertext Transfer Protocol Overview
Libwww - the W3C Sample Code Library
Libwww Ready to go Samples
Index of /Library/src
Forms in HTML documents
Downloader Comparison Table

MIME

IANA Home Page
FTP for media types
MIME References
MIME (Multipurpose Internet Mail Extensions)
The 8:th bit liberation movement!
comp.mail.mime FAQ (frequently asked questions list)
MIME media types
Appendix A: MIME Type Detection in Internet Explorer

BROWSERS

mozilla.org
N E O P L A N E T
NCSA Windows Mosaic Home Page
Pages Enhanced for Lynx

CSS

Cascading Style Sheets
Browser Compatibility
CSS Frequently Asked Questions - The HTML Writers Guild
Cascading Style Sheets, level 1
Cascading Style Sheets, Level 2

DHTML DOM etc

Document Object Model (DOM) Level 1 Specification
Document Object Model References
SBN/SDK Merge Prototype
Offline Browsing

CGI

The Common Gateway Interface Specification
Quick References to the Common Gateway Interface
CGI Programming FAQ: INDEX
Introduction to Object-Oriented Programming
cgic: an ANSI C library for CGI Programming
CGI.pm - a Perl5 CGI Library
Index for HTML-specs
An instantaneous introduction to CGI scripts and HTML forms, Academic Computing Services, University of Kansas
Perl Tutorial
CGI and other Environment Variables for the WN Server

ASP

COMponents

ServerObjects Inc. Products
VBAObjects
Recordset
SQL Tutorial
SA-FileUp
Database Access Component
ASPFServ Component
W3 JMAIL (tech.dimac.net)
15 Seconds : Component Products : ADSI
CDOLive - Code Sample Library
Windows Update: Active Directory Service Interfaces (ADSI) 2.5 : [Download, downloads, beta, Microsoft Active Directory Service Interfaces, ADSI, directory management, applications, Microsoft Visual Basic, Java, or C/C++]

ODBC/SQL ex

ASP 101 - A Database Interfacing Primer
Visual FoxPro Database Publishing

ASP apps

JADA Productions Test Discussion Forum

FAQ
Roadmap
.NET FAQ
ZForum-ASPXchange
Sample Active Server Pages
ASP Developers Network
Active Server Pages Technical Support Home Page
Working with ASP
Using/Learning ASP VBSCRIPT, ACTIVESERVER, ActiveX
Best and Brightest Active Server Pages (ASP)
PRB: ASP Fails to Access Network Files Under IIS 4.0
15 Seconds : ADO Section
dbtroubleshoot ASP Quick Lessons
activeserverpages.com The most popular ASP resource in the World

PHP

PHP: PHP: Hypertext Preprocessor
PHP3: Browser Capabilities Registry for PHP 3
PHP: Frequently Asked Questions
MySQL by T.c.X. DataKonsultAB
Welcome to the Asp Tracker Home Page
SourceForge: Project Info - PHP Client Sniffer
Gallery

HTML

HTML Home Page
HTML 4.0 Working Draft Release
Bare Bones Guide to HTML
Colors
Advanced HTML
Introducing HTML 3.2
Index for HTML-specs
Mind Reading Markup Language (MRML)
RTFtoHTML Version 4

Skräckexempel

LOCUS lokalbokningssystem vid Lunds Universitet
web pages that suck -- web design, html, design, web pages
Webbplatskritik - Autark Datakonsult AB

TCP/IP Sockets

Programming UNIX Sockets in C - Frequently Asked Questions
DHCP FAQ

XML

EMACS

Mulberry Technologies -- tdtd Emacs Major Mode for SGML and XML DTDs
A GNU Emacs mode for SGML files

Microsoft

Microsoft XML Notepad
XMLDOMDocument Object Members
XMLDOMDocument Object
MSDN Online Tools - XML Parser

Extensible Markup Language (XML)
James Clark's Home Page
expat
XML Sweden AB
XML.com - XML Suite
Frequently Asked Questions about the Extensible Markup Language
Clean up your Web pages with HTML TIDY
XML Resources
Extensible Markup Language (XML)
SGML/XML Sverige Ny II
Public SGML/XML Software
XMLGuiden
Free XML software
XHTML strict DTD
Extensible Stylesheet Language (XSL)
Using XSL for Structural Validation
Declaring Elements and Attributes in an XML DTD
Weird Scenes Inside The Goldmine
XSL Transformations (XSLT)
Whitehill Technologies - Products
xmlTree - The only directory of XML content on the Web
W3C XML Schema

WAP / WML

W3C: Mobile Access
WAP Forum
WAP Forum
WAPman
Wireless Application Protocol
WebCab.de: Fetch Page

ETEXT

Bookbooters: eBook formats explained
Welcome to Project Runeberg
Support for Windows CE (About Project Runeberg)
Making of America
PROJECT GUTENBERG OFFICIAL HOME SITE - INDEX
rtf2latex2e Homepage
RTF-Tools -- RTF software and documentation
The web site of the UK TeX Users' Group
ISO 8859 Alphabet Soup
Unicode Home Page
Unicode FAQ
Thomas Merz Consulting & Publishing
Standards -- Electronic Text Center
TEI Consortium
ISO 639 Language Codes -- Electronic Text Center
David Seaman. Guidelines for Text Mark-up at the Electronic Text Center, University of Virginia: Special Characters
Get Going With DocBook
Open eBook
Free-ePress.com: Because you deserve to know what you're paying for.
Jonas Webresurs/Webdesign/lang-attributet
RTFtoHTML Version 4
An attempt to map wingdings to existing unicode characters
eGroups : rss-dev Files
Slashdot | Microsoft Ebooks and Copy Protection
RTF @ MSDN
www.openoffice.org
Microsoft Reader
DjVuLibre: Open Source DjVu library and viewer

IRC ICQ CHAT etc

IrcW3 gateway help
WWW-IRC GATEWAY HOMEPAGE
iPulse

RFC o dyl

IETF Home Page
"Internet Society" (ISOC): Welcome Internet Society (ISOC) Web Site
W3C - The World Wide Web Consortium
Babel -- Internationalization of the Internet
Request for Comments (RFC) Editor Homepage
Current Internet-Drafts
xml2rfc

LOOKUP FINGER etc

Logfinger
Finger Gateway
NSLOOKUP Gateway
InterNIC DNS Look Up Service
RIPE NCC: Whois Queries
Traceroute Gateway
Multiple Traceroute Gateway
Ping Gateway
Ping Gateway
Traceroute Gateways
WHOIS | VeriSign

LDAP

OpenLDAP, Title

MAIL

Jari's Procmail index page
Procmail FAQ
The Spam Bouncer: a Procmail-Based Spam Filter
Mail Abuse Prevention System
4.1. SMTP COMMANDS
Outlook 97 Articles Available by Fax or E-Mail: Forms\Internet
OL97: Forwarded Message Behaves Differently with Rules Wizard
Microsoft BackOffice

WEBSERVRAR

Apache

mod_ssl: The Apache Interface to OpenSSL
The mod_mime_magic Module for Apache HTTPD
CVS log for apache-2.0/conf/magic
Apache CVS Repository
Apache Project Development Site
Apache URL Rewriting Guide
Apache-SSL
Apache Project

IIS

http://www.microsoft.co...IS/Resources/online.htm

The NCSA HTTPd Home Page
Home of The Webalizer
Microsoft Internet Information Server
Roxen: Roxen Challenger - Best of Comdex Winner
R M S: The Roxen Module Source

FTP

WU-FTPD Development Group
Official Shaolin Secure FTP Site

JAVA Script

Determining Browser Type and Version with JavaScript
JavaScript Reference
JavaScript Guide 3.0
NetscapeWorld - JavaScript - Customize users' experiences dynamically - March 1997
Javascript Goodies (Resource Center)
The Nasty JavaScript Tricks: Welcome
The Nasty JavaScript Tricks: Finding Your Installed Plug-ins

PDF

Project Cool Acrobat(R) Developer Zone
Dynamic PDF
Emerge - Solutions for the PDF Professional
Thomas Merz Consulting & Publishing
Q pdf dynamic writer
Web Server Printing Toolkit

ISDN

ISDN-tips, Ken Ehrsson (swedish version)

WEBDAV

WebDAV Resources

Juridiska spetsfundigheter

Svensk Lagsamling
Patent- och registreringsverket skyddar patent, varumärken, mönster och namn

Jonas Webresurs: Sveriges bästa webbskola! www.jonasweb.nu