Zagadnienia Programowania Obiektowego Agata Hejmej

Podobne dokumenty
STRUTS 2. Krystyna Bury Katarzyna Sadowska Joanna Pyc Politechnika Wrocławska Wydział Informatyki i Zarządzania Informatyka, III rok

1 Wprowadzenie do J2EE

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

Warszawa JUG. Struts 2 rusztowanie dla Łebu

Zaawansowane Aplikacje Internetowe

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

Szkolenie wycofane z oferty

SZKOLENIE TWORZENIE SYSTEMÓW

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

Web frameworks do budowy aplikacji zgodnych z J2EE

Wstęp Budowa Serwlety JSP Podsumowanie. Tomcat. Kotwasiński. 1 grudnia 2008

Produktywne tworzenie aplikacji webowych z wykorzystaniem Groovy i

Spring Framework - wprowadzenie i zagadnienia zaawansowane

Przegląd d innych rozwiąza. zań szkieletowych dla J2EE

Bezpieczeństwo frameworków WEBowych Java na przykładzie ataku CSRF

ASP.NET MVC. Podstawy. Zaawansowane programowanie internetowe Instrukcja nr 3

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

Programowanie komponentowe 5

Komunikacja między serwletami

Warstwa prezentacji. wg. D.Alur, J.Crupi, D. Malks, Core J2EE. Wzorce projektowe.

Programowanie w Javie 2. Płock, 26 luty 2014 r.

Serwery aplikacji. dr Radosław Matusik. radmat

Full Stack JavaScript z Angular i Nest. Dni: 5. Opis: Adresaci szkolenia

JAVA EE MODEL APLIKACJI. Waldemar Korłub. Narzędzia i aplikacje Java EE KASK ETI Politechnika Gdańska

Budowa aplikacji ASP.NET z wykorzystaniem wzorca MVC

Kurs ASP.NET ASP.NET CORE APLIKACJE WEBOWE

Poznań Java User Group Java Server Faces. Wprowadzenie (Fakty i Mity)

prepared by: Programowanie WWW Servlety

JAX-RS czyli REST w Javie. Adam Kędziora

Ewolucja projektowania aplikacji w PHP na bazie frameworka Symfony 2

Web frameworks do budowy aplikacji zgodnych z J2EE. Jacek Panachida

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ),

Mapowanie obiektowo-relacyjne z wykorzystaniem Hibernate

Podstawy wzorca MVC MODEL KON- TROLER WIDOK. Odpowiada za wyświetlenie danych użytkownikowi. Zawiera dane aplikacji oraz jej logikę.

Materiały oryginalne: ZAWWW-2st1.2-l11.tresc-1.0kolor.pdf. Materiały poprawione

Zagadnienia projektowania aplikacji J2EE

Aplikacja webowa w Javie szybkie programowanie biznesowych aplikacji Spring Boot + Vaadin

Java Enterprise Edition spotkanie nr 1. Sprawy organizacyjne, wprowadzenie

Aplikacje Internetowe, Servlety, JSP i JDBC

Wywoływanie metod zdalnych

Temat: Ułatwienia wynikające z zastosowania Frameworku CakePHP podczas budowania stron internetowych

Serwery aplikacji. mgr Radosław Matusik. Wydział Matematyki i Informatyki Uniwersytetu Łódzkiego radmat radmat@math.uni.lodz.

ASP.NET MVC. Grzegorz Caban 20 stycznia 2009

Ruby on Rails. Supersilnik WWW. Łukasz Włodarczyk

Wybrane działy Informatyki Stosowanej

Uniwersytet Łódzki Wydział Matematyki i Informatyki, Katedra Analizy Nieliniowej. Wstęp. Programowanie w Javie 2. mgr inż.

OpenLaszlo. OpenLaszlo

Aplikacje w środowisku Java

OSGi Agata Hejmej

Programowanie obiektowe

Wzorce prezentacji internetowych

JAVA NA SERWERZE SPRING. Waldemar Korłub. Platformy Technologiczne KASK ETI Politechnika Gdańska

Aplikacje internetowe oparte na kluczowych technologiach Java Enterprise(Servlet,JSP,JDBC, )

Remote Method Invocation 17 listopada 2010

Tworzenie aplikacji internetowych z wykorzystaniem szkieletu Spring. Paweł Ociepa, Paweł Pierzchała

Spring Web MVC, Spring DI

Zaawansowane Aplikacje Internetowe

Podejście obiektowe do budowy systemów rozproszonych

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

Szkolenie wycofane z oferty. Program szkolenia: Enterprise Java Beans 3.0/3.1

Wywoływanie metod zdalnych

Automatyczne generowanie kodu. 4Developers, 26 marca 2010

Programowanie obiektowe

Projektowanie aplikacji J2EE w architekturze Model-View-Controller

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

Laboratorium 7 Blog: dodawanie i edycja wpisów

Programowanie obiektowe

Aplikacje RMI

Aplikacje internetowe i rozproszone - laboratorium

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1

Programowanie obiektowe zastosowanie języka Java SE

Tomasz Dobek.

Języki i metody programowania Java. Wykład 2 (część 2)

Załącznik 2 utworzenie projektu

Google Web Toolkit Michał Węgorek ZPO 2009

Java Server Faces narzędzie do implementacji w wy prezentacji

Technologie internetowe ASP.NET Core. Paweł Rajba

Instrukcja 10 Laboratorium 13 Testy akceptacyjne z wykorzystaniem narzędzia FitNesse

Backend Administratora

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

Dokumentacja do API Javy.

Budowa aplikacji wielowarstwowych zastosowanie szablonów. Laboratorium 2 Programowanie komponentowe Zofia Kruczkiewicz

Wybrane działy Informatyki Stosowanej

Architektury Usług Internetowych. Laboratorium 1. Servlety

Wykład 1 Inżynieria Oprogramowania

Programowanie obiektowe

Aplikacje RMI Lab4

prepared by: Programowanie WWW Model-View-Controller

JSF 1.2. w wykonaniu NetBeans IDE 6.1. Jacek Laskowski

Omówienie wzorców wykorzystywanych w Prism 5.0. Dominika Różycka

EPI: Interfejs Graficzny Wykład nr 4 Podstawy frameworku Rails

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

Architektury Usług Internetowych. Laboratorium 1 Servlety

Podstawowe wykorzystanie Hibernate

Java Server Faces - wprowadzenie

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Transkrypt:

Zagadnienia Programowania Obiektowego 3.11.2008 Agata Hejmej

Plan prezentacji co to jest Struts2? krótki przegląd typów podejść przy tworzeniu aplikacji webowych architektura MVC i MVC2 architektura Struts2 cykl życia żądania w Struts2 akcje interceptory podsumowanie dlaczego Struts2?

Struts 2 to elastyczny i łatwo rozszerzalny framework do tworzenia aplikacji webowych w Javie cel Struts 2: uczynić rozwijanie aplikacji webowej łatwiejszym dla dewelopera

JAVA i aplikacje webowe SERWLET pierwszy oparty na Javie sposób tworzenia aplikacji webowych, program wykonywany na serwerze * URL jest mapowany na klasy, których metody będą wywoływane * HTML w Javie na większą skalę jest koszmarem w utrzymywaniu * przy każdej zmianie w aplikacji konieczna rekompilacja itd. JSP Java Server Pages technologia polegająca na umieszczaniu kodu Javy (scriptlet) wewnątrz kodu HTML * każdy JSP zapewnia zarówno logikę dla przetwarzania zapytania jak i sposób wyświetlania * kod Javy nieuporządkowany w klasy i metody sprzyja copy&paste * dlatego do specyfikacji JSP dodano tagi

JAVA i aplikacje webowe cd. Action-Based Frameworks kombinacja pomysłów z serwletów i JSP * oddzielenie logiki przetwarzania od logiki prezentacji * MVC, w którym serwlet jest kontrolerem, modelem są akcje, a za widok odpowiadają strony JSP Struts 2 to oparty o model MVC2 Action-Based Framework Component-Based Frameworks aplikacja webowa nie jest logicznie dzielona na strony, tylko na komponenty (widgety) * każdemu widgetowi odpowiada jego własna logika przetwarzania * re-use komponentów * przykłady: JSF, Wicket, Tapestry

Architektura MVC (Model View Controller) Model logika biznesowa, baza danych Widok wygląd strony Kontroler kod nawigacyjny

Architektura MVC2 standardowe MVC nie jest najlepszym rozwiązaniem dla aplikacji webowych Struts 2 (jak i wiele innych frameworków) używa jego modyfikacji MVC2

Architektura Struts 2 Kontroler: * Struts2 dispatch servlet filter * interceptory Model: * akcje Widok: * typy wynikowe * wyniki / view technologies

Struts2 jest bardzo elastyczny i rozszerzalny i dla danej aplikacji webowej właściwie wszystko jest konfigurowalne. Framework Struts2 dostarcza warstwę kontrolera. Deweloperzy mogą użyć tej warstwy łącząc ją z innymi standardowymi technologiami do obsługi: * logiki biznesowej np. POJOs, XWork * dostępu do danych np. DAOs, Cayenne, EJB, Hibernate * warstwy prezentacji np. JSP, Velocity, Freemarker

Taka elastyczność jest wielką zaletą, lecz jednocześnie konieczność konfiguracji wszystkiego jest bardzo uciążliwa i czasochłonna dlatego zastosowano zasadę Convention over Configuration (ograniczono konfigurację XMLową przez defaulty) w dalszej części prezentacji omówię Struts2 w połączeniu z defaultowymi elementami

Struts2 krok po kroku (cykl życia żądania) 1. Każde żądanie od użytkownika przechodzi najpierw przez Dispatcher Filter, który odpowiednio mapuje URL na akcję, która jest obiektem javowym 2. Interceptory wykonują pre-processing związany z daną akcją 3. Akcja zostaje wykonana 4. Interceptory wykonują post-processing 5. W zależności od wyniku akcji zostaje wygenerowany odpowiedni widok (default: JSP)

Kluczowe we frameworku Struts 2 są: akcje interceptory

Akcje

AKCJE akcje to podstawowy element we frameworkach typu action-based są najbardziej podstawową jednostką pracy związaną z żądaniem HTTP pochodzącym od użytkownika akcje w Struts 2 to zwykłe POJO (Plain Old Java Object) nie muszą rozszerzać żadnych klas konfiguracje akcji dodajemy do pliku konfiguracyjnego struts.xml akcje muszą posiadać metodę która zwraca wartość typu String, domyślnie nazywa się execute()

AKCJE cd. class MyAction { } public void String execute() throws Exception { if( mylogicworked() ) { return "success"; } else { return "error"; } }

AKCJE cd. Wpis w pliku konfiguracyjnym: <action name="my" class="com.fdar.infoq.myaction" > <result>view.jsp</result> <result name="error" type="freemarker">error.ftl</result> </action> atrybut name dla action dostarcza URL związany z wykonaniem akcji, w tym przypadku to /my.action atrybut class dostarcza pełną nazwę pakietu i klasy akcji, która ma zostać wykonana domyślny atrybut name dla result to success generowane wyniki są domyślnie stronami jsp (type = dispatcher ) ale są dostępne inne typy, można również tworzyć własne

AKCJE cd. akcje, żeby wiedziały w jaki sposób działać, potrzebują dostępu do wartości z żądania oraz formularzy jeśli akcja chce dostać się do danych musi dostarczać gettery i/lub settery do danego pola np. jeśli JSP robi wywołanie: /home.action?framework=struts&version=2 akcja powinna dostarczać settery setframework( String frameworkname) oraz setversion( int version ) resztę, łącznie z konwersją typów dostarcza Struts2

AKCJE cd. żeby akcja mogła wykonać jakieś przetwarzanie trzeba udostępnić jej różne obiekty (business objects, data access objects i inne zasoby) jednocześnie chcemy żeby w aplikacji były luźne powiązania (loose coupling) w tym celu w Struts2 stosuje się technikę zwaną wstrzykiwaniem zależności (dependency injection), a dokładniej setter injection tzn. że żeby obiekty były dostępne dla akcji, musi ona dostarczać odpowiedni setter

AKCJE cd. preferowanym frameworkiem do obsługi dependency injection jest Spring Framework, który jest konfigurowany jako wtyczka żeby udostępniać modyfikowane przez akcję obiekty, do akcji trzeba dodać gettery do tych obiektów stosowanie wstrzykiwania zależności dodatkowo ułatwia testowanie

Interceptory

INTERCEPTORY koncepcyjnie interceptory odpowiadają używanym w serwletach filtrom interceptory pozwalają na wstępne oraz wyjściowe przetwarzanie akcji wiele możliwości dostarczanych przez Struts2 jest zaimplementowanych jako interceptory np. obsługa wyjątków, uploadowanie plików, walidacja podobnie jak filtry mogą tworzyć uszeregowane warstwy mają dostęp do wykonywanej akcji, zmiennych środowiskowych i własności wywołania

INTERCEPTORY cd. W Struts 2 mamy dostępnych wiele interceptorów out of the box np. interceptory implementujące wstrzykiwanie zależności: * dla Spring Framework ActionAutowiringInterceptor * żądanie i wartości z formularzy ParametersInterceptor

INTERCEPTORY cd. Wpis konfiguracyjny do struts.xml: <interceptors>... <interceptor name="autowiring" class="interceptor.actionautowiringinterceptor"/> </interceptors> Interceptory dodajemy do akcji: <action name="my" class="com.fdar.infoq.myaction" > <result>view.jsp</result> <interceptor-ref name="autowiring"/> </action> Lub do wszystkich akcji w pakiecie: <default-interceptor-ref name="autowiring"/>

INTERCEPTORY cd. Struts2 opiera większość swojej funkcjonalności na interceptorach, więc często do jednej akcji przypisanych jest po ok. 8-10 interceptorów Dlatego wygodnie jest tworzyć stosy interceptorów <interceptor-stack name="basicstack"> <interceptor-ref name="exception"/> <interceptor-ref name="servlet-config"/> <interceptor-ref name="prepare"/> <interceptor-ref name="checkbox"/> <interceptor-ref name="params"/> <interceptor-ref name="conversionerror"/> </interceptor-stack> <action name="my" class="com.fdar.infoq.myaction" > <result>view.jsp</result> <interceptor-ref name="basicstack"/> </action>

public interface Interceptor extends Serializable { void destroy(); void init(); } String intercept(actioninvocation invocation) throws Exception; obiekt ActionInvocation zapewnia dostęp do środowiska uruchomieniowego, co pozwala na: * dostęp do wywoływanej akcji * kontekstu (parametrów żądania, sesji itd.) * wyniku wykonania akcji

Podsumowanie

FilterDispatcher wywołuje ActionMapper i sprawdza czy jakaś akcja ma zostać wywołana, jeśli tak to przekazuje sterowanie do ActionProxy ActionProxy korzystając z pliku konfiguracyjnego tworzy obiekt ActionInvocation Action Invocation wywołuje kolejne interceptory, a następnie wykonuje akcję i zgodnie z jej rezultatem wykonuje odpowiedni kod z JSP albo szablonów, a wynik przekazuje do interceptorów

Dlaczego Struts2? uproszczony projekt frameworku uniezależnienie akcji od frameworku; komponenty frameworku są luźno powiązane uproszczone akcje POJOs, dependency injection ułatwione testowanie akcje są niezależne od HTTP i od frameworku + dependency injection nie używa ActionForms inteligentne defaulty większość elementów konfiguracji ma wartości domyślne

Dlaczego Struts2? cd. dostarcza biblioteki tagów i pozwala na wykorzystywanie innych bibliotek (np. JSP, FreeMarker) mniej kodu wprowadzono adnotacje QuickStart wiele zmian może być przeprowadzonych w locie, bez konieczności restartu kontenera webowego łatwa integracja ze Springiem łatwa rozszerzalność poprzez dodawanie wtyczek wystarczy dodać JARa wsparcie dla AJAXa framework dostarcza zestaw tagów, które uczynią aplikację bardziej interaktywną

Dziękuję za uwagę KONIEC