Komunikacja w Internecie Użytkownik klika w odpowiednie łącze. Przeglądarka formatuje żądanie i wysyła Serwer odnajduje zasób, formatuje odpowiedź i przesyła do przeglądarki.
Protokół HTTP
Zadania klienta HTTP Interakcja z użytkownikiem Pobieranie i prezentacja interfejsu użytkownika Interakcje z użytkownikiem Buforowanie odpowiedzi Weryfikacja certyfikatów
Zadania serwera HTTP Uwierzytelnianie Kontrola dostępu Rejestracja i obsługa żądań Bezpieczeństwo
Rodzaje żądań protokołu HTTP GET metoda, której podstawowym zadaniem jest żądanie od serwera dostarczenia określonych zasobów i odesłanie przeglądarce. POST metoda umożliwiająca żądanie od serwera określonych zasobów oraz przekazywanie danych z np. formularza Pozostałe metody obsługiwane przez serwlety: HEAD, TRACE, PUT, DELETE, OPTIONS, CONNECT
Anatomia żądania GET
Anatomia żądania POST
Anatomia odpowiedzi protokołu HTTP
Najczęściej spotykane kody odpowiedzi protokołu HTTP Kody informacyjne 110 Connection Timed Out 111 Connection refused Kody powodzenia 200 OK 201 Created 202 Accepted Kody przekierowania 301 - Moved Permanently 302 Found
Najczęściej spotykane kody odpowiedzi protokołu HTTP Kody błędu aplikacji klienta 400 Bad Request 401 - Unauthorized 403 - Forbidden 404 Not Found Kody błędu wewnętrznego 500 Internal Server Error 501 Not Implemented 502 Bad Gateway 503 Service Unavailable
Podstawowe informacje o portach Port to 16 bitowa liczba, która identyfikuje konkretne oprogramowanie działające na serwerze. Na każdym serwerze jest 65536 portów, numerowanych w zakresie 0 65535 Porty TCP z przedziału 0-1023 są zarezerwowane i nie można do nich przypisać żadnej swojej aplikacji.
Najpopularniejsze numery portów 21 FTP 23 TELNET 25 SMTP 37 TIME 80 HTTP 110 POP3 443 HTTPS
Strony statyczne i dynamiczne Strony statyczne są niezmienne, tzn. do czasu ręcznego wprowadzenia zmian, żadna aplikacja znajdująca się na serwerze nie może zmienić ich treści (gotowe do pobrania z serwera). Strony dynamiczne, zawierają znaczniki i odwołania do treści publikowanych w oddzielnej aplikacji (np. CMS). Służą do dynamicznego wprowadzania zmian na stronie (generowane dynamicznie na żądanie)
Struktura pliku HTML
Common Gateway Interface Specyfikacja programów w dowolnym języku programowania, które jako swoje wyjście wytwarzają dokumenty (np. XML lub HTML).
Co to jest Serwlet? Klasa Javy po stronie serwera HTTP rozszerzająca możliwości serwera; Rozbudowana wersja aplikacji CGI (ciasteczka, utrzymywanie sesji, wspólne zasoby serwletów, obsługa wszystkich metod protokołu HTTP); Aplikacja komunikująca się z przeglądarką wyłącznie za pomocą protokołu HTTP.
SERWLETY Aplikacje po stronie serwera HTTP, służące do obsługi żądań oraz automatycznego generowania dokumentów (np. XML, HTML).
Struktura Serwletu Klasa dziedzicząca z HttpServlet Implementacja co najmniej jednej z metod: doget() dopost() init() destroy()
Przykład 1
Cykl życia Serwletu Przeglądarka wysyła żądanie do serwera HTTP. Żądanie jest przekierowywane do serwera aplikacji Java EE. Serwer aplikacji analizuje adres URL żądania HTTP, następnie pobiera klasę wskazanego serwletu i tworzy jej obiekt (tzw. obiekt serwletu). Wywoływana jest metoda init() obiektu serwletu. Wywoływana jest metoda doget() obiektu serwletu. Dokument będący Wynikiem działania powyższej metody jest dokument, przekazywany do klienta HTTP. Po przesłaniu odpowiedzi, obsługa żądania zostaje zakończona.
Metody HttpServletRequest String getmethod() Cookie[] getcookies() HttpSession getsession() String getremoteuser() String getheader(n) String getparameter(n)
Przykład 2
Przykład 3
Metody HttpServletResponse getoutputstream() flushbuffer() addcookie(ciastko) setheader(nazwa,wartość) addheader(nazwa,wartość) senderror(numer) sendredirect(url)
Obsługa Cookies Są reprezentowane w postaci klasy Cookie Są przechowywane w każdej przeglądarce. Umożliwiają zapamiętywanie loginów, haseł czy preferencji. Cookies są wysyłane do klienta HTTP przy pomocy metody: addcookies(), obiektu response. Natomiast do odczytu danych odebranych z żądania służy metoda getcookies() obiektu request
Wysyłanie zmiennych w Cookies
HTTPSession Serwer HTTP nie potrafi rozpoznać czy określone żądania HTTP pochodzą od tego samego użytkownika końcowego. Każda sesja otrzymuje identyfikator Stan sesji przechowywany przez serwer aplikacji Stan sesji usuwany po wygaśnięciu czasu ważności Tablica sesji na serwerze aplikacyjnym
Java Server Pages Podstawowe narzędzie tworzenia warstwy prezentacji w JEE Umożliwia połączenie dynamicznego kodu napisanego w Javie ze statycznymi dokumentami np. HTML Jest powszechnie obsługiwana (nie narzuca systemu operacyjnego czy serwera WWW) Umożliwia pełny dostęp do technologii serwletów
Schemat działania JSP
Cykl życia JSP
Struktura dokumentu JSP
Typy elementów skryptowych JSP Umożliwiają wstawianie kodu Javy do serwletów, generowanych na podstawie stron JSP. Należą do nich: Wyrażenia postaci: <%= test1 %>; Ich wykonania zostają wstawione do kodu generowanego przez serwlet. Skryptlety postaci: <% kod javy %>; Są wstawiane do metody _jspservice serwletu (wywoływanej przez metodę service) Deklaracje: <%! Deklaracja metody lub pola %>; Wstawiane są do treści klasy serwletu, poza metodami
Wyrażenia Wartość wyrażenia jest konwertowana do łańcucha znaków i załączana do wynikowego kodu HTML lub XML Wyrażenia są to znaczniki XML umożliwiające wartościowanie danego wyrażenia Wprowadzenie wyrażeń odbywa się przez znaczniki <%= %> Np. <ul><li>bieżący czas: <%= new java.util.date() %></li></ul>
Skryptlety Są to znaczniki XML, które umożliwiają osadzanie kodu Java w pliku JSP Mogą generować kod HTML lub XML za pomocą predefiniowanego obiektu out Są wprowadzane przez znaczniki <% %> Np. <% Calendar dzis = new GregorianCalendar(); int godzina = dzis.get(calendar.hour_of_day); out.println("<b>aktualnie jest godzina: " + godzina + "</B>"); %>
Deklaracje Umożliwiają deklarowanie metod i składowych serwletu wynikowego Można inicjalizować w nich zmienne. Są wprowadzane przez znaczniki <%! %> Np. <body> <%! int licznik = 4; %> <%! int wynikmnozenia() { return licznik*licznik; } %> <%= wynikmnozenia()%> </body>
Dyrektywy Ich głównym zadaniem jest kontrola sposobu translacji JSP do serwletu <%@ include %>: włączenie zewnętrznego pliku <%@ page %>: ustawienia strony import, contenttype, errorpage, iserrorpage, info, buffer, session, autoflush, extends, isthreadsafe, <%@ taglib %>: wskazanie na bibliotekę znaczników prefix, uri
Znaczniki JSP Są to znaczniki XML, które mogą wywołać akcje serwera aplikaxcji. Dostępne są następujące akcje <jsp:include>: służą do włączania zewnętrznego kodu <jsp:plugin>: obsługa apletów Java <jsp:fallback>: w sytuacji gdy klient nie obsługuje apletów <jsp:forward>: przekazują sterowanie <jsp:param>: zdefiniowanie parametru oraz znaczniki do obsługi komponentów JavaBean
Obiekty predefiniowane JSP dostarcza duży zestaw obiektów predefiniowanych. Zaliczyć do nich można: application: kontekst aplikacji pagecontext: kontekst strony wraz ze zmiennymi out: strumień stanowiący odpowiedź dla klienta HTTP page: serwlet wynikowy dla dokumentu JSP config: dostęp do parametrów inicjalizacyjnych request: żądanie otrzymane od klienta HTTP response: odpowiedź wysłana klientowi HTTP session: sesja HTTP
Obsługa wyjątków Strona obsługująca wyjątki jest wskazywana przez dyrektywę <%@ page errorpage="errorhandler.jsp" %> Jednocześnie musi zawierać dyrektywę <%@ page iserrorpage="true" %> Dostęp do wyjątku odbywa się poprzez obiekt exception Wyjątek JspException
Język wyrażeń EL Rozbduowana i spowalniająca pracę składnia wyrażeń JSP <tag attribute="<%= request.getattribute( miasto") %>"> Język wyrażeń (JSP Expression Language, JSP EL) uproszczenie kodu: <tag attribute="${miasto}"> Opcjonalne tagi: <%@ page iselignored="true" %> Zwięskzonalista obiektów predefiniowanych tablice, mapy, listy, własności ewaluacja wyrażeń oraz warunków logicznych
Wyrażenia JSP EL Mogą się znaleźć w statycznym tekście, atrybucie znacznika standardowego lub znacznika, zdefiniowanego przez użytkownika. Notacja wyrażeń jest następująca: ${zmienna.pole} Automatyczna konwersja typu wynikowego do oczekiwanego.
JSP EL Przykład Wyklad1.jsp Pierwszy.java (serwlet)
MATERIAŁY http://docs.oracle.com/javaee/6/tutorial/d oc/bnafd.html http://www.oracle.com/technetwork/java/ javaee/jsp/index.html
Dziękuję za uwagę