Nätverk Internet. Databasdrivna applikationer och applikationer som använder databaser. Internet. Ett nätverk. Varför nätverksapplikationer?



Relevanta dokument
Nätverk och Java, grunder Föreläsning 0: 0: Introduktion till Internet

Nätverk grunder Föreläsning 1: 1: Introduktion till Internet

2I1070 Lektion 2 Servlets och databaskopplingar Internetprogrammering 2I1049 Treskiktsarkitektur Klient-server med servlets

Björn Eiderbäck, Cristian Bogdan

Webbservrar, severskript & webbproduktion

Administration: Grundläggande internetprogrammering

F8 Webbteknologier 1. Dynamiska webbsidor

Grundläggande datavetenskap, 4p

Olika slags datornätverk. Föreläsning 5 Internet ARPANET, Internet började med ARPANET

Webbteknik II. Föreläsning 4. Watching the river flow. John Häggerud, 2011

Datakommunika,on på Internet

FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY , kl

Klientprogrammering mot databaser

Mattias Wiggberg 1. Orientera på Internet. IP-adress. IP-adresserna räcker inte... Mer om IP-adresser

Innehåll. MySQL Grundkurs

IT för personligt arbete F2

PHP-presentation Dataföreningens Open Source-nätverk

Webbprogrammering. Sahand Sadjadee

Webbteknik. Innehåll. Historisk återblick Teknisk beskrivning Märkspråk Standardisering Trender. En kort introduktion

WWW. Exempel på klientsidan. Överföring av en html-fil. Snyggare variant. Verkligt format. Meddelandeformat för begäran HTTP

Tentamensskrivning Nätverksprogrammering (EDA095 - FED) , kl 8-13

Christer Scheja TAC AB

Objektorienterad Programkonstruktion. Föreläsning 10 7 dec 2015

Lite mer om CGI-programmering

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

Repetition DK2 Middleware, P2P, Multimediatransport. Stefan Alfredsson 18 Mars 2005

Datakommunika,on på Internet

Tentamen ITK:P2. Inga hjälpmedel tillåtna förutom penna och papper. Skriv tydligt och texta gärna. 14 st frågor, 70 poäng.

Avancerade Webbteknologier

Hur hänger det ihop? För att kunna kommunicera krävs ett protokoll tcp/ip, http, ftp För att veta var man skall skicka

Statistik från webbplatser

DI-institutionen Sid 1 av 5 Hans-Edy Mårtensson Sten Sundin Micael Karlsson

Karlstads Universitet, Datavetenskap 1

Prova på-laboration i PHP Johan Sjöholm johsj@ida.liu.se Institutionen för datavetenskap, Linköpings universitet

Internet. Internet hur kom det till? Internets framväxt. Ett hierarkiskt uppbyggt telenät Kretskopplat/circuit switching

Datakursen PRO Veberöd våren 2011 internet

Introduktion Schenker-BTL AB, Stab IT Beskrivning över informationsintegreringmed Schenker, metodbeskrivning version 1.

Tentamen Nätverksprogrammering Lösningsförslag

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin

Surfning. Webbklienter och webbservrar. Specialskrivna webbservrar. Kommunikation med sockets

Webbprogrammering - 725G54 PHP. Foreläsning II

Tentamen Nätverksprogrammering Lösningsförslag

Web Services. Cognitude 1

Högskolan Dalarna sid 1 av 5 DI-institutionen Hans-Edy Mårtensson Sten Sundin

Introduktion till integrering av Schenkers e-tjänster. Version 2.0

TCP/IP och Internetadressering

Modul 6 Webbsäkerhet

Översikt. Installation av EasyPHP 1. Ladda ner från Jag använder Release Installera EasyPHP.

Lektion 5 HTML, CSS, PHP och MySQL

Webbtjänster med API er

Att skriva till och läsa från terminalfönstret

Internationalisering/lokalisering på webben

Databaser på webben. Revision Johan Näsholm, johan@nasholm.com

PHP - Fortsättning. PHP och MySQL

Innehålls förteckning

ASP.NET Thomas Mejtoft


Webbsidor och webbservrar

Tentamen Nätverksprogrammering Lösningsförslag

Klient/server. Översikt. Lektion 1: Webbtekniker från Microsoft. Webbteknik från Microsoft. Klient/server. Designmönster. Utrullning.

Det här dokumentet är till för att ge en översikt över ASP.NET MVC samt hur WCF Services används från.net applikationer.

FÖRSLAG TILL LÖSNINGAR, TENTAMEN I IKB007 INTERNETPROGRAMMERING MED JAVA, 5p för SY2, , kl

F9 Webbteknologier 1. EDA095 Nätverksprogrammering. Roger Henriksson Datavetenskap Lunds universitet

Distribuerade affärssystem

INTRODUKTION TILL JDBC

Nya webbservern Dvwebb.mah.se

Grundläggande nätverksteknik. F2: Kapitel 2 och 3

Föreläsning 2. Operativsystem och programmering

Uniform Resource Locator (URL) JavaServer Pages - JSP. Webbklienter. Webbserver. Hypertext Transfer Protocol (HTTP) HTTP Request

Arbeta med databas. Översikt. Lektion 1: Arbeta med Entity Data Models. Arbeta med Entity Data Models. LINQ (Language Integrated Query).

Objektorienterad programmering i Java. Föreläsning 5 Kort om Java-Applets

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

INNEHÅLL. Konfigurering av SQL Server. Egenskaper Kommunikationsprotokoll

Datainsamling över Internet

Skärmbilden i Netscape Navigator

PNSPO! CP1W-CIF mars 2012 OMRON Corporation

Introduktion till programmering

Skriftlig tentamen i kursen TDTS04 Datornät och distribuerade system kl. 8 12

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

Datasäkerhet och integritet

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Introduktion till PHP

F8 Meddelandesändning med UDP

Transport Layer. Transport Layer. F9 Meddelandesändning med UDP EDA095 Nätverksprogrammering. Java och UDP TCP/UDP

Webbens grundbegrepp. Introduktion till programmering. Ytterligare exempel. Exempel på webbsida. Föreläsning 5

Kort om World Wide Web (webben)

Tentamen Nätverksprogrammering Lösningsförslag

Webbteknik II. Föreläsning 5. Restless farewell. John Häggerud, 2011

Grundläggande programmering DVG A08 & ISG A04. Allmän information. Å vem är jag då. Karlstads Universitet, Johan Öfverberg 1

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Tentamensskrivning Nätverksprogrammering (EDA095) , kl 8-13

Webbserver och HTML-sidor i E1000 KI

Servlets y JSP Fernando Berzal,

Innehåll. Dokumentet gäller från och med version

Introduktion HTML och PHP 732G16 Databaser design och programmering

Innehåll. Föreläsning 3. javax.naming.context. javax.sql.datasource. Vad är JDBC? Java Naming and Directory Interface(JNDI) Viktigaste metoder:

729G28. Webbprogrammering och databaser. Introduktion till webbutveckling med PHP. Jakob Pogulis Institutionen för Datavetenskap (IDA)

Litteratur. Nätverk, Internet och World Wide Web. Olika typer av nätverk. Varför nätverk? Anne Diedrichs Medieteknik Södertörns högskola

Transkript:

Databasdrivna applikationer och applikationer som använder databaser Nätverk (Internet) Webbservrar (mest Apache) Programspråk CGI Java Servlets JSP Applikationsservrar (Tomcat) Databaser med Perl Databaser med PHP Databaser med Java Lite om CA Varför nätverksapplikationer? Nätverk Internet Allt större behov av program som kommunicerar över (stora) avstånd, t.ex. WWW, email och news med asynkron kommunikation. Också behov av program där användaren är väl medveten om att (någon i) omgivningen vill ha direktkommunikation, t.ex chatt (delade anslagstavlor), whiteboards, delade ordbehandlare, styrssystem (robotar mm) och (inte minst) spel. Finns stöd i dagens nätverk (tex Internet) 2D1470 Bildserie 5 bild 1 2D1470 Bildserie 5 bild 2 Ett nätverk Internet Ett nätverk är en samling av datorer eller annan utrustning som kopplats samman. Termer nod en maskin i nätverket (dator, skrivare, läskautomat,... ) värd nod som är komplett dator kallas för värd adress varje nod i nätverket har en unik adress paket moderna nätverk är paket-baserade, dvs informationen bryts ner till och skickas som paket. Varje paket hanteras för sig. protokoll specifikation för hur kommunikationen i nätverket skall gå till. Internet är det mest kända nätverket och idag det mest spridda Designat för att vara robust Första versionen konstruerat av ARPA (en myndighet inom USAs försvar). Kallades ARPANET som sedan "växt uttill Internet. (ARPANET) första versionen 1968. Då med ett fåtal anslutna datorer 2D1470 Bildserie 5 bild 3 2D1470 Bildserie 5 bild 4

Ett nätverks kommunikationslager IP / TCP / UDP Applikationslager (HTTP, FTP, Telnet,...) Transportlager (TCP, UDP,...) Nätverkslager (IP,...) Logisk förbindelse Fysiskt lager (Ethernet, FDDI, Local Talk, drivrutiner,...) Applikationslager (HTTP, FTP, Telnet,...) Transportlager (TCP, UDP,...) Nätverkslager (IP,...) Applikationsprogrammerare arbetar oftast i det övre lagret För speciella distribuerade tillämpningar kan man tvingas arbeta även i transportlagret Övriga lager behöver vi normalt inte bry oss om IP, Internet Protocol protokollet som används på nätverksnivå av Internet TCP, Transport Control Protocol ett anslutningsbaserat protokoll som erbjuder tillförlitligt datautbyte mellan två noder. Upprätthåller anslutningen tills den kopplas ner. UDP, User Datagram Protocol ett protokoll som tillåter skickande av oberoende paket av data från en nod till en annan utan att varken garantera att paketen kommer fram eller ordningen mellan dem är samma vid mottagandet som vid utskickandet. Öppnar förbindelsen, skickar ett paket släpper förbindelsen. 2D1470 Bildserie 5 bild 5 2D1470 Bildserie 5 bild 6 IP-adress, DNS Varje dator på Internet identifieras med ett fyra-bytes tal Många datorer har fasta nummer andra tilldelas temporära nummer då de ansluter 32 bitar räcker till 2 32 = 4294967296 adresser men det räcker ändå inte så det finns ett förslag, IPv6, med 128 bitars adresser, dvs 2 128 = 340282366920938463463374607431768211456 adresser (som ju bör räcka ett tag) DNS (Domain Name Server). IP-adresser är svåra att komma ihåg för människor Därför konstruerades DNS som kan översätta mer lättihågkomna namn till IP-adresser. T.ex. blir www.nada.kth.se = 130.237.222.66 Portar Varje dator med en IP-adress har ett antal logiska portar för att kommunicera med sin omgivning. En port är ett 16-bitars tal, d.v.s. ett tal mellan 0 och 65535. Vissa är reserverade. På Unix/Linux hittar man de reserverade i /etc/services. Internet och Intranet Internet är ett världsomspännande nätverk. Via gateways kan man isolera delar och bygga lokala nätverk, där varje nod har ett IP som är unikt bara lokalt. Dessa lokala nätverk kallas Intranet. 2D1470 Bildserie 5 bild 7 2D1470 Bildserie 5 bild 8

Klient-server-applikationer Idag är klient-server-modellen vanligast för distribuerade, samarbetande program. en klient ber en server om en viss tjänst en server utför tjänster åt klienter Inte alla typer av applikationer passar in i klient-server-modellen. T.ex. kan båda ändarna vara server och klient samtidigt. Man brukar då prata om kommunikation peer-to-peer. T.ex. en delad riteditor, ett nätverksspel eller en telefonförbindelse HTTP, HTML, XHTML, MIME och URL HTTP (Hypertext Transfer Protocol) beskriver hur webbklineter och webbservrar utbyter data. HTML (HyperText Markup Language) nuvarande standardspråk för konstruktion av webbsidor XHTML (extensible HTML) nya standarden, strikt delmängd av XML MIME (Multipurpose Internet Mail Extensions) beskriver hur multimediadata skall skickas via e-post URL (Uniform Resource Locator) definierar hur en fil unikt kan identifieras på internet 2D1470 Bildserie 5 bild 9 2D1470 Bildserie 5 bild 10 CGI och Server Side Includes Databasapplikationer CGI (Common Gateway Interface) är ett system för att kunna köra program lokalt på servern, inititerade från HTTP-servern. Används fortfarande men anses (med rätta) säkerhetsmässigt vara svarta hål. Server Side Includes är en modernare variant som är tämligen klumpig och bör ersättas av ASP (som dock fungerar bäst bara på Windows), JSP, PHP eller liknande. Klient Presenta tionslager HTML XHTML XML Applet HTTP Webbserver Säkerhets hanterare Fellog Applikationslager Applikationsserver JSP JSP motor Servlets Servletmotor JVM Böna Böna Anslut ningspool JDBC JavaMail JNDI RMI Datalager DB Mailserver Katalogservice Java applikation Klient appl Sessioner Strömmar Socketar Serialisering Böna Böna Böna Böna Sessionsbönor Entitetsbönor EJB server PHP motor IIOP Jini CA applikation Java Spaces Filsystemet 2D1470 Bildserie 5 bild 11 2D1470 Bildserie 5 bild 12

Systemarkitektur Flerlagerapplikationer / Multi-tier / n-tier Klientlagret (topplagret) Applikationens användargränssnitt Användarna interagerar direkt med applikationen via detta lager Applikationslagret (mellanlagret) Implementerar affärs- och presentationslogiken Kontrollerar interaktionen mellan applikationen och dess data Datalagret (informationslagret / bottenlagret) Hanterar applikationens data (ofta lagrad i en databas) webbservrar Det finns många och de mest använda är Apache Open source-programvara, gratis att ladda ner för vem som helst. En gång installerad brukar den starta automatiskt, oftast med en standard -konfiguration. Fullständigt konfigurerbar och världens mest spridda webbserver. Finns till i stort sett varje plattform. Har 67 % av marknaden. IIS Microsoftprogramvara som följer med MS Windows. Enkelt konfigurerbar men finns bara till Windows. MS säljer 5 olika servrar i många olika varianter. Har 21,5 % av marknaden (summan av alla 5) 2D1470 Bildserie 5 bild 13 2D1470 Bildserie 5 bild 14 webbservrar... SunONE Sun säljer 7 olika servrar och har totalt för alla 7 3,25% av marknaden och fungerar på alla plattformar som kan köra Java. Avsedda för mycket höga transaktionsvolymer. Zeus kommer på 4:e plats med 1,5 %. Finns för alla plattformar. Avsedd för mycket höga transaktionsvolymer på system med mer än en CPU. Lastbalanserande. webbservrar... Utvecklingen har varit enorm, från 18957 servrar i augusti 1995 till 50 millioner i början på maj 2004. Internetadresserna räcker snart inte till. Spam och phishing är två globala problem. Trots det är det värt mödan att snegla på hur program fungerar med dels uppdelningen, dels de olika teknikerna. XML har vi redan tittat lite på. Övriga 6,75 % täcks av ett otal högt specialiserade servrar. 2D1470 Bildserie 5 bild 15 2D1470 Bildserie 5 bild 16

Skript på klientsidan kontra på serversidan Skript på klientsidan Validerar användarinmatning Minskar trafiken med server Kan hantera webläsare mm Kan skapa dynamiska effekter på websidorna via tex DHTML, ActiveX, applets, flash, mm Skript på serversidan Accessa webservrar Be om dokument från webserver m.h.a. värddatornamn på lokal server via localhost eller 127.0.0.1 Webservrar placerade utanför egna domänen via maskinnamn + domännamn + subdomän över DNS (Domain Name Server) eller via IP-adress Exekverar på server Skapar svar anpassade till olika klienter Många programmeringsmöjligheter Kan utnyttja mjukvara på servern som utökar serverns funktionalitet 2D1470 Bildserie 5 bild 17 2D1470 Bildserie 5 bild 18 Apache Startas och stoppas på Windows via startmenyn Programs Control Apache Server där man får menyalternativen start, stop och restart. Startas och stoppas på Linux/Unix (som root) via /etc/inint.d/httpd + något av argumenten start, stop eller restart. Kör default på port 80, men kan startas på vilken port som helst. Hur lägger jag upp sidor i Apache? På windows i katalogen Apache/htdocs eller i en underkatalog till denna. I Unix/Linux kan man välja ganska fritt och skriva i konfigurationsfilen var filernas katalogträd har sin rot. I de flesta Linux-distributionerna är /var/www/html default. Man kan också ange vilka filer som servern ska leta efter om ingen fil anges i sökuttrycket utan endast katalog angivits. I konfigurationsfilen sätter man detta i variabeln DirectoryIndex. Anges mer än en filändelse letar servern i den ordning som anges i konfigurationsfilen. Apache kan fås att acceptera eller förkasta CGI. Om man accepterar CGI kan man skriva programmen i snart sagt vad som helst (Perl, PHP, Python, TCL,... ) 2D1470 Bildserie 5 bild 19 2D1470 Bildserie 5 bild 20

Ett av de vanligaste CGI-språken Open Source (gratis) Perl Egentligen utvecklat för textmanipulation (gör ju att det är idealiskt för webben och för shellscript) Enkelt att använda, praktiskt snarare än snyggt. Mängder av tredjepartsmoduler, klarar allt Perlprogram #!/usr/bin/perl print "Content-type: text/html\n\n"; print "<html>\n<body>\n"; print "Hello World!\n"; print "</body>\n</html>\n"; Kan hantera omgivningen till programmet så man bör förhindra att Perlprogram tillåts skriva på filsystemet. Finns för alla plattformar Fungerar ihop med alla webbservrar (tror jag) 2D1470 Bildserie 5 bild 21 2D1470 Bildserie 5 bild 22 Hypertext Preprocessor Exekveras på servern PHP Kraftfullt databasstöd (MySQL, Informix, Oracle, Sybase, Solid, PostgreSQL, Generic ODBC, etc.) Open source Fritt att ladda ner och använda <html> <head> <title>php Test</title> </head> <body> <?php print "Hello World";?> </body> </html> PHP Mycket stöd online, se t.ex. http://www.php.net eller http://se.php.net/tut.php 2D1470 Bildserie 5 bild 23 2D1470 Bildserie 5 bild 24

PHP Det finns ett bra exempel på PHP-skript på /info/oodb04/förel där php-skriptet innehåller deklarerade variabler och sätter dessa m.a.p. inmatning i ett inmatningsfönster och skriver om sidan så att webbläsaren uppfattar den som en ny sida. Dessa skript accessar antingen en informix- eller en postgresql-databas för att hämta data ur den och presenterar resultatet på en (omskriven) sida. PHP PHP kan innehålla text, HTML-taggar och script/programkod PHP filer returneras till Browsern som ren HTML PHP-filer har något av suffixen.php,.php3 eller.phtml 2D1470 Bildserie 5 bild 25 2D1470 Bildserie 5 bild 26 PHP och databaser PHP fungerar bra ihop med de flesta av databashanterarna. MySQL är mycket vanligt på site -r byggda med PHP. PostgreSQL likaså. Båda är GPL/Open Source. Båda är utmärkta val för små till medelstora webbplatser / applikationer. Båda fungerar på de flesta av plattformarna. Båda använder standard SQL, MySQL med några begränsningar. PHP kombinerat med antingen MySQL eller postgresql är plattformsneutral. Applikationsservrar Mellanlagret kan bestå av CGI, PHP eller en applikationsserver (eller en kombination av dessa) + webbserver. Det finns många applikationsservrar. Några är GPL / OSS. Bland dessa finner vi PHPAppl Appl.Serv. för PHP avsedd för att underlätta bygge av webbplats LiteWebServer från Gefion, miniversion av Apache Tomcat JBoss Java-applikationsserver med mycket gemensamt med Tomcat Tomcat från Apache. Tomcat är egentligen en referensimplementation för test av distribuerade Javaapplikationer byggda på servlets. Sun Java System Application Server som flera andra nerladdningsbar gratis utvecklingsversion. De flesta av de kommersiella är specialiserade på något sätt. Tomcat är ojämförligt störst. Jag använder gärna utvecklingsversionen av Orion. Enkel, trevlig, lätt att använda. 2D1470 Bildserie 5 bild 27 2D1470 Bildserie 5 bild 28

Tomcat referensimplementation för Java Servlets och Java Server Pages fungerar som en container program som accessas via Tomcat instansieras första gången och lever sedan kvar i containern Servlets En servlet är ett program som körs på serversidan ungefär som CGI-skript Kan kommunicera med databaser, filsystemet, andra program Anropas från en wbbläsare eller från en form på en webbsida Effektivt trådar istället för OS-processer Bekvämt massor med högnivåfaciliteter Kraftfullt dela data, poolning, persistens Portabelt kan köras på massor av plattformar och servrar Säkert körs i en skyddad miljö kontrollerad av en applikationsserver, ingen overflow Resursmässigt billigt 2D1470 Bildserie 5 bild 29 2D1470 Bildserie 5 bild 30 Servlets import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class ServletTemplate extends HttpServlet { public void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { // Use "request" to read incoming HTTP headers // (e.g., cookies) and query data from HTML forms. // Use "response" to specify the HTTP response status // code and headers (e.g. the content type, cookies). PrintWriter out = response.getwriter(); // Use "out" to send content to browser Enkel servlet genererar text (Hello world!) import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWorld extends HttpServlet { public void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getwriter(); out.println("hello World"); 2D1470 Bildserie 5 bild 31 2D1470 Bildserie 5 bild 32

Servlets Suns tutorial för servlets http://java.sun.com/docs/books/tutorial/servlets/index.html kan initieras m.h.a. XML kan initieras m.h.a. forms i webbsida En servlet har tillgång till mycket info som skickas via HTMLprotokollet. Man kan se hur den anropades (GET / POST), vilken URI som angavs, vilka browser klienten har, vilken dator som klienten befinner sig på m.m. Cookies kan användas för att koppla data till viss användare Namn/lösen (försiktighet krävs dock!), var man varit på siten, varukorg eller liknande En cookie lagras på klientens dator Då man ansluter nästa gång kan man läsa av cookien hos servern Cookies kan användas för att hantera en användares sessioner på servern (man kan använda annat också, t.ex. URL-rewriting, Hidden forms men det är klumpigare) Java servlets erbjuder speciella sessionmekanismer som döljer den faktiska metod som används JSP JSP (Java Server Pages) är Java inbäddat i webbsidors kod. Man kan alltså blanda HTML(XHTML) med javakod, ge filen efternamnet.jsp och voila Tomcat/Cocoon (eller... ) hanterar sidan, filtrerar ut och exekverar JSP-(Java-)koden och presenterar resultatet (= skickar den genererade strömmen till sitt standard output ) Kraftfullare än ASP (Basic) och framför allt mer portabelt Kraftfullare än PHP (man har hela Java tillgängligt) Översätts till servlets. Har man beräkningstunga program kan det vara ide att skriva servlets. För dynamisk HTML kan man använda JSP. Har en rikare flora av verktyg jämfört med SSI (Server Side Includes) Kraftfullare än JavaScript (och exekverar på servern syns inte i HTML-sidan) Kan integreras med servlets 2D1470 Bildserie 5 bild 33 2D1470 Bildserie 5 bild 34 Perl och databaser Till Perl finns en modul, DBI, som tillhandahåller stöd för diverse databaser, DBD::mysql heter drivern för MySQL. #!C:\Perl\bin\perl # Fig. 25.19: fig25_19.pl from Deitel&Deitel # Internet & World Wide Web How to Program 3:d Edition # CGI program that generates a list of authors. use CGI qw( :standard ); use DBI; use DBD::mysql; $dtd = "-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"; print( header() ); Perl och databaser... print( start_html( { dtd => $dtd, title => "Authors" ) ); $databasehandle = DBI->connect( "DBI:mysql:books", "root", "", { RaiseError => 1 ); $query = "SELECT FirstName, LastName, AuthorID FROM Authors ORDER BY LastName"; $statementhandle = $databasehandle->prepare( $query ); $statementhandle->execute(); print( h2( "Choose an author:" ) ); print( start_form( { action => fig25_20.pl ) ); print( "<select name = \"author\">\n" ); while ( @row = $statementhandle->fetchrow_array() ) { print( "<option>" ); print( "$row[ 2 ]. $row[ 1 ], $row[ 0 ]" ); print( "</option>" ); 2D1470 Bildserie 5 bild 35 2D1470 Bildserie 5 bild 36

Perl och databaser... print( "</select>\n" ); print( submit( { value => Get Info ) ); print( end_form(), end_html() ); $databasehandle->disconnect(); $statementhandle->finish(); ur: Deitel, Deitel och Goldberg: Internet & World Wide Web How to Program, 3 ed, 2004, avsnitt 25.8 http://www.deitel.com http://www.deitel.com/books/downloads.html PHP och databaser För att öva SQL finns för studenterna ett PHP-gränssnitt mot en PostgreSQL-databas. Man kan hitta PHP-filen (och även filen för att ladda postgresql-databasen) på kursbiblioteket: /info/oodb04/php-postgresql/ Struktur: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3c.org/tr/rec-html40/loose.dtd"> <html><head>... </head> <body>... <?php $database=pg_connect("dbname=varuhuset"); // Öppna alltid databasen if($action=="usersql") { // denna action utförs bara om man // skrivit något i inmatningsfönstret // och tryckt på "utför"-knappen 2D1470 Bildserie 5 bild 37 2D1470 Bildserie 5 bild 38 PHP och databaser... if ($action=="") { // Skriv ut databasens struktur (statiskt - tidigare hämtade jag ur db) // Skapa inmatningsfönstret och den form som hanterar det som skrivs in i // inmatningsfönstret.?> <form method=\"post\" action="<?php $PHP_SELF?>"> // inmatningsfönster och knapp för att skicka uttryck till postgres </form> <?php if($action=="viewt") { // om någon klickat på ett basrelationsnamn // sök rätt på all information i DB om aktuell tabell. OBS att // man måste namnge alla attribut för att man ska kunna // leta igenom resultatsträngarna på rimligt sätt. pg_close($database); // Stäng alltid förbindelsen till DB?> </body></html> PHP och databaser startsidan... Presentationen av databasens innehåll är en tabell med länkar där man sätter variabler och skriver om sidan: <a href="<?php $PHP_SELF?>?action=viewt&table=anst%E4lld"> anställd</a> Inmatningsfönstret (residerar utanför PHP-koden): <form method="post" action="<?php $PHP_SELF?>"> <textarea name="usersql" rows="10" cols="70"></textarea> <br><br><input type="submit" value="utför" name="query"> <br><br><input type="hidden" value="usersql" name="action"> </form> 2D1470 Bildserie 5 bild 39 2D1470 Bildserie 5 bild 40

PHP och databaser hämta info om tabell if($action=="viewt") { $sql="select a.attnum as attnum, a.attname as attname, t.typname as typname, a.attlen as attlen, a.atttypmod as atttypmod, a.attnotnull as attnotnull, a.atthasdef as atthasdef FROM pg_class c, pg_attribute a, pg_type t WHERE c.relname = $table and a.attnum > 0 and a.attrelid = c.oid and a.atttypid = t.oid ORDER BY attnum"; $result=pg_exec($database,$sql); $click=0; // bygg en tabell med data om aktuell basrelation $numofrows=pg_numrows($result);?>... byggtabellstrukturen... <?php while($click < $numofrows) { $row = pg_fetch_array($result, $click++, 1);?><tr><td><?=$row[attname]?></td> <?php if ($row[attlen]==-1) $row[attlen]="variabel";?><td><?=$row[attlen]?></td> <td><?=$row[typname]?> <?php if($row[attnotnull]=="t") echo "inte null ";... PHP och databaser kolla input ($action=="usersql") $selectexpr=false; $doevaluate=false; $usersql=stripslashes($usersql); $usersql=trim($usersql); if($usersql=="") { $action=""; else { $checkstring=strtolower($usersql); if(ereg("^create", $checkstring)) { $rest=trim(substr($checkstring,6)); if(ereg("^view", $rest)) { $doevaluate=true; 2D1470 Bildserie 5 bild 41 2D1470 Bildserie 5 bild 42 PHP och databaser kolla input ($action=="usersql")... if(ereg("^drop", $checkstring)) { $rest=trim(substr($checkstring,4)); if(ereg("^view", $rest)) { $doevaluate=true; if(ereg("^select", $checkstring)) { $doevaluate=true; $selectexpr=true; if(!$doevaluate) { // så skriv felmeddelande PHP och databaser exkevera SQL ($action=="usersql") SQL-uttryck: <?=htmlspecialchars($usersql)?> <br><br> <?php @$result=pg_exec($database,$usersql); if(!$result) { $errmsg=pg_errormessage($database);?><font color="red"><?=$errmsg?></font> <?php else { if($numofrows=pg_numrows($result)) {?><table cellspacing="0" cellpadding="3" border="1" bgcolor="#ffffff"> <tr bgcolor="#ccffff"><?php $fields=pg_numfields($result); $fields2=$fields; while($fields2) {?> <th><?=pg_fieldname($result,$fields-$fields2)?></th> <?php $fields2-- ;?> </tr> 2D1470 Bildserie 5 bild 43 2D1470 Bildserie 5 bild 44

PHP och databaser exkevera SQL ($action=="usersql")... <?php $click=0; while($numofrows > $click) { $row=pg_fetch_array($result,$click++);?> <tr> <?php $fields2=$fields; while($fields2) {?> <td><?=htmlspecialchars($row[$fields-$fields2--])?> </td> <?php?> </tr> <?php?> </table> <?php Java och databaser (JDBC) JDBC är Javas API till relationsdatabaser som gör det möjligt att på ett relativt databas- och maskinoberoende sätt att hantera databaser som pratar SQL" Så här gör man steg för steg: 1. Ladda JDBC-driver 2. Definiera anslutnings-url 3. Etablera förbindelse 4. Skapa Statement-objekt 5. Exekvera (SQL-) fråga eller uppdatera 6. Behandla resultatet 7. Stäng förbindelsen 2D1470 Bildserie 5 bild 45 2D1470 Bildserie 5 bild 46 Java och databaser (JDBC: koppla upp hämta data)... import java.sql.*; public class JDBCCode{ public static void main(string args[]) { String fileurl = "..."; String drivername = "..."; try { Class.forName(driverName); catch (ClassNotFoundException cfn) { System.out.println("Problem loading driver"); System.exit(1); Java och databaser (JDBC)... try { Connection con = DriverManager.getConnection(fileURL,"Serafim",""); Statement selectstatement = con.createstatement(); ResultSet rs = selectstatement.executequery ("select namn, lön FROM anställd WHERE lön > 35000"); String employeename; int employeesalary; while(rs.next()) { employeename = rs.getstring(1); employeesalary = rs.getint(2); System.out.println ("Namn = "+ employeename + "Lön = "+ employeesalary); 2D1470 Bildserie 5 bild 47 2D1470 Bildserie 5 bild 48

Java och databaser (JDBC)... selectstatement.close(); con.close(); rs.close(); catch(exception e) { System.out.println("Problems with access to database"); e.printstacktrace(); System.exit(2); Java och databaser (JDBC: uppdatera databas)... String fileurl = "..."; String drivername = "..."; try { //Load in the driver programmatically Class.forName(driverName); catch (ClassNotFoundException cfn) { //Problem with driver, error message and return //to operating system with status value 1 System.out.println("Problem loading driver"); System.exit(1); 2D1470 Bildserie 5 bild 49 2D1470 Bildserie 5 bild 50 Java och databaser (JDBC: uppdatera databas)... try { Connection con = DriverManager.getConnection(fileURL,"Darrel",""); Statement updatestatement = con.createstatement(); String employeename ="...", employeesalary = "...", employeedepartment = "..."; //Execute the SQL insert statement int noofrows = updatestatement.executeupdate ("INSERT INTO employees (name, salary, department)"+ "VALUES(" + " " + employeename + ", " + employeesalary + ", " + employeedepartment + " )"); catch(sqlexception sqe) { System.out.println("Problem updating database"); Java och databaser (JDBC: länkar)... http://java.sun.com/docs/books/tutorial/jdbc/index.html http://www.javaworld.com/javaworld/jw-05-1996/jw-05-shah.html http://www.javaworld.com/channel_content/jw-jdbc-index.shtml 2D1470 Bildserie 5 bild 51 2D1470 Bildserie 5 bild 52

CA Common Object Request Broker Architecture med tonvikt på common och broker. Man har inte velat standardisera objekt eller objektimpelementation utan endast hur de ska hanteras. Man har egentligen velat tillhandahålla en s.k. enabling technology som ska kunna vara en infrastruktur för hur distribuerade applikationsprogram eller system enkelt ska kunna inkorporera komponenter. Dessutom har man velat att det ska vara lika enkelt att bygga stora distribuerade system som det är att bygga helt centraliserade system. inte helt lätt och man har väl inte nått ända fram men det man lyckats med är intressant då man levererat en standard för distribution av komponenter som är språk- och plattformsoberoende. Bygger på en server-klient-modell en server erbjuder service en klient utnyttjar den det finns objekt i nätverket som kan agera antingen server eller klient beroende på behovet Det finns bindningar till nästan alla språk 2D1470 Bildserie 5 bild 53 2D1470 Bildserie 5 bild 54 klient Objekt impl Appl. gränssn. Domän gränssn. Gener. tjänster D I I IDL stub gränssnitt Object Request Broker IDL skelett objekt adapter Object Request Brokers Objekt tjänster 2D1470 Bildserie 5 bild 55 2D1470 Bildserie 5 bild 56

För att göra systemet generellt användbart finns en hel del tjänster inbyggda Objekttjänster tillhandahåller objekthantering Generella tjänster är ett objektbibliotek med vanligen förekommande objekt (gränssnitt, systemhantering) Domängränssnitt är applikationsområdesspecifika (domänspecifika) objekt eller applikationsprogram (för hälsovård, ekonomi,... ) Applikationsgränssnitt är användardefinierade objekt som registrerats i CA Klient IDL stub Object Request Broker () objekt implem. IDL skelett Meddelanden mellan klient och server förmedlas av mäklaren, Object Request Broker (), alltid via -en aldrig någon annan väg. 2D1470 Bildserie 5 bild 57 2D1470 Bildserie 5 bild 58 Applikationen ser bara objektets gränssnitt, inga implementationsdetaljer. Distributionen sköts helt av Corba, som också ger arv, inkapsling, polymorfi,... Objektens gränssnitt specificeras i IDL (Interface Definition Language) metodnamn inparametrar svarstyp felhantering Applikationsprogram och objektimplementation isoleras från varandra genom: en stubbe, skriven i IDL, på klientsidan en (eller flera) ett skelett, skrivet i IDL, på server-sidan Objekten programmeras på vanligt sätt i ett värdspråk (C, C++, Java, Smalltalk, Cobol, Ada, Visual Basic f.n., men fler kommer på löpande band). IDL används för att specificera gränssnittet i Corba och för att generera skelettkoden. Vid programmering av objektkoden refereras OMG-avbildningen för aktuellt språk Skelettets gränssnitts- bindningar mot objektet genereras av OMG- avbildningen Objektets gränssnittsbindningar mot skelettet genereras av OMGavbildningen Programmeringen utförs i valt programspråk OMG-avbildningen för språket byggs in i IDL- 2D1470 Bildserie 5 bild 59 2D1470 Bildserie 5 bild 60

Applikationssidan genereras helt av vanlig kompilator, men applikationens gränssnitt mot :en genereras delvis av IDL-kompilatorn (the stub), länkas av standard länkare. Applikationsprogram Objektimplementationer Klient Objekt Objekt IDL stub IDL skelett IDL skelett Dynamiskt anrops gränssnitt Statiska IDL "stubbar" gränssnitt Objekt adaptrar Statiska IDL Skelett Dynamiska skelett gränssnitt Om ett objekt finns på en remote server sköts kommunikationen på -nivå. Applikationsprogrammet gör lokala anrop och får lokala svar så distributionen är helt transparent. Gränssnittslager Objektfrågemäklare (object request broker ) Implementationslager 2D1470 Bildserie 5 bild 61 2D1470 Bildserie 5 bild 62 Applikationsprogrammen och objekten kopplas ihop via en. Applikationsprogrammet kommunicerar via en stubbe eller en DII. Varje stubbe utgör gränssnitt mot ett CA-objekt. DII kan pga sin förmåga till dynamisk bindning anropa vilken metod som helst i vilket objekt som helst som refereras av applikationsprogrammet. Applikationsprogram och objekt ansluter via ngn. Programmen kommunicerar via Statiska stubbar eller dynamiska DII (Dynamic Invocation Interface) En stubbe tillhandahåller ett gränssnitt mot ett CAobjekt, medan man via DII kan anropa vilken metod som helst i vilket CAobjekt som helst som refereras från programmet. Stubbar kräver statisk typkontroll, medan DII endast klarar dynamisk typkontroll. Gränssnittsslagret innehåller info om gränssnitten hos alla objekt som anslutits via :en och om ens eget gränssnitt. Lagren kräver någon form av persistens eller att :en alltid är tillgänglig. 2D1470 Bildserie 5 bild 63 2D1470 Bildserie 5 bild 64

Objektimplementation Metoder 2 3 4 5 6 7 8 Skelett Basic Object Adapter 1 Kärna 1. :en får anrop avseende ett lokalt objekt 2. Starta en process för att hantera anropet (köra objektet) 3. OK från processen då den startat 4. Ladda in objektet i primärminnet 5. Sänd metodanrop 6. Ta emot svaret 7. Om objektet uppdaterats kopieras det tillbaka till sekundärminnet. 8. Om andra processer skapats - deaktivera och städa. gränssnitt Objektimplementationer Objekt adaptrar Statiska IDL Skelett Objektfrågemäklare (object request broker ) Gränssnittslager Dynamiska skelett gränssnitt Implementationslager Objektet hämtas från implementationslagret Synkronisering (översättning mellan och objektmetoder) sker i SSI Aktivitet enligt förra bilden, men skulle objektimplementationen behöva kommunikation med andra objekt sker detta via -gränssnittet. DSI används för kommunikation med andra :ar (remote calls) CA kan inte skapa objekt De skapas av något applikationsprogram och måste registreras i CA innan de kan hanteras 2D1470 Bildserie 5 bild 65 2D1470 Bildserie 5 bild 66 Objektimplementation Metoder A Metoder B Skelett A Skelett B Basic Object Adapter Kärna 1. Registrering av objektimplementationer 2. Hantering av objektreferenser (skapa, tolka) 3. Kontroll av access (nå rätt objektimplementation) 4. Aktivering / deaktivering av objekt 5. Att anrop av metoder sker korrekt 6. Koordination av samtidiga accesser A BOA B D C BOA (basic object adapter) ansvarar för 2,4,5. Mer avancerade adapters krävs för 1.. 6 En objektimplementation kan ha flera gränssnitt, vart och ett med sitt eget skelett. En process kan hantera flera objekt och tvärtom. A En delad server hanterar flera implementationer som redan beskrivits B En delad process hanterar svar från externa objekt (belägna på annan ) C Exklusiv process för hanteringav objekt för speciella ändamål eller med speciella restriktioner. D Eftersom load -balansering sker på en per-process-basis, kan det för resursbalanseringsändamål vara vettigt att låta ett objekt ha en process per metod. 2D1470 Bildserie 5 bild 67 2D1470 Bildserie 5 bild 68

Klient IDL stub Objekt IDL skelett Objekt IDL skelett A B Ett applikationsprogram ansluter till en (men en kan ha flera applikationsprogram anslutna). Alla program gör lokala anrop till den de är anslutna till. Skulle ett objekt finnas anslutet till en annan, sköts kommunikationen på -nivå i en kedja (om nästa inte har objektet i fråga sänds frågan vidare). C D Kommunikationen är helt transparent och :en låter inget program se annat än lokala anrop. -arna har förmågan till (viss) översättning om det skulle behövas. Direkt bryggning mellan domänerna är möjlig då endast enkla översättningar utförs och då man utan säkerhetsrisk kan låta alla prata med alla. 2D1470 Bildserie 5 bild 69 2D1470 Bildserie 5 bild 70 A B Progr Lokal namn service Brygga Lokal namn service Progr Progr Lokal namn service Brygga Lokal namn service Progr C Säkerhets protokoll D Progr Lokal namn service 1. Registera objektet Brygga Lokal namn service Progr 3. Bryggan skapar en objektföreträdare som simulerar objektet i kommunikationen med programmets. Här har domän D krav på upprätthållande av speciell säkerhetspolicy och därför fungerar domän D som förmedlande länk i all trafik mellan domänerna. 2. Objektet efterfrågas 2D1470 Bildserie 5 bild 71 2D1470 Bildserie 5 bild 72

Det spelar ingen roll om nätverken är av olika slag. Bryggan skapar rätt sorts företrädare. Progr Brygga Objekt CA har alltså även nätverks och OS-transparens. Applikationsprogrammet ser fortfarande endast det lokala anropet. Normal kommunikation Progr Objekt Men man kan fuska genom att alla :ar har ett internt lågnivå-api 2D1470 Bildserie 5 bild 73 2D1470 Bildserie 5 bild 74 CA, Service Livscykel Appl. gränssn. Domän gränssn. Gener. tjänster flytta ett objekt kopiera ett objekt utplåna ett objekt Object Request Brokers Objekt tjänster 2D1470 Bildserie 5 bild 75 2D1470 Bildserie 5 bild 76

CA, Service Relation CA tillhandahåller standardkomponenter för att bygga program som direkt avbildar ER-diagram. När man implementerade modulen dög inte livscykel-modulen så den implementerades lokalt med flera extra faciliteter bl.a. har alla operationer fått en mode, varav den mest värdefulla är inhibit mode - inget utförs. CA, Service Persistens CA tillhandahåller inte persistens, men har en arktiektur man måste hålla sig till om man tillhandahåller tjänsten. CA annan service Det finns även service för standard filhantering, för namngivning (bindning av namn till objekt, bindning av namn till omgivningar och översättning av namn till objekt), för händelsehantering (med eller utan händelsekö för både push, push - pull och polling), för transaktionshantering, frågehantering (traditionella frågespråk) och säkerhetsservice för distribuerade applikationer. 2D1470 Bildserie 5 bild 77 2D1470 Bildserie 5 bild 78 Slut referenser utom till Kjell och Björn På kursbibliotektet finns material för pjama, PHP och postgresql, CA och lite till (hantering av bilder med PHP, lite med ljud och bild... Saker som jag tänkt tala om men inte hunnit. En del material är stulet från olika böcker (Deitel & Deitel som fick ihop vettigt om internet) En del saker kommer från jobb och kursmaterial som utvecklats i samarbete med Kjell Lindqvist och Björn Eiderbäck för alldeles andra ändamål än den här kursen men som jag bedömt vara vettigt att ta med här. Vrox professional -serie (PHP, JSP, J2EE) har stor del i arbetet och jag äger själv i stort sett alla utom de om ASP. Perrone: J2EE Developers Handbook Kurniavan: Java for the Web Orfali, Harkey: Client-server programming with Java and CA OMG Press olika böcker om Java, CA, EJB SAMS böcker om HTML och XHTML Docendos böcker om JSP, XML, mm Dunckleys bok om Multimediadatabaser Lausen-Vossens bok: Models an Languages of Object-Oriented Databases Delobel: From Relational to Object-Oriented Systems Massor från Internet. 14 böcker om databashanteringssystem (Elmasri-Navathe, Sibleschatz, Date, Codd, Conolly-Begg, m.fl.) 2D1470 Bildserie 5 bild 79 2D1470 Bildserie 5 bild 80