Active Server Pages Föreläsning 5 Active Server Pages (ASP) Sidorna ska sluta på.asp Ska ligga i en virtuell katalog, åtkomstbar utifrån Betraktas via en brower, inte via filsystemet Koden som skall köras på servern skrivs innanför... taggar Väldigt likt jsp Exempel <HTML> <HEAD><TITLE>Example</TITLE></HEAD> <BODY> Comments goes here strgreetingmsg = Hello Hello.. It is now _ & Time() & on the server. Response.Write strgreetingmsg </BODY> </HTML> Indikerar för interpretatorn att koden fortsätter på nästa rad Exempel Vad skickas till klienten? <HTML> <HEAD><TITLE>Example</TITLE></HEAD> <BODY> Helllo. It is now 10:42:43 on the server </BODY> </HTML> Klient- och serverscript Klientscript Vanligtvis javascript Användaren kan se koden under View source i sin browser Klientscript brukar typiskt användas till felkontroll Finns det ett @-tecken i den angivna emailadressen? Är alla obligatoriska fält i formuläret i fyllt? Hur många tecken finns det kvar att skriva i mitt SMS-medelande Även öppna nya browserfönster, gå tillbaka till föregående sida, etc. Serverscript asp-kod Körs på server innan resultatet skickas till klienten Är inte synligt för användaren Används vanligtvis för databasinteraktion och skapar HTML-sidorna därefter Exempel: Javascript <head><title>exempel</title></head> <script language="javascript"> function correctinput(){ if(document.test.deposit.value>0 && document.test.time.value>0) document.test.submit(); else alert("felaktig inmatning!"); } </script> <body> <center> <h2>sparandeberäkning</h2> <form name="test" action="exempel.asp"> <p>insättning första året: <input type=text name="deposit"> <p>antal år att förräntas: <input type=text name="time"> <p><input type=button onclick="correctinput()" value="beräkna"> </form> </center> </body> 1
Component Object Model (COM) COM definierar ett gränssnitt mellan objekt, dvs hur objekt kommunicerar med varandra Distributed COM (DCOM) motsvarigheten till Javas RMI eller CORBA dvs ett sätt att göra objekten tillgängliga från andra datorer. Man kan använda COM objekt från sin ASPkod för att på så sätt inte vara begränsad av script-språk, jämför JSP/JavaBeans Internet Server Application Programming Interface (ISAPI) ISAPI löste ett av problemen med CGI CGI startade en ny process för varje anrop ISAPI använder sig av DLL och använder samma minnesutrymme som Webbservern ASP.DLL DLL:er är att likna vid java:s klassbibliotek VBScript Dim deklaration av variabler (array:er) statisk eller dynamisk ReDim Storleksförändring av dynamisk array Preserve nyckelord för behålla tidigare deklarerade element Ex: Dim stremployees() ReDim stremployees (9,1) [9,1] matris stremployees(9,1) = Sven Svensson ReDim stremployees(9,2) tappar innehållet i 9,1 ReDim Preserve stremployees(9,2) för att behålla Ubound bestämmer en arrays storlek Dim strcustomers (10,5) intsizefirst = UBound(strCustomers,1) ger 10 For.. Next Dim intsalary (10) For intcounter = 0 to 10 intsalary (intcounter) = 20000 Next For Each Item in Collection Response.Write Item & <BR> Next Do... Loop Do While strday <> Saturday And strday <> Sunday MsgBox( Get Up! Time for work ) klientscriptfunktion... Loop Do MsgBox( Get Up! Time for work )... Loop Until strday = Saturday Or strday = Sunday 2
If...Then...Else- If intage < 18 Then MsgBox( Minderårig ) ElseIf intage < 30 Then MsgBox( OK ) Else MsgBox( Gå hem... ) End If Select Case Select Case poang Case 3,4,5 MsgBox( Godkänd ) Case 1,2 MsgBox( Undermåligt ) End Select Konstanter Empty deklarerad utan datatyp men inte tilldelad Nothing deklarerad med datatyp men utan referens Null - Not valid True Numeriskt värde 1 False Numeriskt värde 0 If isempty(session( loggedin ))... ASP objektmodell Viktiga objekt i ASP.DLL Request Response Viktigast för förståelsen, de vanligaste Session objekten. Klienten Application; ASP tillämpningen själv Server Ger tillgång till webbservern. Används för att instansiera objekt med metoden CreateObject Request objektet Request objektet är inkapsling av den HTTPförfrågan man skickar när man anropar en URL Där finns alltså metoder för att hitta de eventuella parametrar som skickas från formulär HTTP Request GET /F5/exempel.asp?deposit=1000&time=10 HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.msexcel, application/vnd.ms-powerpoint, application/msword, application/x-shockwav e-flash, */* Referer: http://localhost/f5/exempel.html Accept-Language: sv Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1;.NET CLR 1.1.4322) Host: localhost Connection: Keep-Alive Cookie: ASPSESSIONIDACCBTAAA=HOLDGCAAAFBKHHDIJBOBJHDP 3
Att läsa parametrarna Att läsa parametrarna från en request kan se ut på följande sätt: Namn.html <head> <title> Ditt namn! </title> </head> <body> <form action= "hello.asp" method="post" > Skriv ditt namn: <input type= "text" name= "namn" > <br> <input type= "submit" value= Skicka > </form> </body> hello.asp <head> <title> Välkommen =Request.Form( namn )! </title> </head> <body> Hej =Request.Form( namn )! </body> Properties TotalByte QueryString Form Cookies ClientCertificate ServerVariables Metoder BinaryRead Request objektet Read-only Collection är en typ av dynamisk array med 0 eller flera namn/värde par Request objektet (forts.) deposit = Cdbl(Request.QueryString("deposit")) eller deposit = Cdbl(Request("deposit")) Den sista varianten söker i tur och ordning i 1. QueryString Parametrar från get 2. Form Parametrar från post 3. Cookies 4. ClientCertificate Har med säkerhet att göra 5. ServerVariabler Se nästa bild Request objektet (forts.) ServerVariables Fördefinerade variabler strvar = Request.ServerVariables(key) key kan bland annat vara REMOTE_HOST faun.nada.kth.se LOGON_USER stene REQUEST_METHOD POST eller GET HTTP_USER_AGENT Mozilla/4.0 Response objektet Response objektet är inkapsling av det HTTPsvar användaren får tillbaka Där finns bland annat metoder för att infoga html, skicka nya cookies till användaren eller att skicka användaren till en annan sida Header HTTP Response Ett HTTP Response utan cookies HTTP/1.0 200 OK Date: Thursday, 02-Nov-95 08:44:52 GMT Server: WebSite/1.1 Last-Modified: Wednesday, 01-Nov-95 02:04:33 GMT Content-Type: text/html Content-length: 8151 [1 obligatorisk blankrad] <HTML><HEAD> <TITLE>... Body 4
Response objektet Att använda sig av Response objektet kan se ut på följande sätt: <!-- Example 1 --> For intloop = 1 to 6 The number is: = intloop <P> Next <!-- Example 2 --> For intloop = 1 to 6 stroutput = The number is: & intloop & <P> Response.write(strOutput) Next Ger samma resultat Properties (bland annat) Buffer ContentType Cookies Metoder (bland annat) Redirect Write End Flush Response objektet Response -Buffer Avgör om allt innehåll ska skickas på en gång eller om det ska skickas rad för rad allt efter det processas. Response.Buffer [ = true [false]] Bör sättas till True för snabbare processande av sidan redirect Response Cookies reponse.cookies( kundnr ) = 123 Om man inte sätter en tid kommer cookien försvinna när browsern stängs response.cookies( kundnr ).expires =#6/6/2004_ 00:00:00# Session objektet Ett session objekt är ett objekt som automatiskt tillfaller och följer varje användare Det är till för att lagra information om användaren, vanligt är t.ex. att hålla reda på om vederbörande är inloggad eller inte Session objektet (forts.) Properties (bland annat) SessionID // read only Timeout // i minuter default 20 Contents // Se Application StaticObjects // -- -- Metoder Abandon // Omedelbar timeout Events Session_OnStart Session_OnEnd 5
Session objektet Ett exempel på hur man använder ett session objekt kan se ut så här: <H3>sessionID = = session.sessionid </H3> <H3>timeout = = session.timeout </H3> <P> Du har besökt den här sidan = session( intsessionobjvisit ) den här sessionen </P> session( intsessionobjvisit )_ =session( intsessionobjvisit ) + 1 Databas koppling Set db = Server.CreateObject( ADODB.Connection ) db.open ( test ) Använder ODBC Set ors = db.execute( select * from studenter ) Vanliga metoder i Connection Open Close Execute BeginTrans Commit/RollbackTrans ODBC Databasen (Access) Databas Recordset <ol> Do while Not ors.eof Response.Write( <li> & _ ors.( enamn )) ors.movenext Loop </ol> Databasuppdatering Att uppdatera databasen med ny information skiljer sig inte mycket från att läsa data från databasen En sak är dock viktig att tänka på Katalogen som uppdateringarna skall ske i måste tillåta skrivhändelser Detta gör man genom att högerklicka på katalogen och lägga till en användare IUSR_datornamn 6
Properties Inga Contents StaticObjects Metoder Lock Unlock Event OnStart OnEnd Application objektet Application objektet är samma för alla användare och kan användas för t.ex. statistik GLOBAL.ASA Fil i rotbiblioteket av tillämpningen c:\intepub\wwwroot\f5\ Deklaration av objekt, variabler och event handlers Session_OnStart Session_OnEnd Application_OnStart Application_OnEnd Förändringar kräver omstart Exempel 1:4 (IE) Exempel 2:4 (databasen) Exempel 3:4 (exempel.html) <head><title>exempel</title></head> <script language="javascript"> function correctinput(){ if(document.test.deposit.value>0 && document.test.time.value>0) document.test.submit(); else alert("felaktig inmatning!"); } </script> <body><center> <h2>sparandeberäkning</h2> <form name="test" action="exempel.asp"> <p>insättning första året: <input type=text name="deposit"> <p>antal år att förräntas: <input type=text name="time"> <p><input type=button onclick="correctinput()" value="beräkna"> </form> </center></body> Exempel 4:4 <head><title>exempel</title></head> <body><center> Set db = Server.CreateObject("ADODB.Connection") 'ADO är ett databas-api db.open("test") y = DatePart("yyyy", date) ' fungerar även med Year(Date) Set rs = db.execute("select * from interest where year = " & y) rs.movefirst rate = Cdbl(rs("rate")) deposit = Cdbl(request.QueryString("deposit")) tid = Cdbl(request.QueryString("time")) withdrawal = Cint (deposit * Exp (tid * Log ((100+rate)/100))) rs.close db.close <h2>resultat</h2> <p>du får ut = withdrawal kr. <p>beräkningen är baserad på = rate % ränta för år = y. </center></body> 7