600 likes | 769 Views
Organizacja Przedsięwzięć Programistycznych, 26 lutego 2003. Aplikacje Internetowe. Bartosz Walter Bartek.Walter@man.poznan.pl Michał Jasiński Michal.Jasinski@cs.put.poznan.pl. Motto.
E N D
Organizacja Przedsięwzięć Programistycznych, 26 lutego 2003 Aplikacje Internetowe Bartosz Walter Bartek.Walter@man.poznan.pl Michał Jasiński Michal.Jasinski@cs.put.poznan.pl OPP | Aplikacje Internetowe
Motto Real Programmers never work 9am to 5pm. If any Real Programmer are around at 9:00am, its because they were up all night. Real Programers Don’t... OPP | Aplikacje Internetowe
Agenda • Protokół HTTP • Java ServletsTM • PHP • JavaScript OPP | Aplikacje Internetowe
Część I Protokół HTTP OPP | Aplikacje Internetowe | Protokół HTTP
GET i POST – podstawowe metody HTTP GET /blah/index.html HTTP/1.0 Accept: text/html User-Agent: Lynx/2.2 libwww/2.14 <CRLF> <CRLF> POST /cgi-bin/post-query HTTP/1.0 Accept: text/html User-Agent: Lynx/2.2 libwww/2.14 Content-type: application/x-www-form-urlencoded Content-length: 150 <CRLF> <CRLF> org=CyberWeb%20SoftWare &users=10000 &browsers=lynx OPP | Aplikacje Internetowe | Protokół HTTP
Budowa żądania HTTP GET /index.html HTTP/1.0 Host: www.gazeta.pl User-Agent: MSIE/Mozilla <CRLF> <CRLF> <data> initial line headers empty line body OPP | Aplikacje Internetowe | Protokół HTTP
Budowa odpowiedzi HTTP HTTP/1.0 200 OK Date: Sunday, 25 November 2001 18:42:05 GMT Content-Type: text/html Content-Length: 109 <data> initial line headers empty line body OPP | Aplikacje Internetowe | Protokół HTTP
Część II Java ServletsTM OPP | Aplikacje Internetowe | Java Servlets
Kontener GET /index.html HTTP/1.0 <HTML> <HEAD> <BODY>... Servlet Żądanie Odpowiedź Koncepcja działania OPP | Aplikacje Internetowe | Java Servlets
Servlet Cykl życia serwleta void init(ServletConfig) void service(ServletRequest, ServletResponse) void doGet(ServletRequest, ServletResponse) void doPost(ServletRequest, ServletResponse) void destroy() javax.servlet.Servlet OPP | Aplikacje Internetowe | Java Servlets
Konfiguracja web.xml <servlet> <servlet-name>serwlet_A</servlet-name> <servlet-class> moj.pakiet.ServletA </servlet-class> <init-param> <param-name>parametr</param-name> <param-value>wartość</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>serwlet_A</servlet-name> <url-pattern>/A/*</url-pattern> </servlet-mapping> Nazwa serwleta Parametry Przypisanie do URLi OPP | Aplikacje Internetowe | Java Servlets
Serwlet A HttpServletRequest Żądanie Session management JSESSIONID getSession() Sesja zakodowany w URL lub cookie OPP | Aplikacje Internetowe | Java Servlets
Pierwszy serwlet public class MojSerwlet extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { PrintWriter writer = res.getWriter(); HttpSession session = request.getSession(true); String visited = (String) session.getAttribute("first"); if (visited == null) writer.println("<h1>Hello, world!</h1>"); else writer.println("<h1>Hello, " + visited + " world!</h1>"); session.setAttribute("first", "again"); writer.close(); } } OPP | Aplikacje Internetowe | Java Servlets
Freemarker – biblioteka do obsługi template'ów • Zapisywanie odpowiedzi przez serwlet jest niewygodne! http://freemarker.sourceforge.net/ void doGet(request, response) { HashModel root = new HashModel(); root.put("name", "Hello, world!"); Template tmpl = FileTemplateCache.getTemplate("/index.tmpl"); tmpl.process(root, response) } <HTML>... ${name} </HTML> OPP | Aplikacje Internetowe | Java Servlets
Część III Język PHP Skrypty po stronie Serwera WWW OPP | Aplikacje Internetowe | PHP
Wstęp Aplikacje internetowe Większość problemów dot. aplikacji Web jest prosta Rozwiązania – niekoniecznie. Mnogość architektur Systemy dwu- i trójwarstwowe, Warstwy pośrednie, Maszyny wirtualne, itd.. Strony internetowe Dokumenty tekstowe o zdefiniowanej strukturze. OPP | Aplikacje Internetowe | PHP
#include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <string.h> #define ishex(x) (((x) >= '0' && (x) <= '9') || ((x) >= 'a' && (x) <= 'f') || ((x) >= 'A' && (x) <= 'F')) int htoi(char *s) { int value; char c; c = s[0]; if(isupper(c)) c = tolower(c); value=(c >= '0' && c <= '9' ? c - '0' : c - 'a' + 10) * 16; c = s[1]; if(isupper(c)) c = tolower(c); value += c >= '0' && c <= '9' ? c - '0' : c - 'a' + 10; return(value); } void main(int argc, char *argv[]) { char *params, *data, *dest, *s, *tmp; char *name, *age; puts("Content-type: text/html\r\n"); puts("<html><head><title>Form Example</title></head>"); puts("<body><h1>My Example Form</h1>"); puts("<form action=\"form.cgi\" method=\"GET\">"); puts("Name: <input type=\"text" name=\"name\">"); } while(s=strtok(NULL"&")); Wstęp Proste (?) rozwiązanie: Program obsługi formularza w C • puts("Name: <input type=\"text" name=\"name\">"); puts("Age: <input type=\"text\" name=\"age\">"); puts("<br><input type=\"submit\">"); puts("</form>"); data = getenv("QUERY_STRING"); if(data && *data) { params = data; dest = data; while(*data) { if(*data=='+') *dest=' '; else if(*data == '%' && ishex(*(data+1))&&ishex(*(data+2))) { *dest = (char) htoi(data + 1); data+=2; } else *dest = *data; data++; dest++; } *dest = '\0'; s = strtok(params,"&"); do { tmp = strchr(s,'='); if(tmp) { *tmp = '\0'; if(!strcmp(s,"name")) name = tmp+1; else if(!strcmp(s,"age")) age = tmp+1; } } while(s=strtok(NULL"&")); printf("Hi %s, you are %s years old\n",name,age); } puts("</body></html>"); } OPP | Aplikacje Internetowe | PHP
Wstęp Alternatywa: Perl oraz CGI.pm use CGI qw(:standard); print header; print start_html('Form Example'), h1('My Example Form'), start_form, "Name: ", textfield('name'), p, "Age: ", textfield('age'), p, submit, end_form; if(param()) { print "Hi ",em(param('name')), "You are ",em(param('age')), " years old"; } print end_html; Kod jest łatwiejszy do pisania i czytania... ...dla programistów. OPP | Aplikacje Internetowe | PHP
Wstęp PHP: Podejście „HTML-centryczne” <html> <header> <title>Form Example</title> </header> <body> <h1>My Example Form</h1> <form action="form.phtml" method="POST"> Name: <input type="text" name="name"> Age: <input type="text" name="age"> </form> <?if($name):?> Hi <?echo $name?>, you are <?echo $age?> years old <?endif?> </body></html> „Surowy HTML” + minimum logiki (biznesowej ) OPP | Aplikacje Internetowe | PHP
PHP: Rozwiązanie Podstawowe informacje: • PHP – HyPertext Preprocessor • Język skryptów uruchamianych po stronie serwera • Dynamiczne generowanie treści stron WWW • Wsparcie dla bazy danych • Szeroki wachlarz rozszerzeń • Rozwiązanie open-source OPP | Aplikacje Internetowe | PHP
PHP: Rozwiązanie „Dziwne... Kto tego używa?” • Mitsubishi • Redhat • Der Spiegel • MP3-Lycos • Ericsson • NASA • i inni OPP | Aplikacje Internetowe | PHP
PHP: Rozwiązanie Zalety: • Łatwy w użyciu i konserwacji (vs. Perl, ASP, ...) • Prostota = Krótki czas tworzenia aplikacji • Niezależny od platformy systemowej (Win32, Unix, ...) • Bogaty zbiór interfejsów do baz danych • Rozwiązanie sprawdzone • Otwarte API = Rozszerzalność • Wsparcie ze strony Apache oraz MySQL • Jest tani OPP | Aplikacje Internetowe | PHP
PHP: Rozwiązanie Wady: • Kod PHP jest połączony z kodem HTML strony WWW = Trudności z zarządzaniem witryną i konserwacją w dłuższej perspektywie • Wymaga wsparcia ze strony serwera OPP | Aplikacje Internetowe | PHP
PHP: Rozwiązanie Alternatywy: • HTML + DHTML • Perl • Active Server Pages (Microsot) • Java Server Pages (Sun) • Cold Fusion (Macromedia) OPP | Aplikacje Internetowe | PHP
Żądanie HTTP HTML HTTP HTML PHP: Architektura zewnętrzna Internet Serwer WWW Serwer Aplikacji Skrypty PHP Dok. HTML Moduł PHP Przeglądarka OPP | Aplikacje Internetowe | PHP
Serwer WWW API Serwera API PHP T S R M Jądro PHP T S R M MySQL LDAP SNMP ZEND API Rozszerzenia ZEND Motor ZEND Kompilator run-time Moduł wykonawczy PHP: Architektura wewnętrzna OPP | Aplikacje Internetowe | PHP
PHP: Niezależność od platformy Wspomagane platformy: • UNIX i Linux (większość dystrybucji) • Win32 (NT/95/98/2000) • QNX • MacOS • OSX • OS/2 • BeOS • OS/390 (w fazie testów) • AS/400 (w fazie testów) OPP | Aplikacje Internetowe | PHP
PHP: Serwery Interfejsy dla serwerów aplikacyjnych: • Moduł Apache (UNIX, Win32) • CGI/FastCGI • ISAPI (IIS, Zeus) • Serwlety Java • AOL Server • thttpd • fnttpd • Moduł Apache 2.0 (w fazie testów) OPP | Aplikacje Internetowe | PHP
PHP: Składnia Osadzanie skryptu na stronie HTML • Styl SGML (short-open) <? Kod_PHP ?> • Styl XML (kanoniczny) <?php Kod_PHP ?> • Styl ASP <% code %> • Styl JavaScript (HTML) <SCRIPT language="php"> Kod_PHP </SCRIPT> OPP | Aplikacje Internetowe | PHP
PHP: Składnia Dołączanie plików zewnętrznych • Zewnętrzne pliki zawierające funkcje PHP mogą być dołączane do źródła programu: <?php include ‘functions.inc’; ?> <?php require ‘functions.php’; ?> • Prawa dostępu • Gdzie tkwi haczyk? OPP | Aplikacje Internetowe | PHP
PHP: Składnia Uruchamianie i debugowanie skryptów • PHP zwykle nie wypisuje na wyjściu stanu przetwarzania • Generacja danych wyjściowych: • Procedura echo echo "<p>To jest paragraf.</p>"; • Funkcja print print ("<p>To także jest paragraf.</p>"); 1 = sukces, 0 = porażka OPP | Aplikacje Internetowe | PHP
PHP: Składnia Stałe, zmienne... • Stałe: define("PI", 3.1416) • Zmienne: • Tworzone dynamicznie • Lokalne i globalne • $mojaZmienna • Typy: String, Integer, Double, Boolean (PHP 4.0), Array (asjocjacyjne i mieszane), Object (metody i własności) • Dynamiczna konwersja typów OPP | Aplikacje Internetowe | PHP
PHP: Składnia Elementy języka (1) • Operatory (arytmetyczne, logiczne, znakowe) • Komentarze (liniowe i blokowe, jak w C) • Zmienne „wbudowane”: • Środowisko PHP • CGI • Żądania HTTP OPP | Aplikacje Internetowe | PHP
PHP: Zastosowania Aplikacje Internetowe (1) • Kodowanie (m. in. HTML, base64, MD5, DES, IDEA, itd..) • Dostęp do plików (odczyt/zapis, URL) • Zarządzenie sesją – „Ciasteczka” • Interfejsy do baz danych • Adabas D • IBM DB2 • Informix • Ingres • Interbase • Direct MS-SQL • MySQL • ODBC • Oracle (OCI7,OCI8) • PostgreSQL • Sybase • dBase • filePro (read-only) • dbm (ndbm, gdbm, Berkeley db) OPP | Aplikacje Internetowe | PHP
PHP: Zastosowania Aplikacje Internetowe (2) • Dostęp do bazy danych: • Native API – związane z konkretną BD • Unified-ODBC – Native API + CLI (Call Level Interface) • ODBC – Bez pośrednictwa Native API OPP | Aplikacje Internetowe | PHP
PHP: Zastosowania Rozszerzenia • Generacja plików PDF • DCOM (tylko dla Win32) • Java Connectivity • gettext (GNU internationalization) • zlib (skompresowane IO) • Konwersja tekstu (UTF-8, Cyrylica, Hebrajski) • SWF (Flash) • ASPELL/PSPELL • XSLT (Sablotron, libxslt, Xalan) • Itp. • GD (GIF, JPEG, PNG, WBMP) • LDAP • SNMP • IMAP (POP, NNTP) • FTP • MCAL • IMSP • IPTC • BC/GMP (matematyka precyzyjna) • Hyperwave • XML parser OPP | Aplikacje Internetowe | PHP
PHP: Dobre praktyki Uwaga na niezainicjowane zmienne Zawsze ufaj użytkownikowi. Nigdy – jego danym . OPP | Aplikacje Internetowe | PHP
PHP: Podsumowanie • PHP to dynamiczny Internet • Język skryptowy podobny do C • Elastyczne, lecz proste metody zwiększania atrakcyjności witryn • Technologia niezależna od platformy • Zawiera udogodnienia dla twórców WWW • Rozszerzalność OPP | Aplikacje Internetowe | PHP
Część IV JavaScript Skrypty po stronie przeglądarki WWW OPP | Aplikacje Internetowe | JavaScript
WWW Wstęp Dawno, dawno temu... • HTML jest statyczny • HTML jest nudny • HTML nie jest interaktywny • HTML niewystarczająco przyciąga uwagę użytkowników Wniosek: WWW potrzebuje czegoś więcej niż tylko HTML! To takie nudne... OPP | Aplikacje Internetowe | JavaScript
Wstęp W poszukiwaniu straconego czasu... • CGI? Zbyt „ciężkie” • Dodatki i wtyczki? Niewygodne • Aplety? Skomplikowane A by może tak jakaś elastyczna i funkcjonalna technologia? OPP | Aplikacje Internetowe | JavaScript
Wstęp HIStory Początek lat 1990tychNetscape Communications (Netscape Navigator + LiveScript 1995Netscape Communications i Sun Microsystems Java + JavaScript = JavaScript 1.0 „Mała” i „Miękka” ewolucja MS JScript MS VBScript JavaScript OPP | Aplikacje Internetowe | JavaScript
JavaScript: Podstawy JavaScript vs. Java OPP | Aplikacje Internetowe | JavaScript
Client-side JavaScipt Dodatki po stronie klienta Dodatkowe obiekty związane z przeglądarką (np. dokument, okno, historia, itp.) Dodatki po stronie serwera Dodatkowe obiekty związane z serwerem (np. baza danych, serwer, itp.) Serwer-side JavaScipt JavaScript: Architektura Core JavaScript Podstawowe elementy języka (np. zmienne, funkcje elementarne obiekty, itp.) OPP | Aplikacje Internetowe | JavaScript
JavaScript: Kompatybilność Przeglądarki, a zgodność wersji JavaScript • JavaScript 1.0 (NN 2.0, IE 3.0, Opera 3.0) • JavaScript 1.1 (NN 2.0, IE 4.0, Opera 3.0) • JavaScript 1.2 (NN 2.0, IE 4.0, Opera 3.0) • JavaScript 1.3 (NN 4.5/4.7, IE 5.0, Opera 4.0) • JavaScript 1.4 (n/a) • JavaScript 1.5 (NN 6.0, IE 5.5) OPP | Aplikacje Internetowe | JavaScript
JavaScript: Ograniczenia Bezpieczeństwo Ograniczona funkcjonalność Dostęp do zdalnych plików i środowiska użytkownika, Możliwość otwierania połączeń sieciowych Polityka „zaufanego źródła” Dostęp tylko do skryptów z tego samego serwera Możliwość korzystania z bezpiecznych połączeń HTTPS Możliwość podpisywania skryptów OPP | Aplikacje Internetowe | JavaScript
Nadawca Odbiorca Funkcja haszująca Funkcja haszująca Zawartość podpisana Klucz prywatny Klucz publiczny + Certyfikat klucza publicznego JavaScript: Bezpieczeństwo Certyfikaty OPP | Aplikacje Internetowe | JavaScript
JavaScript: Charakterystyka Zalety i zastosowania: • „Lekka” i elastyczna technologia • Interakcja z użytkownikiem na stronach WWW • Dynamiczne generowanie treści • Weryfikacja danych użytkownika • Lepsza obsługa stron wykorzystujących ramki • Wizualna informacja zwrotna • Formatowanie i obsługa prezentacji danych • Pełna obsługa DOM OPP | Aplikacje Internetowe | PHP
JavaScript: Charakterystyka Wady: • Prostota i ograniczenia języka wykluczają zaawansowane zastosowania • Trudności z ochroną kodu skryptów • Złożone programy zwiększają rozmiar stron przesyłanych do przeglądarki użytkownika • Problemy z kompatybilnością • Brak specjalizowanych środowisk programistycznych OPP | Aplikacje Internetowe | PHP
JavaScript: Rozwiązanie Alternatywy: • JScript, VBScript • ActiveX • Java applets • .NET OPP | Aplikacje Internetowe | PHP