Serwery aplikacji. dr Radosław Matusik. radmat

Podobne dokumenty
Serwery aplikacji. dr Radosław Matusik. radmat

Programowanie w Sieci Internet JSP ciąg dalszy. Kraków, 9 stycznia 2015 r. mgr Piotr Rytko Wydział Matematyki i Informatyki

Serwery aplikacji. dr Radosław Matusik. radmat

mgr inż. Michał Paluch


Kurs WWW 1. Paweł Rajba

Java wybrane technologie spotkanie nr 5. Java Server Pages

Aplikacje WWW - laboratorium

Java wybrane technologie

Wykład 8: klasy cz. 4

TEMAT : KLASY DZIEDZICZENIE

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Gatesms.eu Mobilne Rozwiązania dla biznesu

prepared by: Programowanie WWW Servlety

Klasy i obiekty cz I Klasy, obiekty, podstawy używania obiektów

Wyrażenie include(sciezka_do_pliku) pozwala na załadowanie (wnętrza) pliku do skryptu php. Plik ten może zawierać wszystko, co może się znaleźć w

Wybrane działy Informatyki Stosowanej

Rozdział 4 KLASY, OBIEKTY, METODY

1 Wprowadzenie do J2EE

Enterprise JavaBeans (EJB)

INTERNETOWE BAZY DANYCH materiały pomocnicze - wykład VII

Dokumentacja do API Javy.

Elementy JEE. 1. Wprowadzenie. 2. Prerekwizyty. 3. Pierwszy servlet. obsługa parametrów żądań 4. JavaServer Pages.

Programowanie Multimediów. Programowanie Multimediów JAVA. wprowadzenie do programowania (3/3) [1]

Aplikacje WWW - laboratorium

Plan. Stan sesji (1/2) Stan sesji (2/2) Stan sesji Tworzenie przycisku Integracja prostego formularza z raportem Tworzenie formularza z raportem

Programowanie obiektowe

Programowanie komponentowe. Przykład 1 Bezpieczeństwo wg The Java EE 5 Tutorial Autor: Zofia Kruczkiewicz

2 Przykªad strony JSP. 3 Elementy dokumentu JSP

Programowanie w Sieci Internet filtry oraz web.xml. Kraków, 11 stycznia 2013 r. mgr Piotr Rytko Wydział Matematyki i Informatyki

Aplikacje w środowisku Java

Podstawowe wykorzystanie Hibernate

Laboratorium 7 Blog: dodawanie i edycja wpisów

Aplikacje w środowisku Java

PHP 5 język obiektowy

Wykład dla studentów Informatyki Stosowanej UJ 2012/2013

Przykłady tworzenia aplikacji komponentowych w technologii JavaServer Faces 2.1 na podstawie

Sesje i logowanie. 1. Wprowadzenie

Aplikacje WWW - laboratorium

Część XVII C++ Funkcje. Funkcja bezargumentowa Najprostszym przypadkiem funkcji jest jej wersja bezargumentowa. Spójrzmy na przykład.

Programowanie obiektowe

Język JAVA podstawy. wykład 2, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Instrukcja tworzenia aplikacji EE na bazie aplikacji prezentowanej na zajęciach lab.4 z PIO umożliwiająca przez sieć dostęp wielu użytkownikom.

Język JAVA podstawy. wykład 2, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Facelets ViewHandler

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Budowa prostej aplikacji wielowarstwowej. Laboratorium 1 Programowanie komponentowe Zofia Kruczkiewicz

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody

Aplikacje WWW - laboratorium

Wprowadzenie do projektu QualitySpy

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Laboratorium 1. Wzorce oprogramowania lab1, Zofia Kruczkiewicz

Programowanie komponentowe 5

Programowanie wielowarstwowe i komponentowe JSP, JSF

Kurs WWW. Paweł Rajba.

Kontrola sesji w PHP HTTP jest protokołem bezstanowym (ang. stateless) nie utrzymuje stanu między dwoma transakcjami. Kontrola sesji służy do

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Programowanie w Sieci Internet Blok 2 - PHP. Kraków, 09 listopada 2012 mgr Piotr Rytko Wydział Matematyki i Informatyki

Enkapsulacja, dziedziczenie, polimorfizm

Klasy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 13

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

Materiały do zajęć VII

Kurs programowania. Wykład 7. Wojciech Macyna. 25 kwietnia 2017

Ciekawym rozwiązaniem służącym do obsługi zdarzeń dla kilku przycisków w ramach jednej aktywności może być następujący kod:

Czym są właściwości. Poprawne projektowanie klas

Podstawy JavaScript ćwiczenia

Podstawy technologii WWW

Złożone komponenty JSF wg

Języki programowania wysokiego poziomu. PHP cz.3. Formularze

Złożone komponenty JSF wg

Programowanie obiektowe zastosowanie języka Java SE

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Serwlety i JSP na platformie Java EE. Damian Makarow

Javadoc. Piotr Dąbrowiecki Sławomir Pawlewicz Alan Pilawa Joanna Sobczyk Alina Strachocka

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

Tworzenie witryn internetowych PHP/Java. (mgr inż. Marek Downar)

Politechnika Poznańska Wydział Budowy Maszyn i Zarządzania

1 Atrybuty i metody klasowe

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Zaawansowane aplikacje internetowe - laboratorium Web Services (część 1).

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu.

Aplikacje internetowe i rozproszone - laboratorium

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

PARADYGMATY PROGRAMOWANIA Wykład 4

Wykład 7: Pakiety i Interfejsy

Java Server Faces narzędzie do implementacji w wy prezentacji

Zaawansowane aplikacje internetowe

Aplikacje Internetowe, Servlety, JSP i JDBC

Przykłady pytań do zaliczenia programu wykonywanego w ramach zajęć laboratoryjnych 6-8 z Programowania komponentowego w Javie. Zofia Kruczkiewicz

Contexts and Dependency Injection (CDI) Autor wykładu: Marek Wojciechowski

PHP: bloki kodu, tablice, obiekty i formularze

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np

Programowanie w Javie

Instrukcja laboratoryjna cz.3

Tworzenie i wykorzystanie usług sieciowych

PROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec

Aplikacje internetowe - laboratorium

Ćwiczenie 1. Kolejki IBM Message Queue (MQ)

Transkrypt:

www.math.uni.lodz.pl/ radmat

Ćwiczenie 1 Proszę napisać aplikację wykorzystującą serwlety i bazy danych, która umożliwi wyszukiwanie tytułów książek po nazwisku autora oraz autorów po tytule książki.

Ćwiczenie 2 Proszę napisać aplikację wykorzystującą serwlety i bazy danych, która umożliwi rejestrację, a następnie logowanie do serwisu.

Serwlet, czy JavaServer Pages (JSP)? JSP dla twórców stron Serwlety jako kontrolery uwierzytelnianie autoryzacja walidacja nadzorowanie transakcji

JSP pozwala na wstawianie do zwykłego kodu HTML (lub do innych plików tekstowych) różnych konstrukcji, m.in.: zwykłego kodu Javy (co obecnie nie jest zalecane); specjalnych wyrażeń wykorzystujących język EL (język wyrażeń); specjalnych znaczników, które przypominają te znane z HTML-a (JSTL).

Skryptlet Przykład skryptletu: <% skryptlet; %>

Deklaracja Przykład deklaracji: <%! deklaracja; %>

Wyrażenie Wyrażenia stanowią szczególny przypadek skryptletu. Jeśli w skryptlecie chcemy jedynie wyświetlić wartość, należy skorzystać z wyrażenia: <%= wyrażenie %> Uwaga! Takiego wywołania nie kończymy średnikiem!

Dyrektywa Dyrektywa to ogólna nazwa różnych konstrukcji, które łączy jedynie składnia. Najważniejszymi dyrektywami są: page - umożliwia kontrolę struktury serwletu, poprzez importowanie klas, modyfikowanie klasy bazowej serwletu, określanie typu zawartości, itp. (tę dyrektywę można umieścić w dowolnym miejscu dokumentu) include - umożliwia wstawianie plików do klasy serwletu na etapie przekształcania strony JSP do postaci serwletu (tę dyrektywę należy umieszczać w tym miejscu strony JSP, w którym chcemy wstawić plik) import - pozwala na importowanie wybranych klas / pakietów, w celu późniejszego wykorzystania w skryptletach

Do najważniejszych ustawień dyrektywy page można zaliczyć: contenttype - określa typ MIME strony, np. text/html pageencoding - określa wykorzystywane przez stronę kodowanie znaków, np. UTF-8 iserrorpage - określa, czy dana strona jest tzw. stroną błędu errorpage - określa ścieżkę do strony, która ma być wywołana w przypadku wystąpienia błędu na tej stronie session - określa, czy na danej stronie jest wykorzystywany mechanizm sesji taglib - służy do definiowania własnych znaczników.

Dyrektywa taglib przyjmuje zawsze jeden atrybut: prefix - który określa jaki prefiks XML będzie wykorzystywany przy deklaracji znaczników oraz jeden z dwóch (nigdy nie należy ich stosować jednocześnie!): uri - określa adres URI biblioteki, który stanowi również identyfikator tagdir - określa katalog, wewnątrz którego strona ma szukać plików znaczników

Przykład skryptletu <body> <h1>skryptlet JSP</h1> <% if (Math.random() < 0.5) { %> <h1>dzień dobry</h1> <% } else { %> <h1>do widzenia</h1> <% } %> </body>

Przykład deklaracji <body> <h1>deklaracje JSP</h1> <%! private int ile = 0; %> <h2>liczba odwołań do strony od czasu uruchomienia serwera: <%= ++ile %></h2> </body>

Przykład wyrażenia <body> <h1>wyrażenia JSP</h1> Aktualny czas: <%= new java.util.date() %> Nazwa komputera: <%= request.getremotehost() %> </body>

Ćwiczenie 1 Proszę napisać aplikację webową w technologii JSP (i wykorzystującą mechanizm sesji) umożliwiającą pobieranie z formularza loginu i jego wyświetlanie w dwóch plikach jsp.

Ćwiczenie 2 Proszę wykorzystać dyrektywę errorpage do przekierowania na stronę z opisem błędu po wykonaniu niedozwolonej operacji, np. dzielenia przez zero.

Akcje w JSP Z punktu widzenia składni JSP, akcje JSP są znacznikami należącymi do przestrzeni nazw JSP, które wykonują pewne konkretne czynności. Nie odpowiadają one zatem za wygląd strony, tylko za jej zachowanie. Standardowych akcji w JSP jest 14, natomiast samych znaczników należących do tej samej przestrzeni nazw jest znacznie więcej. Dla wszystkich akcji prefiksem jest jsp.

Akcja jsp:include Akcja jsp:include załącza plik w momencie wywoływania strony. Składnia jest następująca: <jsp:include page="względny URL" flush="true"} /> W przeciwieństwie do dyrektywy include, która dołącza plik w momencie przetwarzania strony JSP na serwlet, akcja include dołącza plik w momencie wywołania strony. W tym przypadku traci się trochę na wydajności i uniemożliwia się dołączanym stronom zawierania głównego kodu JSP (np. nie można ustawiać nagłówków HTTP), ale zyskuje się znacząco na elastyczności kodu.

Akcja jsp:forward Akcja jsp:forward przekierowuje wywołującego daną stronę na inną. Zawiera jeden atrybut (page), który powinien określać względny adres URL. Może to być zarówno wartość statyczna <jsp:forward page="/katalog/strona.jsp" /> jak też tworzona w trakcie wywołania strony <jsp:forward page="<%= jakieswyrazeniejavy %>">

EL - Expression Language Załóżmy, że mamy klasę Pracownik, której atrybutem jest PESEL. Załóżmy dalej, że w atrybucie sesji zalogowany przechowujemy obiekt aktualnie zalogowanego pracownika. Java nie pozwala na następującą konstrukcję: <%=session.getattribute("zalogowany").getpesel() %> W tym przypadku niezbędne jest wykonanie rzutowania: <%=((Pracownik)session.getAttribute("zalogowany")).getPesel() %>

Język EL pozwala na pobieranie różnego rodzaju informacji (pochodzących np. z obiektów żądania, odpowiedzi, sesji) w krótki i prosty sposób. Powyższy przykład wygląda następująco: ${sessionscope.zalogowany.pesel}

Do najważniejszych obiektów zaliczyć można: pagescope - mapa atrybutów o zasięgu strony requestscope - mapa atrybutów o zasięgu żądania sessionscope - mapa atrybutów o zasięgu sesji applicationscope - mapa atrybutów o zasięgu kontekstu aplikacji

cookie - mapa ciasteczek header - mapa nagłowków żądania headervalues - mapa nagłówków żądania, która zwraca tablice łańcuchów. Przydatna w przypadku, gdy wiemy, że dany nagłówek może mieć kilka wartości param - mapa parametrów żądania paramvalues - mapa parametrów żądania, która zwraca tablice łańcuchów. Przydatna w przypadku, gdy wiemy, że dany parametr może mieć kilka wartości initparam - mapa parametrów kontekstu

W wyrażeniach języka EL (poza standardowymi obiektami) można bezpośrednio korzystać z nazw atrybutów. Poprawy jest zapis ${zalogowany.pesel} Takie podejście wiąże się jednak z koniecznością przeszukiwania wszystkich możliwych zasięgów, czyli strony, żądania, sesji i kontekstu aplikacji. Jeśli ta sama nazwa występuje w więcej, niż jednym zasięgu, to wybrany zostanie atrybut o najmniejszym zasięgu.

Dostęp do obiektów języka EL Jak zostało wspomniane wcześniej, do obiektów możemy się odwoływać poprzez kropkę, jak w zwykłym języku Java. Problem pojawia się, gdy nazwa elementu, który chcemy wyświetlić, zawiera znaki specjalne, np. minus (np. Content-Type ). Do tego elementu nie odwołamy się używając konstrukcji ${header.content-type} Poprawne odwołanie jest następujące: ${header["content-type"]}

Ćwiczenie 1 Proszę stworzyć: interfejs Osoba zawierający metodę pobierającą i ustawiającą nazwisko; klasę Pracownik implementującą interfejs Osoba zawierającą metody pobierające i ustawiające nazwisko oraz pole Adres ustawiające adres; klasę Adres zawierającą metodę pobierającą i ustawiającą adres. Powyższe składowe projektu należy umieścić we wspólnym pakiecie (innym, niż domyślny).

Wykorzystując technologię JSP przy pomocy różnych konstrukcji języka EL proszę wypisać: nazwisko osoby wykorzystując (.) dane użytkownika ustawione metodą set.attribute o zasięgu aplikacji wykorzystując [] adres pracownika pochodzący z sesji nazwisko wpisane do listy wykorzystując listę wyrażeń dowolny nagłówek (np. Accept-Encoding) wartość utworzonego ciasteczka.

Java Bean Java Bean jest jedną z najważniejszych konstrukcji występujących w technologiach javowych, nienależąca do standardu języka. Ziarnem Javy może być każda klasa, która: zawiera publiczny konstruktor bezargumentowy. Klasa ta może zawierać oczywiście inne konstruktory. nie powinna udostępniać pól bezpośrednio. Powinna natomiast zawierać metody set i get, dzięki którym pola mogą być modyfikowane. powinna być serializowana. Zauważmy, że powyższe wytyczne nie są związane ze standardem języka. Ich niestosowanie nie spowoduje błędu kompilacji. Jeśli jednak decydujemy się na utworzenie ziarna, a nie zwykłej klasy, to należy trzymać się powyższych zasad.

Przykład: class Pracownik implements Serializable { private String nazwisko; private String pesel;... public Pracownik(){} public String getnazwisko(){return nazwisko;} public String getpesel(){return pesel;} public void setnazwisko(string v){ this.nazwisko=v; } public void setpesel(string v){ this.pesel=v; }... }

Każde ziarno Javy składa się z trzech elementów: właściwości metod zdarzeń

Właściwości Właściwości są publicznymi atrybutami ziarna, które zwykle są reprezentowane przez niepubliczne parametry instancji. Przykład. Niech ziarnem Javy będzie obiekt graficzny, który może mieć określony kolor, np. domyślnie zielony. Wówczas w klasie ziarna powinna pojawić się deklaracja parametru private Color kolor=color.green Ponieważ kolor jest właściwością ziarna, to należy jeszcze dostarczyć metody do manipulacji tą własnością: public Color getkolor() { return kolor; } public void setkolor(color nowykolor) { kolor=nowykolor; repaint(); }

Akcja jsp:usebean Akcja jsp:usebean znajduje lub tworzy ziarno Javy oraz pozwala załadować JavaBean w celu użycia na stronie JSP. Jest to bardzo użyteczna właściwość, ponieważ pozwala wykorzystywać ponownie klasy Javy bez utraty wygody, którą daje JSP w porównaniu do serwletów. Najprostsza składnia określająca użycie ziarna Javy jest następująca: <jsp:usebean id="nazwa" class="pakiet.klasa"} />

Powyższa akcja ładuje ziarna Javy po to, aby można było użyć akcji jsp:setproperty oraz jsp:getproperty w celu określenia i pobrania właściwości JavaBean. Jednakże istnieją dwie inne opcje. Pierwszą z nich jest możliwość użycia jej w formie kontenera, a mianowicie: <jsp:usebean...> zawartość </jsp:usebean> W tym przypadku zawartość powinna być wykonana tylko wtedy, gdy ziarno Javy jest po raz pierwszy wywoływane, a nie kiedy istniejące JavaBean jest znalezione i użyte. Drugą opcją jest to, że oprócz id i class istnieją jeszcze trzy atrybuty, które mogą być użyte: scope, type oraz beanname.

id - zawiera nazwę zmiennej, która wskazuje ziarno Javy class - wyznacza pełną nazwę pakietu JavaBean type - określa typ zmiennej, która odwołuje się do obiektu beanname - nadaje nazwę ziarnu Javy

scope - określa kontekst, w którym ziarno Javy może być dostępne. Dostępne są cztery wartości: page - udostępnia ziarno Javy na bieżącej stronie request - udostępnia ziarno Javy tylko dla bieżącego wywołania klienta session - udostępnia ziarno Javy dla wszystkich stron, które znajdują się w bieżącej sesji application - udostępnia ziarno Javy dla wszystkich stron, które znajdują się w tym samym kontekście serwletu

Przy tworzeniu, bądź też odwoływaniu się do ziarna Javy, należy się zastosować do kilku reguł: Gdy chcemy jedynie uzyskać referencję do ziarna Javy (bez jego tworzenia), to nie trzeba określać atrybutów type oraz class. Można jedynie podać atrybut type, ale musi on wówczas określać jedną z klas bazowych klasy, z której ziarno zostało utworzone. Gdy chcemy utworzyć ziarno Javy, trzeba określić przynajmniej atrybut class. Określa on bowiem klasę, która posłuży do utworzenia ziarna. Klasa ta musi spełniać warunki klasy JavaBean.

Akcja jsp:setproperty Akcja jsp:setproperty określa właściwość ziarna Javy. Ziarna Javy nie są obiektami oderwanymi od rzeczywistości, co więcej - bardzo często reprezentują istniejące w świecie realnym obiekty, np. mogą zostać użyte do ustawiania własności pól ziarna pobranych z formularza. Składnia może wyglądać następująco: <jsp:setproperty name="nazwa" property="właściwość" value="${requestscope.wartość}" />

Takie rozwiązanie wymaga jednak podania wyrażenia EL. Nie jest to kwestia skomplikowana, jednak powyższe rozwiązanie można zapisać następująco: <jsp:setproperty name="nazwa" property="właściwość" param="wartość" /> Atrybut param określa nazwę parametru żądania, czyli informacji pochodzącej np. z pól formularza, którego wartość ma zostać wstawiona do właściwości wartość ziarna Javy.

Rzadko jednak zdarza się, że chcemy modyfikować jedną właściwość ziarna Javy. Z reguły operacje takie wykonywane są jednocześnie dla wielu (czy nawet wszystkich) właściwości ziarna. W takim przypadku stosuje się konstrukcję: <jsp:setproperty name="nazwa" property="*"/> Serwer próbuje wówczas dopasować wszystkie parametry żądania do właściwości ziaren.

Akcja ta może być użyta w dwóch kontekstach: <jsp:usebean id="nazwa"... />... <jsp:setproperty name="nazwa" property="właściwość"... /> lub <jsp:usebean id="nazwa"... >... <jsp:setproperty name="nazwa" property="właściwość"... /> </jsp:usebean>

Dostępne atrybuty: name - określa nazwę własności property - określa własność własności value - określa wartość własności param - określa parametry własności

Akcja jsp:getproperty Akcja jsp:getproperty pobiera wartość właściwości ziarna Javy, konwertuje do typu łańcuchowego, po czym wysyła właściwość ziarna Javy na wyjście. Posiada dwa wymagane atrybuty: name - czyli nazwę ziarna Javy, która została określona przez jsp:usebean property - czyli własność, której wartość należy pobrać Najprostsza składnia jest następująca: <jsp:getproperty name="nazwa" property="własciwosc" />

Ćwiczenie 1 Wykorzystując akcję jsp:usebean proszę odczytać informację pochodzącą z klasy, natomiast wykorzystując akcje jsp:setproperty oraz jsp:getproperty proszę wypisać informację pochodzącą z ziarna Javy.

Ćwiczenie 2 Wykorzystując ziarna Javy proszę wyświetlić informacje pobrane z formularza (np. login i e-mail).