Technologie tworzenia aplikacji internetowych Piotr Czapiewski Wydział Informatyki ZUT Technologie tworzenia aplikacji internetowych Wykład 1
Architektura aplikacji internetowych Architektura trójwarstwowa (3-tier) Interfejs użytkownika Prezentacja wyników Warstwa prezentacji Logika biznesowa Przetwarzanie danych Kontrola przepływu informacji Warstwa aplikacji Bazy danych Składowanie i pobieranie danych Warstwa danych
Architektura aplikacji internetowych Architektura trójwarstwowa (3-tier) Przeglądarka WWW HTML, CSS, JavaScript, Flash Warstwa prezentacji Serwer WWW, serwer aplikacji PHP, Java Servlets, JSP, EJB Warstwa aplikacji Serwer bazy danych PostgreSQL, MySQL, Oracle JDBC, ODBC, JDO, ADO.NET Warstwa danych
Architektura aplikacji internetowych Architektura wielowarstwowa (multi-tier, n-tier) Warstwa prezentacji JSP, Java Servlets Warstwa logiki prezentacji Enterprise Java Beans Warstwa logiki biznesowej Warstwa danych Web tier Business tier
Architektura systemów internetowych Architektura SOA (Service-Oriented Architecture) Grupowanie funkcjonalności wokół procesów biznesowych Udostępnianie funkcjonalności w postaci usług
Serwer WWW a serwer aplikacji Obsługa żądań HTTP, udostępnianie dokumentów, komunikacja z przeglądarką WWW Uwierzytelnianie, kontrola dostępu Przykładowe serwery: Apache, IIS, lighttpd Serwer aplikacji Platforma uruchamiania warstwy aplikacji, logiki biznesowej, usług sieciowych Komunikacja z warstwą klienta i warstwą danych Przykładowe serwery: Tomcat, JBoss, Glassfish, .NET Framework, Zend Server, Zope
Technologie aplikacji internetowych Smarty, Zend, Symfony, Zoop, CodeIgniter… CGI, Perl, PHP, ColdFusion, ASP… JSP, JSF, Struts, Spring, Tapestry, GWT, Seam… Java, .NET, C#, VB, Ruby, RoR, Flex…
PHP PHP: Hypertext Preprocessor
PHP: Hypertext Preprocessor Język skryptowy ogólnego przeznaczenia Główne zastosowanie: dynamiczne strony internetowe, server-side scripting Powstanie i rozwój Pierwsza wersja: 1995 r. Twórca: Rasmus Lerdorf Obecnie rozwijany przez PHP Group, http://php.net Open source Zalety Dostępny dla większości platform Łatwy w użyciu Szybki w działaniu
Popularność PHP
Historia PHP Początki: 1994 r. Rasmus Lerdorf. Prywatny projekt, wsparcie swojej strony domowej. Proste programy CGI w C, zastąpiły skrypty w Perlu. Potem dodał obsługę formularzy i baz danych – PHP/FI. Obiektowość: w wersji 3, prawdziwa w 5. PHP Data Objects w 5.
PHP: osadzanie w HTML <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Example</title> </head> <body> <?php echo "Hi, I'm a PHP script!"; ?> </body> </html>
Proces generowania strony Działa jak filtr. Na wejściu: tekst przeplatany PHP. Na wyjściu: strumień danych/tekstu. Na początku: interpreter. Obecnie: kompilator, bytecode, Zend Engine służy za VM.
Proces generowania strony Zasada działania Początkowo: kod interpretowany Obecnie: kod kompilowany do postaci bytecodu uruchamianego przez Zend Engine Działa jak filtr. Na wejściu: tekst przeplatany PHP. Na wyjściu: strumień danych/tekstu. Na początku: interpreter. Obecnie: kompilator, bytecode, Zend Engine służy za VM.
Jak zacząć? Serwer WWW Moduł PHP Baza danych Apache – http://www.apache.org Moduł PHP http://www.php.net Baza danych MySQL – http://www.mysql.com PostgreSQL – http://www.postgresql.org Paczuszka – wszystko w jednym XAMPP – http://www.apachefriends.org
Jak zacząć? Środowisko programistyczne (IDE) Netbeans + PHP plugin – http://www.netbeans.org Eclipse + PDT plugin – http://www.eclipse.org Aptana – http://www.aptana.com
Programowanie w PHP
Składnia PHP Przeplatanie PHP i HTML Blok kodu PHP może być ograniczony przez:
Przeplatanie PHP i HTML
Przeplatanie PHP i HTML
Komentarze Komentarze w stylu języka C Komentarze w stylu Perla Jednolinijkowe Blokowe Komentarze w stylu Perla
Zmienne Identyfikatory zmiennych Znak $ + nazwa zmiennej $x, $y, $username, $_A27 Rozróżniana wielkość liter $kartofel != $Kartofel != $KARTOFEL Dozwolone znaki: Litery, cyfry, znaki podkreślenia Nazwa zmiennej musi zaczynać się od litery lub podkreślenia
Przypisywanie zmiennych Domyślnie zmienne przypisywane są przez wartość: Przypisanie przez referencję:
Przypisywanie zmiennych Uwaga na referencje:
Inicjalizacja zmiennych Deklaracja i inicjalizacja zmiennych nie jest konieczna Zmienne inicjowane są wartością domyślną danego typu boolean: false, integer: 0, string: "" Niebezpieczeństwo: Sprawdzenie czy zmienna została zainicjowana: Brak błędu Wynik: 7 Niebezpieczeństwa polegania na niezainicjowany zmiennych: Includowanie skryptów korzystających z tych samych zmiennych Zmienne przekazane przez hackera GETem lub cookie
Typy zmiennych Typów zmiennych w PHP nie trzeba deklarować Typ zmiennej określany jest na podstawie kontekstu, w jakim zmienna została użyta Automatyczna konwersja typów
Łańcuchy tekstowe Łańcuch może być ograniczony: Apostrofami – 'Ala ma kota' Cudzysłowem – "Ala ma kota”
Łańcuchy ograniczone apostrofami Wewnątrz możemy umieszczać cudzysłów Aby w środku łańcucha umieścić apostrof, poprzedzamy go znakiem backslash: \' Aby umieścić backslash na końcu łańcucha lub przed znakiem apostrofu, wpisujemy dwa znaki backslash: \\ Backslash umieszczony przed innym znakiem zostanie wyświetlony normalnie Zmienne wewnątrz łańcucha nie są rozwijane Łańcuch może zawierać znaki nowej linii
Łańcuchy ograniczone apostrofami
Łańcuchy ograniczone cudzysłowem Więcej sekwencji specjalnych, np. \n, \r, \t, \$, \" Zagnieżdżanie cudzysłowu i apostrofu
Łańcuchy ograniczone cudzysłowem Rozwijanie zmiennych zawartych w łańcuchu
Operacje na łańcuchach tekstowych Operator konkatenacji – kropka Zmiana wielkości znaków
Operacje na łańcuchach tekstowych Dostęp do pojedynczych znaków Długość łańcucha Wyszukanie i zamiana ciągów znaków
Operacje na łańcuchach tekstowych Zamiana łańcucha na liczbę Automatyczna, typ zależny od kontekstu Jeśli łańcuch zawiera: kropkę, 'e' lub 'E' typ float W przeciwnym wypadku typ integer Zamieniana jest początkowa część łańcucha, tworząca liczbę Jeśli łańcuch nie zawiera liczby wartość zero
Instrukcje sterujące Instrukcja warunkowa if
Instrukcje sterujące Instrukcja warunkowa if
Instrukcje sterujące Pętle while i do-while
Instrukcje sterujące Pętle for i foreach
Instrukcje sterujące Instrukcja wyboru switch
Tablice Tablica w PHP jest w rzeczywistości uporządkowaną mapą przechowuje pary klucz-wartość Tablicy można użyć jako: tablicy, listy, mapy, słownika, stosu, kolejki… Wielowymiarowe tablice tablice zawierające tablice
Tablice Tworzenie tablicy
Tablice Dopisywanie danych na końcu tablicy Usuwanie danych z tablicy 1 2 3 8 13 18
Tablice Iterowanie po tablicy – pętla foreach
Funkcje Definicja i wywołanie funkcji Funkcja może być zdefiniowana później, niż użyta Nazwa funkcji – reguły jak dla zmiennych Zawartość – dowolny kod, także inne funkcje i klasy Zwracanie wartości jest opcjonalne. Zwrócić można wszystko – także tablicę.
Funkcje warunkowe
Funkcje warunkowe
Argumenty funkcji Domyślnie argumenty przekazywane są przez wartość Przekazywanie przez referencję
Argumenty funkcji Argumenty z wartością domyślną Making a cup of cappuccino. Making a cup of . Making a cup of espresso.
Argumenty funkcji Argumenty z wartością domyślną – błędne użycie ŹLE DOBRZE
rejestruj.php?imie=Jan&nazw=Kowalski Obsługa formularzy rejestruj.php <?php if(isset($_REQUEST['email'])) { $imie = filtruj($_REQUEST['imie']); $nazw = filtruj($_REQUEST['nazw']); $email = filtruj($_REQUEST['email']); $id = dodaj($imie, $nazw, $email); } else { wyswietlFormularz(); } function filtruj($s) { return trim(htmlspecialchars($s)); } ?> rejestruj.php?imie=Jan&nazw=Kowalski index.html <form action="rejestruj.php" method="get" > Imię: <input type="text" name="imie"> Nazwisko: <input type="text" name="nazw"> <input type="submit" value="Wyślij"> </form>
Obsługa formularzy Formularz HTML Tablice globalne: $_GET, $_POST
Obsługa formularzy Zabezpieczenie przed wstrzykiwaniem kodu HTML lub JavaScript Obsługa sesji Programowanie obiektowe Rozbudowany przykład