Active Server Pages Dynamic content in Microsoft Internet Information Server 4.0+

Slides:



Advertisements
Liknende presentasjoner
Repetisjon innkapsling static tabell av primitiv datatype LC191D Videregående programmering Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring.
Advertisements

Microsoft BizTalk og WEBservices
Design av sikre web-applikasjoner
Høgskolen i Oslo Webprogrammering Tilstandsbevaring Sessions og cookies.
C++ for Java-programmerere
So you think you can scale? Oracle Coherence i praksis OUGN vårseminar, april 2010, Øyvind Brusevold.
Webprogrammering (LO113A) 1 Kom i gang med PHP. Webprogrammering (LO113A) 2 Mål  Installere Apache og PHP  Konfigurasjon av Apache og PHP  Forstå samspillet.
JSP presentasjon Arild Strømhylden NTNU 26 June 2014.
Programmering i ActionScript - hva er det, og hvordan undervise?
1 Objektorientert samvirke - del 4 av Arne Maus, Institutt for informatikk, Universitetet i Oslo.
Tips og triks MSP og Projectserver 1) Vise prosjektsammendrag
Programmering i Java versjon januar 2005 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon januar 2005 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Høgskolen i Oslo Webprogrammering Introduksjon til Java-scripting.
Programmering av dynamiske websider i C# - hva er det, og hvordan undervise? Tom Heine Nätt.
Java Server Faces (JSF) en introduksjon Frode Eika Sandnes.
Bakgrunn. Funksjoner. Nøkkelfunksjoner. Application Manager. View Controller. Validation. Dialog Manager. Clay. Tiger extensions.
Tema: Introduksjon Hvorfor Velocity? Installasjon Velocity VS. JSF / JSP Eksempler Oppsumering.
C# for javaprogrammerere
Generelt I/O if/else Funksjoner Lists Løkker Dictionaries Annet Listebehandling Klasser Python med noen algdat-anvendelser Åsmund Eldhuset asmunde *at*
Webserver Mailserver DNS Server virtualisering
Jæger: Robuste og sikre systemer INF150 Programmering mandag 2.10 Default values – standardverdier ved oppstart MER OM: Sub-prosedyrer og sub-funksjoner.
Fag LO189D - Objektorientert programmering Objektorientert programmering© Else Lervik, TISIP - HiST/IDB vår-99Leksjon 11 Applet’s Hva karakteriserer applet’sside.
Hovedprosjekt 44 Webrapporteringssystem med ASP
System Center Configuration Manager 2007 Presentert av Thomas Lidahl Mørtsell og Carl Fredrik Krokstad.
Gruppe 32E presenterer. Windows 2003 Server Novell Netware 6.5.
Apache POI.
Web-applikasjoner Prosjekt3 Logging Gruppe 9 Malik Muhammad Naeem Kevan Qureshi.
DCOM - Distributed Component Object Model Hans Harald Wennersgård Jørn Anders Svendsen.
Singleton & Adapter Pattern Gruppe 3. Singleton Pattern Sørger for at en klasse kun kan ha en instans Vanligvis implementert med globale variabler –Singleton.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
XML Extended Markup Language - The ASCII of the Future.
std::basic_string En oversikt over C++ Standard bibliotekets streng-klasse.
Connection Points i COM Bakgrunn Begrunnelse Bruk.
Oversikt Den delen av Standard C++ Library som tidligere var STL Konsepter i STL: –Iteratorer –Samlinger (containers) –Algoritmer –Funksjonsobjekter.
Persistenslag i Fakir Teori og praksis. Bruk av persistenslag 4 Felles interface for alle record brokere: interface IDbRecordBroker : IDispatch { HRESULT.
Flash og ActionScript - Nye muligheter Jostein Nordengen.
Livet etter Frontpage og Access Tom Heine Nätt. Agenda Frontpage Hvorfor bytte? Krav til et webutviklingsverktøy Alternative webutviklingsverktøy Dreamweaver.
1 Organisering av kode (Kapittel 5). 2 Mål ● Forstå inkludering er og hvilken gevinst det gir ● Lære å utvikle egne funksjoner ● Forstå variablenes virkemåte.
Høgskolen i Oslo Webprogrammering Filbehandling i PHP.
Intro til php - Uke3.2 - Ronny Mandal Introduksjon til PHP.
Høgskolen i Oslo Webprogrammering Ajax og PHP. I dag l Hvordan få en bedre brukeropplevelse via Ajax- script l Gjennomgang av kode l Oppgaveløsning på.
Høgskolen i Oslo Webprogrammering Java-scripting 2 Klientvalidering.
Publisering på verdensveven Kursdag 2 VÅFF, våren 2002.
Publisering på verdensveven Kursdag 3 VÅFF, våren 2002.
Dynamiske nettsider PHP Del 1 – variable. PHP  PHP (Personal Home Page)  Fritt tilgjengelig programmeringsspråk  åpen kildekode  Plattformuavhengig.
DOM og scripting Making it come alive. Hva er DOM? Standard for å definere trestrukturen til XML-dokumenter. IDL-spesifikasjon av grensesnitt, egenskaper.
Kort om HTML ML meg her og ML meg der..
PARLAY/OSA Referanser: Referanser Foredraget er i all hovedsak basert på to artikler. Disse kan finnes på:
OOT Seminar H-97 CORBA Praktisk del. Valg av ORB implementasjon n Har valgt å bruke Visigenic sin ORB implementsjon n ORB’en er 100% Java kodet n Bygger.
Om Internett, World Wide Web, egen hjemmeside Ole Christian Rynning
The Peer-to-Peer Architecture Av Ingunn Lund og Anja Lønningen.
Programmering sif8005. Praktisk informasjon  Innleveringsfrist øvinger: mandag kl  Alle øvinger er obligatoriske  Studass tilgjengelig 6 timer.
CORBA Noen hull som må fylles: ORB Object Adapters CORBA services IDL Factory Objects.
1 | 2010 Internetteknologi 2 (ITNET2) Kort teknisk ASP.NET introduktion Mandag den 4/ Jesper Tørresø.
Tabeller Dette er en tabell, eller array. Den kan defineres sånn som dette: public int[] heltallsTabell = new int[11]; //Her er 11 tabellens lengde for.
Jæger: Robuste og sikre systemer INF150 Programmering Kapittel 2: Problemløsning Kapittel 3.1 og 3.2.
Redusere kompleksitet i Entity Framework spørringer Skrevet av Tore Aurstad,
RBA ved System Center Configuration Manager 2012 Ernesto Gonzalez USIT - Gruppe for Windowsdrift.
Eksamen INF Et løsningsforslag. Oppgave 1 Oppgave 1) (30% - 60 minutter, COMET) Ta utgangspunkt i den vedlagte problembeskrivelsen, og.
Universell utforming Rikke Julie Foss-Pedersen. 3 Universell utforming Tilgjengelighet for alle – mest mulig for flest mulig –Alle personer skal kunne.
Object  Klassen i java  Alle klasser arver fra denne om ikke noe annet blir spesifisert  ArrayList.add(Object instans)  Alle elementer formes til Object.
Ekstra mange tips til Oblig 3! 12. mars 2007 Are Magnus Bruaset og Arild Waaler Inst. for informatikk, UiO.
XML og JDOM Helge Furuseth XML  XML = Extensible Markup Language Basert på SGML – Standard Generalized Markup Language  HTML =
Android-Programmering Våren Oversikt Long-running operasjoner Introduksjon til Android services On-demand service Bruk av servicer på tvers av prosesser.
Lokal økonomi-informasjon
IN3030 – Effektiv parallellprogrammering Uke 1 2. del, våren 2019
Utskrift av presentasjonen:

Active Server Pages Dynamic content in Microsoft Internet Information Server 4.0+

Mål Ha en oversikt over hvordan ASP passer inn i puslespillet Kunne skrive dynamiske sider ved hjelp av ASP Kunne aksessere COM komponenter ved hjelp av ASP Kunne skrive ATL COM komponenter for bruk med ASP sider

Krav ASP kjører på IIS 4.0 og høyere IIS finnes få Windows NT Server Option Pack For å bruke XML må en XML parser installeres. Msxml.dll følger med Internet Explorer 5.0 og høyere For å lære ASP bør man ha kjennskap til HTML JScript/JavaScript eller VBScript kunnskap er også en fordel, men disse språkene er lette å lære dersom man kan programmere

Hello ASP ASP 1: Hello world

Anatomien til en ASP side I utgangspunktet en vanlig HTML side Elementer som starter med <% angi ASP elementer ASP elementer behandles av serveren før svaret sendes til klienten ASP elementer er skrevet i et script-språk som JScript eller VBScript

Spesielle ASP Elementer er et ASP direktiv som angir hvilket språk (JScript eller VBScript) som skal brukes Andre direktiver er en forkortelse for

Eksempel 2 <% for ( var i=0; i<10; i++ ) { var line = "Iteration " + i + " "; Response.Write(line); } %>

Program-biter Vi kan ha programbiter i ASP siden. Program-bitene er i et element. Programbitene vil bli utført akkurat som en hvilket som helst script. Vi bruker Respose objektets Write metode for å skrive til resultatsiden.

Html i script i html ASP 2: Looping ASP script Iteration : Hello there

Mikse HTML og Script Kontrol-flyten fra scriptspråket inkluderer html som er mellom {} etc. fungerer som

Scriptobjekter ActiveX Server Pages 3: Time The time is.

Script-objekter Alle objekter og funksjoner tilgjengelige i scriptspråket er også tilgjengelige i ASP I tillegg definerer ASP fem objekter siden kan bruke: –Request – informasjon fra senderen –Response – svaret som vises i browseren –Server – Informasjon og metoder for serveren –Session – inneholder brukers sesjonsinfo –Application – brukes til å dele info mellom brukere

Forms

Form – oversikt Request objektet sendes med når vi mottar en web-side Dersom det eksisterer informasjon i en form fra senderen, kan ”form” metoden til Request returnere denne informasjonen Vi har laget et skjult element med navn ”inMessagePost” og verdi ”true” som sendes med når brukeren trykker ”post” i formen.

Form – user entry To: From: Subject: Message text Message Text

Form – user input Form elementet forteller at vi skal POST’e svaret til 05form.asp (som er samme dokument som formen selv) Vi har presentert følgende input-elementer i en tabell: –To, from, , subject og message I tillegg har vi et input element av type ”hidden”. Dette er for å sende med styreparameteren ”inMessagePost”

Form – echo back I got the following information: To: From: Subject: Message text

Form – echo back Vi bruker Request.Form for å finne verdiene som ble sent til formen. Vi bruker som en snarvei for Response.Write for at det ikke skal bli så mye å skrive og lese.

Forsinkelse <% function f(i) { var result = 1; while ( i > 0 ) result *= i--; return result; } for ( var i=0; i Hello there <% f( ); // simulate delay } %>

Forsinkelse Vi definerer en funksjon som gjør mye arbeid for å simulere forsinkelse. En og en linje kommer opp når den er ”klar” Legg også merke til funksjons-deklarasjonen. Dette er vanlig funksjons-deklarasjon i JScript, og kan også brukes i et ASP script

Bruk av COM - ADO <% var connection = Server.CreateObject("ADODB.Connection"); connection.Open("guestbook", "admin", ""); var recordset = Server.CreateObject("ADODB.Recordset"); recordset.Open("SELECT * FROM guestbook", connection); Response.Write(" "); for ( recordset.MoveFirst(); !recordset.EOF; recordset.MoveNext() ) { Response.Write(" "); var iter = new Enumerator(recordset.Fields); for ( ; !iter.atEnd(); iter.moveNext() ) { Response.Write(" " + iter.item() + " "); } Response.Write(" "); } Response.Write(" "); %>

COM Server.CreateObject brukes til å lage et (Inprocess) COM objekt på serveren COM Objektet kan aksesseres som fra ethvert script Legg merke til at Scriptet har fulle rettigheter, det regnes ikke som et utrygt script I JScript bruker vi en Enumerator for å gå gjennom en collection

Filsystem <% var fileSystem = Server.CreateObject("Scripting.FileSystemObject"); var folder = fileSystem.getFolder(Server.MapPath(”.")); var iter = new Enumerator(folder.Files); for ( ; !iter.atEnd(); iter.moveNext() ) { var fileName = iter.item().Name; if ( !fileName.match(".asp$") ) continue; %> "> <% } %>

Filsystem Et Scripting.FileSystemObject opprettes på serveren med Server.CreateObject Server.MapPath brukes til å få path’en til en virtuell (web) folder. I dette tilfellet returneres ”c:\InetPub\WwwRoot\asp-sample” FileSystemObject’s metode getFolder oppretter et Folder objekt Scripting.FileSystemObject er en komponent som er designet for å gi skript-språk tilgang til filsystemet.

Filsystem – forts. Kun ASP filer skrives ut Name.match(”.asp$”) bruker JScript string’s matching metode (regular expressions) Selve utskriften gjøres med en av-ASP’et linje Vi bruker et Enumerator objekt for å gå gjennom Files samlingen på Folder objektet

Prosessere XML <% var xmlFile = (Request.QueryString("xml").Count > 0 ? Request.QueryString("xml") : "Remit xml"); var xslFile = (Request.QueryString("xsl").Count > 0 ? Request.QueryString("xsl") : "PaymentLog-viewer.xsl"); var xml = Server.CreateObject("Microsoft.XMLDOM"); xml.load(Server.MapPath(xmlFile)); var xsl = Server.CreateObject("Microsoft.XMLDOM"); xsl.load(Server.MapPath(xslFile)); var html = xml.transformNode(xsl); Response.Write(html); %>

Prosessere XML QueryString henter ut argumenter gitt til URL’en til web-siden (f.eks. ”.../09Xml.asp?xml=Remit xml”) transformNode gjør hele arbeidet med å transformere xml-en til html ved hjelp av stylesheet’et Det eksisterer en mengde andre funksjoner på Microsoft.XMLDOM objektet. – – –

ATL og ASP COM komponenter for bruk i ASP sider

C++ COM ASP En ASP side kan aksessere ethvert objekt som implementerer IDispatch interfacet Aksessen skjer på samme måte som enhver script-basert aksess til en komponent Metoder som ikke er ”oleautomation” kompatible kan ikke kalles Det ser ut som om script-interpreteren ikke støtte VARIANT-records (ennå?)

Hello ATL - IDL import "oaidl.idl"; import "ocidl.idl"; [ object, uuid(B D4-A C785A717), dual, pointer_default(unique) ] interface ICaseTransform : IDispatch { HRESULT ToUpperCase([in] BSTR input, [out,retval] BSTR* upcase); }; [ uuid(4F63DF31-78E1-11D4-A C785A717), version(1.0) ] library ASPCOMPONENTLib { importlib("stdole32.tlb"); importlib("stdole2.tlb"); [ uuid(B D4-A C785A717) ] coclass CaseTransform { [default] interface ICaseTransform; };

Hello ATL - Header class ATL_NO_VTABLE CoCaseTransform : public CComObjectRoot, public CComCoClass, public IDispatchImpl { public: DECLARE_REGISTRY_RESOURCEID(IDR_CASETRANSFORM) // ProgId ASPComponent.CaseTransform.1 // Clsid {B D4-A C785A717} BEGIN_COM_MAP(CoCaseTransform) COM_INTERFACE_ENTRY(ICaseTransform) COM_INTERFACE_ENTRY(IDispatch) END_COM_MAP() STDMETHOD(ToUpperCase)(BSTR input, BSTR* upcaseString) { CComBSTR result(input); wcsupr(result); *upcase = result.Detach(); return S_OK; } };

Hello ATL - ASP <% var component = Server.CreateObject("ASPComponent.CaseTransform"); Response.Write(component.ToUpperCase("hello world")); %>

Hello ASP ASP scriptet bruker Server.CreateObject for å opprette det nye objektet Scriptet bruker ProgId for å angi hvilket objekt som skal opprettes (husk å registrere dll’en) Merk at IIS 4.0 kun støttet InProcess komponenter (dette kan påvirkes) IIS tar lock på dll’en. Denne locken blir ikke frigjort før serveren rebootes (?!?) sample/10AspComponentTest.asphttp://gnats/asp- sample/10AspComponentTest.asp

ATL – Bruk av ASP objekter Når et objekt opprettes på en side, vil metodene ”OnStartPage” og ”OnEndPage” kalles, dersom objektet implementerer dem OnStartPage – kalles når objektet opprettes, gir komponenten tilgang til ASP’s objektmodell OnEndPage – kalles når siden er ferdig presentert. Etter at OnEndPage er kalt, vil objektene fra OnStartPage være ugyldige

Eksempel OnStartPage – setter opp alle objekt-referansene vi trenger OnEndPage – slipper alle objektreferanser OutputPage – skriver ut en web-side ved å bruke Response objektet OutputPage er funksjonelt lik eksempel 5, som bruker Forms sample/11AspSecondCompontent.asphttp://gnats/asp- sample/11AspSecondCompontent.asp

OnStartPage STDMETHODIMP CoAspTestComponent::OnStartPage (IUnknown* pUnk) { CComPtr pContext; HRESULT hr = pUnk->QueryInterface(IID_IScriptingContext, (void **)&pContext); // Get all the scripting object references if ( SUCCEEDED(hr) ) hr = pContext->get_Request(&m_pRequest); if ( SUCCEEDED(hr) ) hr = pContext->get_Response(&m_pResponse); if ( SUCCEEDED(hr) ) hr = pContext->get_Server(&m_pServer); if ( SUCCEEDED(hr) ) hr = pContext->get_Session(&m_pSession); if ( SUCCEEDED(hr) ) hr = pContext->get_Application(&m_pApplication); if ( FAILED(hr) ) // Release all object references if something went wrong return S_OK; }

OnEndPage STDMETHODIMP CoAspTestComponent::OnEndPage () { // Release all interfaces m_pRequest.Release(); m_pResponse.Release(); m_pServer.Release(); m_pSession.Release(); m_pApplication.Release(); return S_OK; }

OutputPage STDMETHODIMP CoAspTestComponent::OutputPage() { CComPtr pForm; m_pRequest->get_Form(&pForm); int formCount = 0; pForm->get_Count(&formCount); if ( formCount == 0 ) { // means no post action return OutputFormPage(); } else { return OutputResultPage(pForm); }

OutputFormPage HRESULT CoAspTestComponent::OutputFormPage() { CComVariant vFormPage( L" \n" L" Please insert your message \n" L" \n" L" To: ” L” \n" L" From: ” L” \n" L" Message text \n” // OSV L" \n" L" "); return m_pResponse->Write(vFormPage); }

OutputResultPage HRESULT CoAspTestComponent::OutputResultPage(IRequestDictionary* pForm) { m_pResponse->Write( CComVariant(L" I got the following information: \n")); m_pResponse->Write(CComVariant(L" \n")); CComVariant fields[] = { L"to", L"from", L" ", L"subject" }; for ( int i=0; i<sizeof(fields)/sizeof(*fields); i++ ) OutputFieldValue(fields[i]); m_pResponse->Write( CComVariant(L" Message text \n" L" ")); CComVariant fieldValue; pForm->get_Item(CComVariant(L"message"), &fieldValue); m_pResponse->Write(fieldValue); m_pResponse->Write(CComVariant(L" \n \n")); return hr; }

OutputFieldValue HRESULT CoAspTestComponent::OutputFieldValue( IRequestDictionary* pForm, CComVariant fieldName) { CComVariant fieldValue; pForm->get_Item(fieldName, &fieldValue); m_pResponse->Write(CComVariant(L" ")); m_pResponse->Write(fieldName); m_pResponse->Write(CComVariant(L": ")); m_pResponse->Write(fieldValue); m_pResponse->Write(CComVariant(L" ")); return hr; }

Grenser for hva som kan gjøres På grunn av locking av dll er det vanskelig å bytte ut en dll Jeg har ikke forsøkt å bruke debuggeren mot et ASP script, men jeg tror det er vrient ASP kan ikke aksesser IUnknown komponenter eller Variant structer Konklusjon: ASP egner seg best som et tynt presentasjonslag over eksisterende funksjonalitet

ASP og IUnknown sample/12- 1AspStructs.asphttp://gnats/asp- sample/12- 1AspStructs.asp Det går ikke å aksessere funksjoner som ikke er oleauto. Eksempelet viser aksess av : HRESULT GetStruct([out, retval, ref] struct MyTestStruct** theStruct);

ASP og Variant Records sample/12- 2AspStructs.asphttp://gnats/asp- sample/12- 2AspStructs.asp Eksempelet viser kall på en metode som returnerer en struct i en VARIANT

Structwrapper Det er relativt enkelt å skrive en wrapper for structs i en IDispatch interface Bruken av denne wrapperen er nesten transparent fra Script klienter Dessverre ser det ut som om dette fremprovoserer en feil i script interpreter (?) Bruk vil få serveren til å bruke mer og mer ressurser på ”inetinfo.exe” prosessen inntil maskinen krasjer. Bruk vil også blokke alle andre web-requester

Eksempler Jeg skal gjøre tilgjengelig en samling med ASP script (eksemplene her) og et VC 6.0 prosjekt med ATL ASP-kode ATL koden inkluderer scriptwrapper. Det går fint ann å leke med den, men man må reboote serveren etterpå ;-)

Hva nå? Både JScript, og ASP er dokumentert i MSDN Scriptspråk –JScript - msdn.microsoft.com/scripting/jscript/ –VBScript - msdn.microsoft.com/scripting/vbscript/ –Generelt – –Se spesielt Language Reference ASPover.asphttp://msdn.microsoft.com/workshop/server/asp/ ASPover.asp

MSDN For orden skyld: Her er plasseringen i MSDN ASP Object Model: –Platform SDK/Web Services/Internet Information Services SDK/Active Server Pages Guide/Visual Basic Object Model Jscript –Plaform SDK/Tools and Languages/Scripting/Jscript VBScript –Plaform SDK/Tools and Languages/Scripting/Vbscript