CGI - IDt - Mälardalens högskola

Lagring och sökning av webbdokument
Ett 10p examensarbete på C-nivå utfört på WM-data genom Institutionen för
Datateknik , IDt, Mälardalens högskola
Handledare:
Filip Sebek IDt
Christina Pettersson, WM-data
Bertil Brandt, WM-data
Eskilstuna 2000-09-20
Anette Gustavsson
Sammanfattning
Det här examensarbetet på C-nivå handlar om ett interaktivt dokument som ligger länkad till
en befintlig webbsida. För varje gång en användare fyller i dokumentet sparas det på en
UNIX-server som en unik fil. Dokumentet är uppbyggt med HTML-formulär som innehåller
ett antal tabeller med namngivna fält i.
Innan dokumentet sparas på servern kontrolleras att dokumentet har vissa fält ifyllda med
hjälp av JavaScript. När dokumentet sparas skickas innehållet i fälten som en URL-kodad
sträng till ett Perl-skript som läser in strängen och placerar värdena i variabler.
Dessa variabler sätts som standardvärden i ett nytt HTML-formulär och sparas till ett unikt
filnamn.
På valda fält i dokumentet kan man sedan söka och få fram de sparade dokument som
överensstämmer med det sökta fältet. Sökmotorn är skriven i språket Perl och grunden har
lånats från Excite med anpassningar gjorda för att passa detta specifika syfte. Det här har
testats åtskilliga gånger på en testserver.
Rapporten innehåller mycket grundbegrepp som är kortfattat förklarade.
Abstract
This C-level thesis is about an interactive document which is linked to an existing website.
Every time someone has written in the document it is saved on a UNIX server as a unique file.
The document is built with an HTML-form that contains several tables with named fields.
Before the documents are saved on the server a JavaScript makes sure that certain fields are
filled in. When the document is saved its content in the fields is sent as a URL-coded string to
a Perl-script that reads the string and sets the value to variables. These variables are set as
standard values in a new HTML-form that is saved to a unique filename.
On chosen strings a search is possible so that every matching document is found and shown.
This search function is written in the language Perl and its base is made by Excite and brought
into line of this specific purpose. It has been tested many times at a test server.
This report contains many shortly explained terms.
2
Innehållsförteckning
Sammanfattning ......................................................................................................................... 1
Abstract ...................................................................................................................................... 2
Innehållsförteckning ................................................................................................................... 3
Bakgrund .................................................................................................................................... 4
Outsourcing ............................................................................................................................ 4
Lawson ................................................................................................................................... 4
Syfte ........................................................................................................................................... 5
Avgränsningar ............................................................................................................................ 5
Relevant teori ............................................................................................................................. 6
Webbserver............................................................................................................................. 6
UNIX ...................................................................................................................................... 6
HTTP ...................................................................................................................................... 6
WWW..................................................................................................................................... 7
URL / URI .............................................................................................................................. 7
CGI ......................................................................................................................................... 8
HTML..................................................................................................................................... 8
SKRIPT .................................................................................................................................. 9
Programmeringsspråk ............................................................................................................. 9
JAVASCRIPT .................................................................................................................. 10
Perl ................................................................................................................................... 10
Problembeskrivning ................................................................................................................. 11
Problemanalys .......................................................................................................................... 11
Modell/Metod ........................................................................................................................... 12
Dokumentet .......................................................................................................................... 12
Kontroll av dokument........................................................................................................... 12
Lagring av dokument ........................................................................................................... 12
Sökning av dokument ........................................................................................................... 13
Lösning ..................................................................................................................................... 14
Driftsättningsdokumentet ..................................................................................................... 14
Formulär ........................................................................................................................... 14
Tabeller............................................................................................................................. 14
Inmatningsfält................................................................................................................... 15
Kontroll av dokument........................................................................................................... 15
Lagring av dokument ........................................................................................................... 15
Sökning av dokument ........................................................................................................... 16
Testning .................................................................................................................................... 16
Resultat ..................................................................................................................................... 16
Analys av arbetet ...................................................................................................................... 17
Referenser................................................................................................................................. 18
Internet ................................................................................................................................. 18
Litteratur ............................................................................................................................... 18
Personliga referenser ............................................................................................................ 18
Bilagor ...................................................................................................................................... 18
3
Bakgrund
Outsourcing
I samband med övergången från en i huvudsak stordatorbaserad drift till en distribuerad och
decentraliserad drift uppstod i slutet av 80-talet och början av 90-talet en ny marknad för s.k.
outsourcing, som innebär att man lägger ut delar av verksamheten på entreprenad.
När företaget NCC beslutade att införa en nätverksbaserad standardiserad IT-plattform som
grund för en ny generation av IT-stöd i hela sin nordiska verksamhet las detta ut på WM-data
på entreprenad. Det här samarbetet innebar för WM-data inte bara en utmaning avseende på
den tekniska utvecklingen utan också krav på en helt annan form av användarstöd än vad som
tidigare varit vanligt. I NCC’s starkt decentraliserade och delvis mobila organisation finns
tusentals användare vars dagliga arbete blir successivt allt mer beroende av WM-datas
förmåga att upprätthålla tillgänglighet och service.
Lawson
En del i NCC’s outsourcing av IT-verksamheten är deras system Lawson. Det är ett system
som är installerad på en UNIX-plattform med operativsystemet HP-UX 11.0. Lawson Insight
Environment är Lawsons miljö för system- och databasadministration. Det består bl.a. av ett
dictionary och ett antal samordnande UNIX-processer som hanterar de olika meddelanden
som applikationen skickar och tar emot på uppdrag av tillämpningens användare.
Lawson har följande processer:
 LADB (Lawson Database Process) handhar kommunikationen mellan Lawsons
applikationer och databasservern.
 LAJS (Lawson Jobqueue Server) exekverar alla batchprogram.
 LATM (Lawson Transaction Manager) gör att användare som kör samma program I
Lawson använder samma process.
De flesta program är idag interaktiva, d v s det finns möjlighet att ”föra dialog” med
programmet och på så vis påverka vad programmet gör. Motsatsen till interaktiv
databehandling är satsvis bearbetning eller batch, där programmet behandlar förpreparerade
data och körs från början till slut utan att någon människa ingriper under tiden. Det finns
ytterligare en form av databehandling, nämligen sådan som görs med realtidsbearbetning, där
det som utförs av programmet styrs av händelser i omgivningen men där inte nödvändigtvis
någon människa ingriper.
Lawson använder sig av satsvis bearbetning och varje natt så körs det cirka 130 batchar som
kan vara rapportuttag eller utskick av filer till andra system. Dessa kan gå fel av en eller flera
orsaker, men oftast beror det på förändringar i något program eller i en applikation. Dessa
förändringar är godkända av NCC och arkiveras där. För WM-data innebär det att
felsökningen ibland blir onödigt lång bara p g a bristfällig information och det skapar
förvirring vid sammanställningar. Numera har även WM-data en kopia av förändringarna men
önskemål har framkommit om åtgärder som underlättar både NCC’s hantering av dessa s k
driftsättningar av förändringar och felsökning för driftansvarig personal på WM-data.
4
Syfte
Det här examensarbetet har som syfte att förenkla WM-datas drift av NCC’s system Lawson.
Alla förändringar som sker i applikationen Lawson skall dokumenteras på ett ställe där både
WM-data och NCC kommer åt att läsa materialet, fylla i nya driftsättningar och även göra
sökningar bland tidigare gjorda förändringar. Uppbyggnaden av dokumentet ska vara sådan
att det ska kunna förfinas och ändras efter behov och fler funktioner kan enkelt läggas till för
att utöka funktionaliteten och säkerheten.
Det skall också arkiveras ett antal månader på servern för att därefter brännas på CD-skiva.
Felsökningen för fel som uppstår p g a ändringar i applikationen ska väsentligt förenklas och
NCC ska få smidigare hantering och arkivering av driftsättningsdokumenten.
Avgränsningar
Detta examensarbete avser att göra en tillämpning så att dokumentationen av driftsättningar
på systemet Lawson förenklas och blir tillgängligt och lättbearbetat för berörd personal. CDhantering sker med hjälp av företaget Capella och berörs inte här. Inte heller finns
beskrivningar på arbetet med att lägga upp alla filer, behörighet på filerna och placeringar av
skript och HTML-kod på servern.
5
Relevant teori
Webbserver
En webbserver är en tillämpning som körs i bakgrunden på en dator, som lyssnar efter anrop
från webbläsare. När ett anrop kommer skickas antingen det begärda dokumentet eller ett
felmeddelande. De flesta webbservrar tillhandahåller dessutom olika tekniker så att
webbservern kan kopplas ihop med andra tillämpningar för ökad interaktivitet och
informationshämtning. Exempel på sådana tekniker är CGI (Common Gateway Interface),
ASP (Active Server Pages), Netscape LiveWire och PHP/FI. De tre stora webbservrarna är
UNIX, Windows NT och Macintosh.
UNIX
UNIX föddes 1969 vid Bell Laboratories, forskningsavdelningen vid American Telephone
and Telegraph Company. Det hela började med en enda man, Ken Thompson, som försökte
skapa en billigare och mer lättillgänglig programmeringsmiljö. UNIX, liksom de flesta
operativsystem, skrevs från början på assembler-språk som är en primitiv uppsättning interna
instruktioner som styr datorns interna arbete. För att göra UNIX flyttbart mellan datorer
skrevs operativsystemet om i ett språk på högre nivå kallat B som senare blev modifierat till
språket C. Det här gör att UNIX är lätt att modifiera och utveckla, det är en av de kraftfullaste
miljöerna, oerhört flexibelt och ger oslagbar prestanda. För att utnyttja systemet till fullo
måste man dock lära sig tänka i UNIX-termer.
HTTP
HTTP (Hypertext Transfer Protocol) är ett protokoll – en uppsättning regler för datorer som
kommunicerar via ett nätverk. HTTP-protokollet är utformat för att HTTP-klienter (t.ex
webbläsare) ska kunna begära information eller tjänster från HTTP-servrar (webbservrar).
HTTP är ett anslutningslöst protokoll vilket innebär att inte webbläsare och webbservrar
upprättar en anslutning till varandra utan istället skickar meddelanden fram och tillbaka. Alla
meddelanden som skickas mellan klient och server kräver viss information för att
meddelandet ska komma fram ordentligt. Det finns alltså inget inbyggt sätt att avgöra vilken
information som klienten och servern tidigare utväxlat.
Alla HTTP-anslutningar är utformade som ett antal anrop och svar.
HTTP använder innehållstyper, d v s tillsammans med alla objekt som skickas finns en
innehållstyp som talar om vilken objekttyp det är – ett HTML-dokument, en GIF-bild, en
ljudfil eller en annan tillämpning.
Innan HTTP-protokollet kan användas måste man ansluta datorn med webbläsaren till en
webbserver över nätverket. Anslutningen upprättas via ett TCP-protokoll som tillsammans
med Internet Protocol (IP) utgör grundstenarna i Internet. Man säger därför att Internet är ett
TCP/IP-nätverk. HTTP är ett tillämpningsnivå-protokoll och det är högsta nivån inom
TCP/IP-modellen.
6
WWW
För att förstå hur ett dokument blir synligt på WWW (World Wide Web) måste man känna till
hur WWW "fungerar". När någon klickar på en länk för att se ett dokument på WWW händer
följande:
1. Webbläsaren på klientdatorn kontaktar den dator som har dokumentet (servern) som
länken pekar på och begär att få dokumentet sänt till sig. I anropet skickas en adress
med (en s.k. URL; se nedan).
2. Servern letar upp dokumentet, som ligger i en fil på en hårddisk någonstans, och
skickar tillbaka det till klienten. Adressen används för att hitta den filkatalog där det
elektroniska dokumentet finns lagrat.
3. Webbläsare på klienten tolkar och visar dokumentet.
URL / URI
För att göra det enkelt att hitta dokument på webben, utformade World Wide Web
Consortium ett allmänt adressystem för var dokumentet finns. Adresserna kallas Uniform
Resource Locators (URL) eller Uniform Resource Identifiers (URI). De två termerna har
samma innebörd men URL är den vanligast förekommande.
En URL kan bestå av upp till fyra skilda delar, schema, dator, fil och ankare, och de olika
delarnas betydelse är viktig då man skapar en webbplats.
Den första delen av en URL kallas schema. Schemat refererar till protokollet som används för
att ansluta till resursen som specifieras i URL:en. Det vanligaste schemat är HTTP. Bland
andra scheman märks ftp, mailto och news.
Efter schema kommer namnet, eller IP-numret (Internet Protocol), på den server där resursen
finns. Ofta används serverns namn. När man använder ett namn tas IP-numret, som är kopplat
till namnet, fram via protokollet DNS (Domain Name Server). Webbläsare ansluter till
servern med hjälp av IP-numret som är unikt.
http://www.dator
Efter namnet på servern kommer namnet på den fil som anropas. Ofta betyder det namnet på
den faktiska filen. De flesta webbservrar tillåter ett standarddokument, ett dokument som
läses in automatiskt om inget filnamn anges i adressen. Filnamn kan anges i klartext.
http://www.dator.com/filnamn
Med hjälp av märket ”A NAME” kan man sätta in ankare i sina dokument. Dessa fungerar
som anropspunkter inom sidan. Om en stor sida skapats med fyra avsnitt kan ett ankare
markera början på varje avsnitt. Genom att ange ett ankare i URL:en så visas det begärda
avsnittet direkt.
http:// www.dator.com/filnamn.html#ankare
7
CGI
CGI (Common Gateway Interface) ansluter webbservrar till externa program. CGI kan göra
två saker. Det ena är att skicka information från en webbläsare till en webbserver och göra
informationen tillgänglig för en extern tillämpning. Det andra är att skicka utmatningen till
den webbläsare som frågade efter utmatningen. Alltså tar den emot information, bearbetar den
och visar resultatet (t ex en söktjänst). CGI har ett enkelt gränssnitt som gör det väldigt
flexibelt för såväl enkla som väldigt komplicerade uppgifter.
CGI utvecklades ursprungligen för UNIX-baserade webbservrar. Gränssnittet är inte speciellt
komplicerat så det är relativt enkelt att skriva tillämpningar som hanterar CGI-inmatning och
skapar utmatning som utförs via HTTP. För att göra uppgiften enklare finns det bibliotek
(moduler) till nästan alla språk. Dessa bibliotek kan t ex hantera insamling av data från
webbläsaren och spara det i ett format som är enkelt att läsa.
En av de stora fördelarna med att skriva webbtillämpningar i CGI är att det stöds av nästan
alla programmeringsspråk. Om språket kan läsa från standardinmatning och skriva till
standardutmatning kan det användas för att skriva CGI-tillämpningar. Kan man ett
programmeringsspråk är det oftast ingen fördel att lära sig ett nytt bara för CGI – utan man
kan programmera i det språk man kan bäst. Ett annat alternativ är att ta i beaktande hur många
CGI-biblioteksfunktioner som finns för de olika språken.
För att webbservrar och klientdatorer överhuvudtaget ska kunna kommunicera krävs att CGI
finns ovanför protokollet HTTP. Kommunikationen med HTTP fungerar med hjälp av en
process som heter demon (daemon), som körs på webbservern. En demon väntar på att en
klientdator ska försöka upprätta kontakt med webbservern.
GGI är också plattformsoberoende och finns inbyggt i de flesta webbserverpaket oavsett
vilken plattform som avses, UNIX, Windows NT eller Macintosh.
CGI-tillämpning och CGI-skript används ofta synonymt. Orsaken till det är att CGItillämpningar ofta är skrivna i skriptspråk. CGI är ju ”bara” en samling regler och man kan
använda många olika programmeringsspråk, allt ifrån Perl till Java, C++ och Visual Basic.
HTML
HTML (HyperText Markup Language) är en teckenbaserad metod att beskriva och visa
webbsidor. Texten omsluts av olika koder som en HTML-tolk tittar på för att avgöra hur sidan
ska se ut. Möjligheten att visa bilder och text tillsammans och länka samman dokument för att
skapa sammansatta hypertextdokument är två viktiga funktioner som gör webben visuellt
tilltalande och enkel att navigera.
HTML-koder (även kallad taggar, av tag på engelska) är speciella kodnamn som omges av
hakparanteser FEL! störreän och mindreäntecken hakparanteser är [] (<>) och oftast
förekommer parvis, en start-tagg och en slut-tagg.
HTML-koden tolkas av webbläsaren och visas sedan som en läsbar sida som vi lätt kan läsa
och titta på men HTML är inte begränsat till det utan kan även spela upp ljud, visa filmer samt
tillbehörsprogram. Där slutar dock finesserna. HTML har inga funktioner för att hämta
information från en databas, eller utföra något beroende på vad besökaren har gjort tidigare.
8
SKRIPT
För att få någon form av intelligens interaktivitet? bakom webbsidor krävs något mer och i
dag är det skript som gäller i första hand.
Ett skript är som en att-göra-lista för webbservern. Om besökaren vill se dagens aktiekurser,
så utför skriptet en rad saker för att till slut presentera dem i HTML-format i besökarens
webbläsare. Skript används även till enklare saker som gästböcker, sidräknare och
diskussionsforum.
Det finns på två olika typer av skript – de som körs på webbservern och de som kan förstås av
besökarens webbläsare.
Enkelt förklarat har skripten som körs på webbläsaren inga funktioner för att hämta
information från en databas, men kan användas till att styra hur till exempel webbläsarfönstret
ska uppföra sig och framför allt som en viktig del för att kunna göra element rörliga på
hemsidan (i dhtml).
Skript som körs på en webbserver har en oslagbar fördel – de kan spara information i till
exempel en loggfil, en fil som innehåller postade meddelanden, eller i en databas.Dessa skript
är nödvändiga om man vill kunna återanvända information som bygger på någon inmatning i
ett formulär, eller utnyttja information om vilka sidor besökarna har tittat in på.
Det finns olika typer av webbservrar på Internet men det finns inte någon riktig standard för
vilken typ av skript som ska användas på webbservrarna. Rena motsatsen till HTML, alltså.
Ett tydligt exempel är språket Vbscript som fungerar utmärkt på webbservern Internet
Information Server som är baserad på Windows NT, men inte fungerar alls under
webbservern Apache som är vanligast på Unixdatorer. Därför är det väldigt viktigt att veta
vilken typ av server som används innan man väljer ett skriptspråk.
Skript kan läggas som separata filer, men vissa skriptspråk kan dessutom läggas i samma fil
som HTML - koden ligger i. Vilket som är bäst är helt en smaksak, men många upplever det
enklare om skriptet ligger direkt i HTML-filen. JavaScript, Php och Vbscript är exempel på
sådana språk.
Programmeringsspråk
Det finns två typer av programmeringsspråk: kompilerade och interpreterande språk.
Kompilerade språk inkluderar C, C++, Java, Perl och Visual Basic. Interpreterande språk är
TCL, JavaScript och Bourne Shell-skript. Skillnaden mellan ett kompilerat och ett
interpreterande språk är att kompilerade språk utför kompilering och exekvering separat,
medan interpreterande språk kompilerar och tolkar koden på en gång.
Kompilerade tillämpningar är oftare lågnivåspråk än interpreterande språk vilket betyder att
de ofta ligger närmare det maskinspråk till vilken de kompileras. Interpreterande språk brukar
ofta kombinera flera uppgifter i en funktion eller i ett kommando vilket ger kraftfulla
funktioner och enklare kommandon. Skillnaden består främst i prestanda, flyttbarhet och
enkel programkontroll med avseende på t.ex. syntax.
Olika språk skiljer olika mycket och det finns för- och nackdelar med båda typerna av språk.
Det vanligaste språket för UNIX är Perl men även C/C++ och JavaScript är möjliga. Perl och
C/C++ var språk som kunde användas för att skapa CGI-tillämpningar men vad är skillnaden
mellan JavaScript och CGI?
JavaScript - kod sparas i webbsidan och utförs av en webbläsare. När man besöker en sida
som använder JavaScript kan man studera sidans källkod och även JavaScript-tillämpningen.
9
CGI utförs av servern och bara tillämpningens utmatning skickas till webbläsaren. JavaScript
fungerar bara i webbläsare som stöder språket medan CGI fungerar i alla webbläsare som har
stöd för HTTP - protokollet.
JAVASCRIPT
JavaScript utvecklades ursprungligen av Netscape Communication baserat på amerikanska
Suns programmeringsspråk Java, för att låta webbmastern lägga till en del interaktiva
funktioner. Skriptspråket kallades då för Livescript.
JavaScript är det mest använda programmeringsspråket för webbsidor idag och det är nästan
det enda skript som körs i besökarens webbläsare. JavaScript fungerar med alla webbläsare.
Med JavaScript kan man till exempel:
 Hantera information från till exempel ett formulär, utan att blanda in servern.
 Lägga till interaktivitet till bilder.
 Ändra egenskaper för element på en webbsida, beroende på vad besökaren gör.
I dag används JavaScript mest för att beskriva länkar, öppna dialogrutor i besökarens
webbläsare, men JavaScript är dessutom suveränt för att kontrollera information i formulär.
JavaScript kan kolla att all nödvändig information finns inmatad redan innan webbläsaren
skickar den vidare till det serverbaserade skriptet. Allt går snabbare och webbservern blir
mindre belastad. Sedan JavaScript kom, har det kompletterats och blivit ett näst intill
fullfjädrat språk. Det kan dessutom användas som ett serverbaserat skript och det är relativt
enkelt att lära sig. Inte minst är JavaScript ensamt i sin nisch, att kunna köras på besökarens
webbläsare.
JavaScript är ett språk som fungerar på alla typer av datorer. Alla program som finns bygger
på något som kallas för källkod, vilket är den kod som ligger till grund för det färdiga
programmet. Källkod går att titta på och förstå, medan programmets binärkod som källkoden
resulterar i är helt omöjlig att begripa. JavaScript läggs in i webbsidor som källkod. I varje
modern webbläsare ingår en JavaScripttolk, vilket gör att nästan alla besökare kan köra skript
gjorda i JavaScript.
All JavaScript-kod ligger tillsammans med HTML-märkena.
Perl
Perl (Practical Extraction and Report Language) innehåller flexibla och kraftfulla
texthanteringsverktyg och det är också stabilt nog att stödja stora tillämpningar.
Variabelhanteringen är en av Perl-språkets kraftfullaste funktioner.
En fördel med Perl är att det finns få hinder för erfarna programmerare att snubbla på. Även
om Perl stöder stora, strukturerade tillämpningar så är det också lämpat för att skriva korta,
enkla men ändå kraftfulla skript. En annan aspekt på Perl är att det lånar syntax från så många
programmeringsspråk så att två programmerare kan skriva ett skript som gör samma sak men
där det ena ser ut som ett Bourne Shell-skript och det andra ser ut som ett C-program.
Det går snabbt att utveckla ett skript i Perl, programkoden blir förhållandevis liten och det
finns många färdiga funktioner för den databearbetning som ofta görs av CGI-skript. Vidare
är det enkelt att ta emot och läsa av information från användaren via formulär och det är
enkelt att läsa från och skriva till filer. Perl-skript skrivs som en vanlig textfil vilket betyder
att man kan använda vilken texteditor som helst för att skriva ett skript. Om skriptet är skrivet
i Windows-miljö och webservern körs i UNIX-miljö kan en del Perl-tolkar vara känsliga för
10
hur Windowsprogrammet skriver radbrytningar. Uppstår problem med skriptet kan det vara
ide att ha en editor där det går att spara filen i UNIX-format.
Alla Perl-skript måste börja med att tala om var Perl-tolken finns på datorn (sökvägen på
servern) : #!/usr/bin/perl.
Problembeskrivning
Examensarbetet består av uppgiften att lägga upp en länkad webbsida till en befintlig
webbsida på NCC’s interna webbserver, där NCC’s personal fyller i ett driftsättningsformulär
varje gång en förändring görs på systemet Lawson. Informationen på varje
driftsättningsformulär ska lagras på ett sådant sätt att både NCC och WM-data enkelt ska
kunna söka bland de sparade formulären med olika sökfokus – man ska alltså kunna söka på
alla ifyllda fält om man vill det.
Tillsvidare har NCC valt ut sju olika fält i formuläret de vill kunna söka på men det kan enkelt
ändras.
Alla fält i formuläret behöver inte fyllas i, men vissa fält ska vara sammankopplade så att
fyller man i ett av dem så måste man också fylla i det andra. För att spara formuläret måste
också vissa fält vara ifyllda.
Problemanalys
Systemet Lawson körs på en UNIX-plattform med operativsystemet HP-UX 11.0.
NCC’s internwebb ligger på samma server och på dess startsida läggs en länk till en driftsida
för att fylla i driftsättningsformuläret och för att söka bland de sparade formulären.
Användarna på NCC har operativsystemen Windows 98 / NT och kan använda både
Netscape Navigator och Microsoft Internet Explorer som webbläsare på sina klientdatorer.
WM-datas driftstöd i Örebro har med hjälp av programvaran Exceed möjlighet att koppla upp
sig mot NCC’s server via telnet. För att komma åt NCC’s internwebb går de dock via Internet
som vanliga NCC-anställda. De använder också PC med operativsystemen Windows 98 / NT
och ska ges rättigheter att använda driftsidan på NCC’s internwebb.
På servern idag finns det stöd för C-program och en inbyggd C-kompilator, men även Perl
och Sybase finns installerade.
Vilka hjälpmedel är mest lämpliga att använda till uppgiften? Problemen är som följer:
 En HTML-sida ska kodas. Koda för hand eller använda ett hjälpprogram?
 Den ska innefatta ett formulär där vissa fält måste fyllas i och andra inte. Ska
kontrollen ske innan sändning till server eller på servern? Alltså ska JavaScript
eller något annat språk användas?
 Eftersom lagring och sökning ska genomföras – hur sparar man informationen och
hur får varje dokument ett unikt filnamn? Hu ska formuläret lagras så det
underlättar sökning och kan visas på lämpligt sätt för användaren?
 Vilket programmeringsspråk är mest lämpligt för sökfunktionen? Ska den kodas
för hand eller ska kod lånas?
11
Modell/Metod
Dokumentet
Vill man göra hemsidor finns det många hjälpmedel att välja på. Första tanken var att skapa
webbsidan med programmet FrontPage eftersom den befintliga internwebben är uppbyggd
med det. En bok inköptes och HTML - kod studerades. I en vecka pågick försöken att
efterlikna det dokument som NCC använder idag för att fylla i sina driftsättningar innan
konstaterandet var ett faktum: Front Page var inget bra alternativ för detta ändamålet.
Front Page påminner om språket Visual Basic i den betydelsen att man får visuell hjälp att
placera ut knappar, textrutor och rullistor mm. Har man inget krav på förståelse av koden som
Front Page skapar åt en när man väljer designen av sitt webbdokument, så kan det vara ett bra
alternativ. Däremot om, som i detta fallet, informationen ska användas och det faktiskt krävs
att man vet exakt hur och varför allting fungerar är inte Front Page ett bra alternativ.
Dessutom lägger Front Page ut koden på ett högst användarovänligt sätt så att den blir väldigt
svårläst.
För att få förståelse om HTML-kod och dess problem och förtjänster togs beslutet att skriva
koden för hand med hjälp av programmet Home Site. Home Site hjälper till att hålla reda på
start och sluttaggarna i dokumentet och visar hur sidan skulle se ut på webben, men all
kodning utförs av programmeraren.
Kontroll av dokument
Ska dokumentet kontrolleras innan eller efter sändning till server? Eftersom detta arbetet
bygger på inmatning av information i ett formulär där det ska gå att söka på vad användaren
matat in är det speciellt viktigt att kontrollera inmatningarna. För att spara tid åt användaren
och minska arbetsbelastningen för server och nätverk valdes JavaScript. Dokumentet
utformades så som NCC’ befintliga dokument ser ut idag, men utseendet är enkelt att ändra
på. Idag är det ett fåtal personer som har rättighet att fylla i dokumentet. Om de anser att det
bör finnas fler kontroller eller om antalet personer ökar drastiskt som ska fylla i dokumentet
så att man önskar ytterligare kontroller kan dessa enkelt läggas till. Dessutom kan kontroller i
Perl också läggas till för att öka säkerheten och minimera risken för fel ifyllda formulär. Ett
annat sätt att minimera fel i inmatningarna är att ha så många förvalda fält som möjligt, där
alla alternativ går att välja från en rullista.
Lagring av dokument
Lagring av dokumenten måste ske med unika namn eftersom flera av fälten kommer att ha
samma innehåll och man hela tiden ska kunna garantera att alla dokument med något
gemensamt fält, t ex när någon söker efter alla driftdokument som är gjorda ett visst datum,
ska kunna hittas. Det unika namnet måste tilldelas efter att dokumentet har blivit godkänt och
ska skickas till servern. Alternativen är att antingen låta JavaScript döpa filen till ett unikt
namn eller låta ett skript göra det.
För att användaren ska få upp ett dokument som ser ut som det sparade måste datasträngen på
något sätt återföras till HTML-koden innan det lagras.
12
Sökning av dokument
För sökfunktionen fanns många alternativa lösningar. Med vilket språk skulle CGIprogrammeringen kodas?
Det självklara valet från början var att använda Visual Basic för dess utmärkta visuella
egenskaper och också för dess koppling med enkel och lättförståelig databashantering. Efter
lite efterforskningar på operativsystemet UNIX stod det dock klart att Visual Basic inte var
kompatibelt med UNIX.
Alternativ nummer två var att koda i klassisk C där erfarenheterna var störst och det dessutom
fanns stöd för på servern. Halvvägs in i det arbetet så kom det in önskemål om att det kanske
var bäst att använda språket Perl. Tvivel uppstod – vad var bäst egentligen?
Som tidigare är nämnt finns det många fördelar att skriva i ett språk som man kan relativt bra.
Eftersom en lösning var påbörjad i C kändes det bäst att fortsätta med det – annars hade man
ju kastat bort en massa tid. Å andra sidan fanns viljan att göra det som var ”bäst” vilket efter
en rundfrågning visade sig vara många olika lösningar – beroende på vem man frågade.
Perl är det populäraste språket för att skriva CGI-skript och var ursprungligen avsett som ett
allmänt skriptspråk till UNIX. Perl har dessutom många ”färdiga” lösningar att låna.
Lösningen på vägvalet var att denna gång låna en bok och försöka ta fram fakta. Författaren
av boken ”Lär dig CGI-programmering på 1 vecka”, Rafe Colburn, propagerade för Perl när
det gällde programmering på en UNIX-server. Boken var mycket lättläst och behandlade
många områden som berörde examensarbetet, så mycket av tidigare frågeställningar fick helt
plötsligt svar. Därför kändes det tryggt att följa boken vidare då den tog upp många
problemlösningar med tillhörande kodexempel som passade uppgiften för examensarbetet.
Nackdelen var att den egna erfarenheten av Perl var obefintlig och inte heller ville någon på
avdelningen tillskriva sig några sådana kunskaper.
Efter mycket svår beslutsvånda togs beslutet att använda Perl mycket på grund av att det fanns
många färdiga sökmotorer på webben. Valet mellan att koda en sökmotor själv eller anpassa
en ”lånad” sökmotor togs med hänsyn till kunskaperna i Perl. Alternativet att anpassa en
färdig sökmotor, i det här fallet Excite, valdes och för att underlätta anpassningen sparades
dokumenten i HTML-form så att formatet är rätt direkt vid träff.
13
Lösning
Uppbyggnaden av uppgiften blev att koda dokumentet med HTML-kod och kontrollera det
med JavaScript innan sändning sker till server. På servern placerades ett CGI-skript skrivet i
Perl som namnger det kontrollerade dokumentet och sparar det som en HTML-fil. Med hjälp
av en ”färdig” CGI-tillämpning kan sökning av tidigare lagrade dokument göras och
efterfrågat dokument visas för användaren som ett webbdokument . En HTML-sida får utgöra
basen för både ifyllnad av nya dokument och sökning av lagrade dokument.
Programvaran HomeSite 4.0 laddades ner och HTML-sidorna skrevs för hand med hjälp av
Annica Tigers ”HTML-guide” på hennes hemsida och boken ”Lär dig CGI -programmering
på 1 vecka” skriven av Rafe Colburn, plus diverse andra tips-sidor på webben.
Menysidan är uppbyggd med hjälp av frames och länkar användaren rätt för respektive
önskan. Dokumentet för driftsättningen är uppbyggt med ett formulär som innehåller fyra
tabeller som formaterar 24 fält.
Driftsättningsdokumentet
Formulär
För att göra det möjligt att manipulera inmatningarna skapades ett formulärobjekt. Ett
formulärobjekt kan vara enkla inmatningsfält eller fält som tar flera rader av kommentarer,
kryssrutor, knappar mm. Man kan ha flera formulärobjekt i samma dokument. Formulär har
attributen ”action”, ”method” och ”enctype”.
”Action” definierar antingen en mailadress dit informationen ska skickas eller en adress till en
hanterare för formuläret på en server. ”Method” bestämmer med vilken HTTP-metod (”post”
eller ”get”) innehållet från formuläret ska skickas till servern. ”Enctype” bestämmer med
vilken metod som innehållet i formuläret ska avkodas, d v s hur innehållet kommer att se ut
vid utskrift.
I denna lösning används ett formulär som har namnet ”form1” och använder sig av metoden
”post” för att skicka innehållet i fälten till en bestämd adress, adressen till CGI-skriptet
SAVE.CGI som sparar strängen i en fil. Attributet ”enctype” är inte satt så defaultvärde
gäller, utskriften är inte formaterad utan läggs i en enda lång sträng.
Tabeller
Tabeller används för att just hantera tabellinformation eller för att strukturera upp fält och ge
dem en snygg inramning. Tabeller har en mängd attribut som alla är valfria. Väljer man inga
attribut så anpassas tabellen efter innehållet och ingen inramning sker. Även cellerna i
tabellen kan ha en mängd attribut. Några attribut som används i detta fallet är ”width”,
”border”, ”cellspacing”, ”rowspan” och ”colspan”.
”Width” anges om man inte vill att tabellen ska anpassa storleken efter innehållet, d v s om
man vill ha en tabell som är lika stor oavsett innehåll. ”Border” anges om man vill ha en yttre
ram runt hela tabellen. ”Cellspacing” används när man t ex vill ha tre kolumner på en viss rad
istället för de ordinarie sex, man låter alltså en kolumn breda ut sig på en speciell rad.
”Rowspan” gör motsvarande som ”cellspacing” men i vertikal riktning, en rad tillåts i en viss
kolumn motsvara flera rader.
Detta dokumentet använder sju tabeller för att formatera fälten så att dokumentet blir så som
NCC vill ha det och så att man får en symmetrisk och logisk stil på det.
14
Inmatningsfält
Fält används för att låta användarna mata in information som sedan tas om hand av
programmet, här föds nu interaktiviteten. Dessa fält är endast tillåtna inom ett formulärobjekt.
Fältet namnges via attributet name så att det går att para ihop fält med inskrivet och skickat
data. Alternativen som finns av inmatningsfält är ”input”, ”select” och ”textarea”.
”Input” finns i många former såsom enkel inmatningsruta, lösenordsruta, checkrutor,
knappalternativ, ”submit”- och ”reset”-knappar. ”Select” används vid valalternativ, antingen
får bara ett alternativ väljas eller också kan man välja flera alternativ. ”Textarea” definierar
flerradiga textfält.
De 24 fält som används i dokumentet är alla någon av ovanstående sort. Det är mest enkla
inmatningsrutor samt några radioknappar, d v s runda knappar som bara tillåter att ett
alternativ väljs.
Kontroll av dokument
JavaScript är alltså utomordentligt lämpligt att kontrollera fälten med innan de skickas till
servern. Koden läggs i dokumenthuvudet (inom head-taggarna) och anropas sedan inne i
dokumentet, utom i vissa fall direkt inom body just där man vill att det ska utföra något, t ex
visa dagens datum och tid. Skriptet läggs som en dold kommentar, via <!-- och //--> för att
förhindra att browsers som ej stödjer JavaScript ska visa hela programmerings-koden.
Innan dokumentet sparas skickas det till en funktion som kontrollerar att vissa fält är ifyllda.
Detta är fält som är nödvändiga för att lagringen ska vara meningsfull. Det är också planerat i
framtiden om ytterligare kontroller med hjälp av JavaScript, bl. a. att datum verkligen är ett
datum mm. Idag är endast sju fält kontrollerade, och då endast på att de har något innehåll och
inte på om innehållet är något lämpligt eller ej. Ökar antalet användare så kan fler och mer
avancerade kontroller lätt läggas till.
Lagring av dokument
CGI - programmeringen används för att fånga upp den URL-kodade datasträngen som skickas
från formuläret. URL - kodad data är i princip en sträng som består av namn och värden på
formulärets fält på formulärets element. URL - kodning är konstruerad så att alla data kan
läggas till efter den URL-adress som anropats från servern. Data skickas till servern i form av
fältnamn och värdepar. Varje par åtskiljs av ett &-tecken och mellanslag ersätts av + så att
den kodade informationen inte delas av mellanslag.
Programmeringen sker med hjälp av språket Perl. Adressen till programmet som ska ta hand
om datasträngen anges i HTML-kodens attribut ”action”.
När man söker på ett fält så vill man ha upp alla dokument som överensstämmer med det
sökta fältet. Sparar man bara den URL-kodade strängen så får man vid träff naturligtvis upp
den strängen. För att man istället ska få upp dokumentet precis som det såg ut när det sparades
måste datasträngen separeras och placeras i variabler. Sedan ska HTML-koden skapas igen
med redan ifyllda fält genom att i placera variablerna där som valda värden.
Sedan skapas ett filnamn med hjälp av att anropa en funktion som returnerar dagens datum
och exakt tidpunkt. Dessa värden sätts samman med ändelsen ”.html” och bildar filnamnet
som sparas under en bestämd katalog på servern.
15
Sökning av dokument
Sökning av lagrade dokument sker alltså med hjälp av sökmotorn Excite. En enkel hemsida
skapades där användarna får information om hur sökningen ska gå till. I den HTML-koden
anropas sökmotorn som måste vara installerad på servern och sökning kan påbörjas. I
inställningarna för sökmotorn talar man om vilken katalog den ska indexera och man kan
också välja vilka sorts filer man vill att den ska indexera, i det här fallet valdes HTML-filer.
När användaren får träff på en sökning kommer alla träffar upp som länkar till dokumenten
som matchar sökningen. Detta är då ett dokument som inte kan ändras på.
Sökmotorn Excite har många anpassningsmöjligheter, här valdes alltså att koda söksidan
separat, vilket inte är nödvändigt, och endast placera själva inmatningsrutan i den koden. Det
hade lika gärna gått att använda Excite precis som det är och bara ange under vilken katalog
sökningen ska ske. Man måste dock installera Excite på servern för att den ska kunna
användas.
Testning
Första regeln för felsökning är att skapa och felsöka skripten på en utvecklingsserver. Innan
skripten fungerar på ett korrekt sätt undviks länkar. Alla förändringar av webbplatsen utförs
på testservern och först när man är säker på att allt fungerar som det ska flyttas innehållet över
till produktionsmiljön.
Innan skriptet anropas via en webbserver bör felsökning ske från kommandoraden. Det
betyder att man startar skriptet från en kommandoprompt och ser vilket resultat man får. Det
är ett bra sätt att hitta syntaxfel men även andra kodfel. Utmatningen som i normala fall
skickas tillbaka till webbservern skickas kan man omdirigera till en fil så att man kan
kontrollera att HTML - koden som returneras är korrekt.
Från kommandoraden kan man även simulera inmatning i formulär som sedan skickas till
CGI-skriptet. CGI-bibliotek gör det enkelt att skicka indata CGI-gränssnitt från
kommandoraden.
När skriptet är testat från kommandoraden testas det via webbservern vilket då, om man testat
tidigare punkter ordentligt, bör gå smärtfritt..
Resultat
Resultatet av arbetet har blivit en webbsida som har funktioner som kontrollerar inmatningen
av användaren till en viss grad, som lätt kan utökas, där de godkända dokumenten sparas med
hjälp av ett CGI-skript i Perl till ett unikt filnamn baserat på datum och klockslag. Från
NCC’s befintliga webbserver skapas en länk till HTML-sidan main.html som är uppbyggd
med frames och slussar användaren vidare till driftsättningsdokumentet om de önskar och
talar om vilka sökmöjligheter som finns. Sökfunktionen är ordnad med hjälp av applikationen
Excite.
16
Analys av arbetet
Ett personligt syfte med detta arbetet var att få så stor inblick och förståelse för Internets
möjligheter som möjligt. Att konstruera en interaktiv webbsida som använder flera
tillämpningar för att lagra och ta fram lagrad information är för en van IT-konsult kanske ett
lätt arbete men som alla vet är informationsflödet och begreppen oändliga när det gäller
verktyg och metoder. Undertecknads erfarenheter på den här formen av arbete innan
examensarbetets början var begränsade till måttlig användning av Internet i form av
informationskälla samt en enkel egenhändigt gjord hemsida tre år tidigare. Inte ens ”chattat”
alltså! Detta medförde att arbetet kändes som en alldeles tillräckligt tuff utmaning. Åtskilliga
timmar har ägnats åt att reda ut begreppen och på grund av detta faktum har dokumentet
mycket enkelt förklarande terminologi som ligger på en grundnivå.
Som tidigare nämnt var det de till synes oändliga valmöjligheterna och en djungel av begrepp
som gjorde att uppgiften ett kritiskt stadium kändes oövervinnelig. Detta trots det faktum att
det uppenbarligen redan existerade ett otal smarta lösningar som fanns att ”låna” på Internet.
Först påbörjades kodning för sökfunktioner, i språket C, och formuläret skapades med
HTML-kod. Sedan var det stopp. För hur skulle man knyta ihop alltihopa? Hur fick man det
ena materialet till det andra och hur fungerar egentligen alla verktyg och vilka passar ihop
med vilka? Vilket stöd behöver varje verktyg ha? Vad är kompatibelt med olika servrar?
Den förlösande faktorn blev att börja med dokumentationen, d v s att skriva ner och bena ut
begreppen på papper. Efter en tids efterforskning togs beslutet att kontrollera dokumentet
innan det sparades med Javaskript och att lagring och sökfunkrioner skulle skrivas i Perl.
Därmed tog kodningen fart på allvar, dvs sökning av färdiga sökmotorer som kunde anpassas
och kodningen av ett skript som hämtade upp de skickade datafälten, delade upp dem till
variabler, läste in dem i ett liknande HTML-formulär och lagrade till lämpliga namn. Sedan
tog det lite tid att knyta ihop all HTML-kod och Perl-kod genom att skapa en sida på en
testserver med tillhörande kataloger.
Slutledningen av allt arbete blir att det här är väldigt intressant och roligt att fördjupa sig i.
Ämnet är så komplext att det finns en risk att man spenderar ett par dagar bara på detaljer,
med andra ord känns det som man ”aldrig blir riktigt färdig”. Den största nackdelen har varit
att arbeta ensam, saknaden efter ett ”bollplank” har periodvis varit mycket stor vilket många
anställda på WM-data fått anledning att känna av. I slutskedet blev också saknaden av en
Perl-specialist kännbar, för det behövdes en sådan för att hitta alla små syntaxfel i
tillämpningen som skulle lagra filerna.
Givande har det varit och mersmak har det gett, detta är inget arbete jag lämnar och aldrig vill
göra igen, snarare vill jag lära mig ännu mer så att ett sådant här arbete en dag känns som ”ett
lätt arbete”, d v s den där vane IT-konsulten har blivit jag.
17
Referenser
Internet
http://www.atiger.pp.se/sida.html
http://lightsphere.com/dev/cgi.html
http://www.idg.se/iworld/webbskolan/
http://developer.earthweb.com/
http://www.excite.com/
http://www.nada.kth.se/dataterm
Annica Tigers HTML-nybörjarguide
Kira,s Web Tool
Webbskolan
Earthweb
Excite
Svenska Datatermgruppen
Litteratur
Waite Mitchell, Prata Stephen, Martin Donald, ”UNIX Handboken”
Ek Jesper, Wetterström Anna, ”FrontPage 2000”
Colburn Rafe, ”Lär dig CGI-programmering på 1 vecka”
Vander Veer Emily, ”JavaScript för dummies”
Kernighan Brian W., Ritchie Dennis M., ”The C Programming Language”
Personliga referenser
Filip Sebek, handledare och studierektor på Datainstitutionen, Mälardalens Högskola
Personal på WM-data AB i Eskilstuna, Örebro och Stockholm.
Bilagor
HTML - kod se bilaga 1 och 2
Perl-kod se bilaga 3, 4 och 5
18