Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

1 Technologie Internetu wykład 4: Technologie dokumentów dynamicznych WWW Piotr Habela Polsko-Japońska Wyższa Szkoła Technik Komputerowych.

Podobne prezentacje


Prezentacja na temat: "1 Technologie Internetu wykład 4: Technologie dokumentów dynamicznych WWW Piotr Habela Polsko-Japońska Wyższa Szkoła Technik Komputerowych."— Zapis prezentacji:

1 1 Technologie Internetu wykład 4: Technologie dokumentów dynamicznych WWW Piotr Habela Polsko-Japońska Wyższa Szkoła Technik Komputerowych

2 2 W poprzednim odcinku… Rodzaje dokumentów: statyczne, aktywne, dynamiczne; Zachowanie dokumentów aktywnych opisywane językiem skryptowym: –Zapewnia interakcyjność serwisów webowych; –Wymaga ustandaryzowanego wsparcia w środowisku przeglądarki; Całość oparta na bezstanowym protokole HTTP: interakcja z serwerem odbywa się jako sekwencja niezależnych par: żądanie-odpowiedź. Zapamiętanie stanu realizowane zwykle poprzez mechanizm cookies. Środowisko wykonawcze po stronie klienta jest bardzo ograniczone: –ustandaryzowany wspólny mianownik, –względy bezpieczeństwa, –ograniczona objętość przesyłanych danych.

3 3 Plan wykładu Motywacja dla użycia dokumentów dynamicznych; Właściwości dokumentów dynamicznych; Problem autentykacji użytkowników; Przegląd ważniejszych technologii: –Common Gateway Interface (CGI); –Server Side Includes (SSI); –PHP Hypertext Preprocessor (PHP); –Active Server Pages (ASP); –Servlety i Java Server Pages (JSP); –ASP.NET;

4 4 Dokumenty dynamiczne Motywacja = Interakcyjność serwisów WWW: –Swobodne wykorzystanie zasobów zlokalizowanych po stronie serwera – w tym baz danych; –Brak specjalnych wymagań wobec środowiska przeglądarki (jest przesyłany czysty HTML). Wykorzystywana funkcjonalność: –aplikacje oparte na bazie danych; –autoryzacja użytkownika i personalizacja; koszyk; –forum; poczta przez WWW oraz listy rozsyłkowe; –zarządzanie treścią; generowanie dokumentów.

5 5 Właściwości dokumentów dynamicznych Serwer WWW musi zostać uzupełniony o współdziałający z nim program użytkowy; Zapewnienie przekazywania danych wejściowych i wyjściowych pomiędzy serwerem WWW a programem użytkowym; Rozróżnienie adresów URL dokumentów statycznych i dynamicznych; Adres URL żądania wskazuje albo na dokument HTML zawierający interpretowane przez serwer skrypty, lub określa program, który generuje całość zwracanego dokumentu; Wynikiem przetwarzania ma być zwracany przez serwer kod strony HTML;

6 6 Problem autoryzacji użytkownika Można wyróżnić trzy kryteria udostępniania klientowi chronionego zasobu: –Autoryzacja (authorization) –Autentykacja (authentication) –Kontrola dostępu (access control). Autentykacja: użytkownik jest rzeczywiście tym, za kogo się podaje (najpowszechniejsza metoda = sprawdzenie hasła). Autoryzacja: sprawdzenie, czy dany użytkownik jest uprawniony do danego dostępu. Kontrola dostępu: inne, ujęcie zagadnienia. Poza zidentyfikowaniem użytkownika możliwe są jeszcze inne kryteria udostępnienia zasobu (np. adres, spod którego nadchodzi żądanie).

7 7 Autentykacja HTTP Najprostsza metoda, tzw. basic: –uwzględniona w protokole HTTP; –wymaga ustawień konfiguracyjnych serwera WWW; –hasło nie jest kodowane; Przebieg interakcji: –w odpowiedzi na żądanie serwer zwraca zamiast zasobu nagłówek: 401 Authentication Required ; oraz nazwę chronionego obszaru (tzw. realm) –przeglądarka wyświetla dialog (użytkownik i hasło); –wprowadzone dane są wykorzystywane przez przeglądarkę w kolejnych żądaniach dotyczących danego obszaru;

8 8 Konfigurowanie autentykacji HTTP (serwer Apache) Utworzenie pliku z hasłami uprawnionych użytkowników. Utworzenie pliku.htaccess chronionego katalogu lub wpis w głównym pliku konfiguracyjnym: –AuthType:Rodzaj autoryzacji – np. Basic –AuthName:Nazwa chronionego obszaru –AuthUserFile:Lokalizacja pliku haseł użytkowników. –AuthGroupFile:Lokalizacja pliku grupy (opcjonalnie) –Require:Identyfikatory uprawnionych użytkowników (specjalną nazwą jest valid-user, czyli każdy poprawnie zidentyfikowany użytkownik wymieniony w pliku haseł). Plik grupy określa jej nazwę oraz listę jej członków (w polu Require można wówczas podać słowo group oraz nazwę grupy. Przy większej liczebności lub fluktuacji uprawnionych, należy wesprzeć obsługę haseł mechanizmem bazy danych.

9 9 Kontrola dostępu – pozostałe możliwości Obok autoryzacji można specyfikować jeszcze inne ograniczenia dostępu, oparte na adresie z którego napływa żądanie: Allow from oraz Deny from. Można określać kolejność nakładania ograniczeń: Order: deny, allow Można też ustalić warunek logiczny: Satisfy all lub any to pierwsze (domyślne) oznacza wymagalność zarówno autentykacji hasłem jak również spełnienia dodatkowych ograniczeń; to drugie – albo autentykacja albo lokalizacja (np. wewnątrz sieci danej firmy).

10 10 CGI – Common Gateway Interface Historycznie pierwsza upowszechniona technologia dla dokumentów dynamicznych. Standard opracowany pierwotnie przez NCSA (National Center for Supercomputer Applications). Standard dla zewnętrznych programów bramki dla współdziałania z serwerami informacyjnymi takimi jak HTTP. Protokół uruchamiania programów na serwerze WWW. Ustandaryzowanie takiego interfejsu zapewnia niezależność od platformy tj. OS oraz serwera webowego. Pozwala na udostępnianie dynamicznej informacji. Nie ogranicza się do dokumentów HTML.

11 11 Architektura CGI Program implementujący dokument dynamiczny – zwany programem CGI. Typowy scenariusz działania: –odczytanie parametrów żądania (ze standardowego wejścia albo ze zmiennych środowiskowych); –przetworzenie danych; –wyprowadzenie komunikatu http (na standardowe wyjście). CGI nie jest językiem programowania i nie determinuje języka programowania. Można stosować nawet skrypty powłoki. Często stosowany Perl w związku z dostępnością modułów dla Webu oraz bardzo dobrymi udogodnieniami dla przetwarzania tekstu. Lokalizacja i nazewnictwo programów CGI – zależne od konfiguracji serwera.

12 12 Komunikacja z programem CGI Wyjście programu CGI może zawierać nagłówek interpretowany przez serwer. Określać może np. format wytworzonego dokumentu, czy też przekierowanie zlecenia w nowe miejsce, tj. przesłanie w odpowiedzi domyślnego pliku – np. Location: response.html Przekazywanie parametrów – metoda GET: –Z założenia metoda służy pobieraniu jakiegoś zasobu; –Dołączone do URL parametry precyzują takie żądanie (wymagane odpowiednie kodowanie; ograniczona długość); –kilka identycznych żądań GET ma taki sam efekt uboczny jak jedno i zwracane z takiego zapytania wyniki mogą być przechowywane w cache; => nie nadaje się do używania w operacjach wymagających reakcji na każde żądanie; –Dostępne dla programu w zmiennej środowiskowej QUERY_STRING.

13 13 Komunikacja z programem CGI Przekazywanie parametrów – metoda POST: –nadaje się do przekazywania większych objętości danych; –dane są pobierane ze standardowego wejścia. Liczba bajtów do pobrania jest określana w zmiennej środowiskowej CONTENT_LENGTH. Odpowiedzi kierowane do klienta polegają na generowaniu wyjścia HTML: –Content-type: text/html –następnie – pusta linia; –Wygenerowana zawartość dokumentu.

14 14 Zmienne środowiskowe dostępne dla programu CGI REMOTE_ADDR, REMOTE_HOST, REMOTE_USER, REMOTE_IDENT, FROM QUERY_STRING SERVER_SOFTWARE, SERVER_NAME, SERVER_PORT SERVER_PROTOCOL, GATEWAY_INTERFACE REQUEST_METHOD (np. POST lub GET) PATH_INFO (virtual) PATH_TRANSLATED, SCRIPT_NAME AUTH_TYPE (zastosowana metoda autentykacji). CONTENT_TYPE, CONTENT_LENGTH (dot. nadesłanego załącznika) ACCEPT_LANGUGE, HTTP_ACCEPT, HTTP_USER_AGENT REFERER (dokument, z którego nastąpiło odwołanie) FORWARDED (nazwa serwera proxy) HTTP_COOKIE

15 15 Wady technologii CGI Ograniczona sprawność działania: konieczność załadowania procesu przy obsłudze każdego żądania stanowi znaczne obciążenie; Problem współdzielenia zasobów nie jest łatwy do rozwiązania; Możliwość wywoływania poleceń po stronie serwera tworzy istotne zagrożenie dla bezpieczeństwa;

16 16 Internet Server Application Programming Interface (ISAPI) Technologia wprowadzona przez firmę Microsoft (przed ASP). Definiuje tzw. rozszerzenia (extensions) i filtry (filters). Zapewnia równie dużą elastyczność jak CGI. Podobną technologią jest NSAPI (Netscape Server Application Programming Interface), będący produktem Netscape, działający w ramach serwerów Enterprise tej firmy. W przeciwieństwie do CGI proces obsługi rezyduje w pamięci, a nie jest każdorazowo ładowany. Podobnie jak programy wołane poprzez CGI, w ISAPI daje możliwość wywoływania funkcji systemowych (API) i innych dostarczonych przez wybrany język programowania. Istotnym problemem jest nieprzenośność kodu (zależny od API konkretnego dostawcy) – określanej jako proprietary API

17 17 Server Side Includes (SSI) Jak sugeruje nazwa, w tym wypadku kod jest wstawiany w strukturę dokumentu HTML. Odpowiednie fragmenty dokumentu są ponownie generowane przy każdym odwołaniu. Dynamika dokumentu bez konieczności stosowania CGI; generowane są tylko wymagane fragmenty dokumentu. Możliwe zastosowania: –Licznik odwołań; –Data i czas; data ostatniej modyfikacji dokumentu; –Wkomponowywanie innego pliku lub rezultatu wywołania programu CGI. Rozszerzenia specyfikacji obejmują m. in.: –Instrukcje warunkowe (if … else); –Wysyłanie poczty.

18 18 SSI - składnia Pliki wymagające takiego przetwarzania wyróżniane zwykle specjalnym rozszerzeniem:.sht.shtm lub.shtml. Elementy interpretowane umieszczone są w specjalnych znacznikach wewnątrz kodu HTML. Przed wysłaniem zawartość jest przeglądana i osadzone znaczniki są interpretowane. Format znacznika (token) SSI jest następujący: czyli : –obowiązkowy identyfiaktor zamykający.

19 19 SSI – dostępne polecenia config - Określa sposoby parsowania plików: –errmsg – postać komunikatu o błędzie. –timefmt – format wyświetlania czasu. –sizefmt – Sposób wyświetlania rozmiaru plików (bytes lub abbrev). include – wstawienie do bieżącego dokumentu innej wersji: –virtual – ścieżka wirtualna na serwerze. –file – ścieżka względna w głąb bieżącego katalogu. echo – wyświetlenie wartości podanej zmiennej. fsize – wyświelta rozmiar pliku. flastmod – data ostatniej modyfikacji. exec – wykonanie zadanej komendy systemowej lub skryptu CGI: –cmd – uruchomienie podanego stringu jako komendy. –cgi – uruchomienie zadanego skryptu CGI.

20 20 SSI – dostępne zmienne Zmienne zdefiniowane przez specyfikację CGI. Ponadto: –DOCUMENT_NAME: Nazwa bieżącego pliku. –DOCUMENT_URI: Ścieżka wirtualna do dokumentu (np. /docs/howto/abc.shtml). –QUERY_STRING_UNESCAPED: Parametry żądania. –DATE_LOCAL: Data i strefa czasowa, formatowane poleceniem konfiguracyjnym ( timefmt ). –DATE_GMT: Data w postaci Greenwich Mean Time. –LAST_MODIFIED: Data ostatniej modyfikacji. Formatowana poleceniem konfiguracyjnym ( timefmt ).

21 21 SSI - rozszerzenia Serwer Apache udostępnia poza standardowymi poleceniami (określanymi jako NCSA-compatible) następujące rozszerzenia: –Użycie zmiennych w komendach SSI. Np. data modyfikacji bieżącego dokumentu: –Definiowanie i aktualizacja własnych zmiennych – instrukcja set. –Instrukcje warunkowe: if, else, elif and endif. Zawartość jeśli prawda Zawartość jeśli fałsz (Np. użycie zmiennej $HTTP_USER_AGENT może pomóc dostosować zwracaną treść do możliwości przeglądarki.) => Węższe możliwości w porównaniu z CGI, jednak stanowi dość użyteczne lżejsze rozwiązanie.

22 22 Active Server Pages (ASP) Klasyfikowane jako technologia gatunku SSI: Plik ASP może zawierać HTML, XML, tekst oraz skrypty; Działa w ramach IIS i PWS (Personal Web Server). Technologia firmy Microsoft. Istnieją jednak także implementacje stworzone dla innych platform. Zalety: –Dynamiczna zawartość webowa; –Obsługa danych przekazanych poprzez formularze; –Udostępnianie źródeł danych znajdujących się na serwerze; –W stosunku do CGI przewagą jest prostota i szybkość tworzenia; –Kod ASP nie jest widoczny po stronie przeglądarki; –Udostępnia zwykły HTML -> brak specjalnych wymogów wobec przeglądarki; –Przy odpowiednim programowaniu stron pozwala ograniczyć ruch w sieci.

23 23 ASP - składnia Elementy skryptu serwera oznaczane tagiem: Domyślnym językiem skryptów jest VBScript. Jeśli zdecydujemy się na JavaScript (ściśle rzecz biorąc będzie to JScript – implementacja JavaScript w wydaniu Microsoft), należy zmienić domyślny język na początku dokumentu (przed tagiem HTML): Podobnie jak w rozszerzonym SSI, elementy instrukcji warunkowej mogą się przeplatać z kodem HTML. Przykład (zmienna Response – dostęp do przetwarzanego dokuementu): Dyrektywa #include: –Umieszczana w tagach komentarza, powoduje sprowadzenie zawartości innego pliku przed ewaluacją bieżącego dokumentu: –Do wskazania lokalizacji możemy użyć atrybutów file lub virtual (znaczenie analogiczne jak w SSI).

24 24 ASP – rodzaje zmiennych Lokalne (wewnątrz procedur). Globalne strony (poza ciałem procedury): dostępne dla każdego skryptu na danej stronie. Sesji: Dostępne ze wszystkich stron danej aplikacji – tworzone i wypełniane na potrzeby współpracy z konkretnym użytkownikiem. Przechowują np. imię, identyfikator, preferencje. Aplikacyjne: Również dostępne dla wszystkich stron. Przechowują jednak właściwości obowiązujące wszystkich użytkowników.

25 25 ASP – predefiniowane obiekty Request: m. in. udostępnia parametry żądania oraz odczyt ciasteczek; Response: –pisanie do wygenerowanego dokumentu – zwyczajne lub binarne (tj. bez konwersji znaków), –buforowanie treści; –przekierowanie do innej strony (Redirect); –określanie terminu ważności strony – właściwość Expires (bezwzględnie lub relatywnie); –sprawdzanie, czy klient jest podłączony: IsClientConnected; –określanie typu zwracanej zawartości oraz strony kodowej

26 26 ASP – predefiniowane obiekty Application: Dostęp do globalnych właściwości i obiektów statycznych, uwzględniający nakładanie zamków. Session: Określenie ustawień regionalnych, terminu ważności sesji oraz sprawdzenie identyfikatora sesji. Server: Opcje konfiguracyjne, odczyt ostatniego błędu, tworzenie obiektów. Error: Szczegółowy opis błędu. Inne istotne typy: –ASP FileSystem – operacje na lokalnych plikach. –ASP TextStream – poruszanie się w pliku tekstowym. –ASP Drive – dostęp do informacji na temat napędów dyskowych. –ASP File – informacje o pliku; kopiowanie, usunięcie, przenoszenie. –ASP Folder – podobnie – dla folderu. –ASP Dictionary – obiekt słownikowy.

27 27 ASP – konfiguracja aplikacji Plik Global.asa przechowywany w głównym katalogu danej aplikacji. Określa: –Obsługę zdarzeń aplikacji i sesji (Session_OnStart Application_OnStart Session_OnEnd Application_OnEnd). –Osadzanie obiektów dostępnych w całej aplikacji wspólnie lub dla poszczególnych sesji:.... progID -> dostawca, komponent, wersja; classID -> identyfikator COM; Atrybut id pozwoli na odwoływania się do takiego obiektu w kodzie innych stron. –Deklaracja bibliotek typów (TypeLibrary) używanych przez komponenty aplikacji).

28 28 Obsługa cookies na stronach ASP Typowe dla tej i podobnych technologii są udogodnienia ułatwiające dostęp do cookies. Ustawiane / pobierane metodami Response.Cookies(nazwaCiasteczka) i Request.Cookies(nazwaCiasteczka). Zawartość dostępna bezpośrednio w rezultacie, zaś termin ważności – w atrybucie Expires. Istnieje również wsparcie dla przechowywania wartości złożonych: –właściwość HasKeys określa, czy ciasteczko przechowuje złożoną strukturę; –dostęp do poszczególnych pozycji możliwy poprzez dodatkowe indeksowanie: Request.Cookies(nazwaCiasteczka)(nazwaKlucza); Brak obsługi cookies wymaga przekazywania niezbędnych parametrów w kolejnych wywołaniach określonych stron (w ramach URL albo w ukrytych polach formularza).

29 29 PHP Hypertext Preprocessor Jest zagnieżdżonym w HTML jezykiem skryptowym działającym po stronie serwera tworzonym na zasadach open-source. Autor: Rasmus Lerdorf (1994). Również zaliczany do gatunku SSI. Bardzo szeroko dostępny; Obsługa PHP na danej platformie dostępna jako moduł serwera albo jako program CGI. Zastosowania: –skrypty po stronie serwera; –skrypty uruchamiane z linii komend; –okienkowe programy działające po stronie użytkownika;

30 30 Język PHP – krótka charakterystyka Jak w większości języków skryptowych – tzw. luźne typowanie: –Dostępne typy: Integer, Double, String, Array, Object –Typ danej zmiennej można zmieniać w czasie działania skryptu. Możliwe są również rzutowania (składnia jak w Javie). Składnia instrukcji warunkowych, operatorów arytmetycznych oraz pętli a także komentarzy jest wzorowana na C++ i Javie. Istnieje możliwość deklarowania zmiennych i stałych. Identyfikatory są czułe na wielkość znaków.

31 31 Język PHP – krótka charakterystyka – c.d. Inne specyficzne operatory: –Operator zignorowania błędu przed wyrażeniem mogącym wygenerować błąd. –Operator wykonania – symbol podobny do cudzysłowu, zlokalizowany zwykle na tym samym klawiszu co tylda ~. Np. `ls -l`. –Podwójny symbol zmiennej $$zmiennaA: odwołanie do zmiennej o nazwie przechowywanej w tekstowej zmiennejA. Zmienne specjalne – tzw. superglobals. Przechowują parametry środowiska, np. następujące tablice: –Parametry przekazane w wywołaniu: $_POST oraz $_GET. Np. $_POST[imie]; –Zmienne środowiskowe: $_ENV; np. $_ENV[REMOTE_HOST] –Zmienne serwera: $_SERVER; np. $_SERVER['PHP_SELF']

32 32 Servlety Technologia Javy (Java 2 Enterprise Edition). Servlet funkcjonuje jako element oprogramowania odpowiadający na żądania (zwykle) HTTP. Model działania nawiązuje więc po części do CGI, ma jednak w stosunku do niego istotne zalety: –Przystosowane do wykonania wielowątkowego. –Dzięki rozbudowanemu API Javy zwykle nie ma potrzeby wywoływania poleceń systemu operacyjnego – lepsze bezpieczeństwo. –Możliwość określenia precyzyjnej kontroli dostępu do zasobów (ACL – Java Access Control List). –Mechanizm obsługi wyjątków – potencjalnie lepsza stabilność.

33 33 Servlet – cykl życiowy Klasa Javy, wykonywaną w środowisku maszyny wirtualnej przez usługę zwaną silnikiem servletów (servlet engine). Klasa ta implementuje interfejs javax.servlet.Servlet. Servlet jest ładowany przy pierwszym odwołaniu doń lub przy starcie engine-u. Pozostaje w pamięci do momentu jawnego usunięcia lub zatrzymania serwera. Można wskazać trzy metody sevletu wyznaczające jego cykl życiowy: –void init(ServletConfig config) - Uruchamiana przy załadowaniu servletu. –void service(ServletRequest request, ServletResponse response) - Metoda uruchamiana przy każdym żądaniu skierowanym do servletu. Implementacja musi uwzględniać wielowątkowe wykonanie. –void destroy() - Uruchamiana przy wyłączaniu servletu.

34 34 Servlet – implementacja zachowania Klasa abstrakcyjna javax.servlet.http.HttpServlet implementuje następujące metody (jako chronione – protected, wywoływane przez metodę service(…)). Obsługują one poszczególne rodzaje żądań w protokole HTTP: void doDelete(HttpServletRequest req, HttpServletResponse resp) void doGet(HttpServletRequest req, HttpServletResponse resp) void doHead(HttpServletRequest req, HttpServletResponse resp) void doOptions(HttpServletRequest req, HttpServletResponse resp) void doPost(HttpServletRequest req, HttpServletResponse resp) void doPut(HttpServletRequest req, HttpServletResponse resp) void doTrace(HttpServletRequest req, HttpServletResponse resp)

35 35 Java Server Pages (JSP) Również element platformy J2EE; kolejne rozwiązanie służące implementacji dynamicznych dokumentów webowych. Umożliwiają osadzanie kodu wewnątrz struktury HTML. Wewnątrz struktury dokumentu HTML kod Javy jest umieszczany wewnątrz znaczników:. Kod strony, opatrzony rozszerzeniem.jsp jest następnie przetwarzany przez silnik JSP do postaci servletu i kompilowany. Wytworzony kod opiera się na pakiecie javax.servlet.jsp i stanowi rozszerzenie klasy javax.servlet.http.HttpServlet, implementujące interfejs javax.servlet.jsp.HttpJspPage. Klasa wygenerowana ze strony Nazwa.jsp otrzymuje nazwę Nazwa$jsp.

36 36 JSP – implementacja strony Implementowane są następujące metody: –jspInit() –jspDestroy() –_jspService(HttpServletRequest request,HttpServletResponse response) Można odpowiednio zdefiniować zachowanie metod jspInit() i jspDestroy(), zaś _jspService(HttpServletRequest request,HttpServletResponse response) jest generowana przez silnik JSP, na podstawie postaci pierwotnej strony.jsp.

37 37 JSP – składnia: 4 rodzaje tagów Dyrektywy: Import pakietów, ustawienia sesji i sposobu informowania o błędach. Podawane w tagach: np. : language="java" import="java.sql.*, naszPakiet.Klasa1" % Deklaracje: Defincje funkcji i używanych zmiennych. Podawane w tagach: Skryplety (scriplets): Poprawny kod Java, do umieszczenia w metodzie _jspService(…). Umieszczane w zwykłych znacznikach. Zmiennymi predefiniowanymi, do których mogą odwoływać się skryplety są: request, response, session, out, oraz pageContext, application,config i exception. Wyrażenia: Dowolne dane tekstowe, przeznaczone do umieszczenia na docelowej stronie. Przekazywane wewnątrz znaczników. Np.

38 38 ASP.NET Strony są kompilowane przez kompilator zgodny z CLR; dostępne kompilatory dla VB, VC++, Java, C# i inne. Zastosowanie cache; Wyższy poziom abstrakcji: Styl tworzenia bardzo przypominający budowę tradycyjnych aplikacji w Windows. Ukryte przed programistą zostają szczegóły związane z interakcją wywołań i odpowiadająca im dystrybucja kodu pomiędzy wykonywany po stronie klienta oraz po stronie serwera. Separacja kodu pomiędzy interfejs użytkownika: strony.aspx oraz kod serwerowy (tzw. code-behind pages):.aspx.cs,.aspx.vb lub inne. Rozbudowane udogodnienia bazodanowe.


Pobierz ppt "1 Technologie Internetu wykład 4: Technologie dokumentów dynamicznych WWW Piotr Habela Polsko-Japońska Wyższa Szkoła Technik Komputerowych."

Podobne prezentacje


Reklamy Google