Warszawa JUG. Struts 2 rusztowanie dla Łebu



Podobne dokumenty
Zagadnienia Programowania Obiektowego Agata Hejmej

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

Zaawansowane Aplikacje Internetowe

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

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

Złożone komponenty JSF wg

Złożone komponenty JSF wg

Java Server Faces - wprowadzenie

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

Ewolucja projektowania aplikacji w PHP na bazie frameworka Symfony 2

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

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

Załącznik 2 utworzenie projektu

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

Zaawansowane Aplikacje Internetowe

Kontenery IoC dla Java Guice 3.0

Zastosowanie komponentów EJB typu Session

Wywoływanie metod zdalnych

Wybrane działy Informatyki Stosowanej

Web frameworks do budowy aplikacji zgodnych z J2EE

Facelets ViewHandler

Produktywne tworzenie aplikacji webowych z wykorzystaniem Groovy i

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

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

Szkolenie wycofane z oferty

Serwery aplikacji. dr Radosław Matusik. radmat

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

Wywoływanie metod zdalnych

Zaawansowane Aplikacje Internetowe

SZKOLENIE TWORZENIE SYSTEMÓW

Metaprogramowanie w Ruby

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

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017

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

1 Wprowadzenie do J2EE

Aplikacje Internetowe, Servlety, JSP i JDBC

Forum Client - Spring in Swing

Wykład 8: klasy cz. 4

Java Server Faces narzędzie do implementacji w wy prezentacji

Backend Administratora

Programowanie komponentowe 5

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

ANGULARJS TWORZENIE APLIKACJI INTERNETOWYCH

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

Wzorce projektowe. dr inż. Marcin Pietroo

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

Java Enterprise Edition spotkanie nr 1. Sprawy organizacyjne, wprowadzenie

PHP 5 język obiektowy

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Wzorce projektowe. dr inż. Marcin Pietroo

Programowanie w Ruby

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.

Kurs WWW. Paweł Rajba.

Dokumentacja do API Javy.

Platformy Technologiczne

JavaServer Faces (JSF)

Metody dostępu do danych

Wprowadzenie db4o - podstawy db4o - technikalia Przydatne wiadomości. Wprowadzenie. db4o. Norbert Potocki. 1 czerwca Norbert Potocki db4o

Stripes & Stripernate. Zbigniew Skowron 13 kwietnia 2007

Wprowadzenie do projektu QualitySpy

Tworzenie aplikacji J2EE w technologii Struts

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

Programowanie obiektowe - 1.

Microsoft.NET: ASP.NET MVC + Entity Framework (Code First)

MVVM Light Toolkit. Julita Borkowska

Programowanie obiektowe

Programowanie obiektowe

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

Remote Method Invocation 17 listopada 2010

Michał Jankowski. Remoting w.net 2.0

Specyfikacja API Runtime BAS 3.0

Programowanie obiektowe

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

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

Zaawansowane aplikacje internetowe - laboratorium Architektura Spring.

Aplikacje RMI

Podejście obiektowe do budowy systemów rozproszonych

Programowanie obiektowe

Tworzenie i wykorzystanie usług sieciowych

Google Web Toolkit Michał Węgorek ZPO 2009

Programowanie w Ruby

Aplikacje RMI Lab4

Enterprise JavaBeans (EJB)

GLKit. Wykład 10. Programowanie aplikacji mobilnych na urządzenia Apple (IOS i ObjectiveC) #import "Fraction.h" #import <stdio.h>

Programowanie obiektowe

Języki i paradygmaty programowania Wykład 2. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/18

Aplikacje internetowe i rozproszone - laboratorium

Projektowanie obiektowe oprogramowania Wykład 9 Wzorce architektury aplikacji (1) Wiktor Zychla 2013

Front-end: solidne podstawy. Wszystko, co warto wiedzieć o HTML, CSS, JavaScript i Bootstrap.

AKADEMIA GÓRNICZO-HUTNICZA Wydział Elektrotechniki, Automatyki, Elektroniki i Informatyki

Co jeszcze mogą nam dać adnotacje? Adam Warski

1 Atrybuty i metody klasowe

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

Programowanie obiektowe

Aplikacje w środowisku Java

Projektowanie oprogramowania. Warstwa integracji z bazą danych oparta na technologii ORM Platforma Java EE Autor: Zofia Kruczkiewicz

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

Programowanie warstwy klienta w aplikacji JavaEE

Transkrypt:

Warszawa JUG Struts 2 rusztowanie dla Łebu czyli majster i malarz - ściemniacz na budowie (magazynier ma wolne) Tfórca: Łukasz Lenart lukasz.lenart@gmail.com

Agenda Struts - co, gdzie, kiedy? Pierwszy projekt brzydula maven2 wchodzi na scenę Konfiguracja ble, ble, Akcje, rezultaty, interceptory, - a gdzie to całe HTTP? OGNL a to co za potworek? Walidacja czyli Ordnung must sein! Struts Tags jakoś to musi wyglądad Parlez-vous anglais? e. ktoś zna francuski? Spring a ten tu czego? Pluginy kiedy się nudzisz Czy coś jeszcze? pytania są tendencyjne!!!

Struts 2 co, gdzie, kiedy? A na początku był servlet Pierwszy był Model Pierwszy JSP (czyli skrypty jako servlety) Drugi przyszedł Model Drugi servlet do JSP A potem był zespół Dwa plus Jeden (MVC), czyli złoty przebój - Struts1 Trochę skomplikowany, dużo XMLa, (dodad własne wady) Jednak stał się standardem i wzorcem Nadchodzi nowe Struts2, kolejne złote dziecko? ;-) Action Base Framework czyli rusztowanie bazujące na działaniu

Struts 2 co, gdzie, kiedy? Strona główna projektu http://struts.apache.org Grupa wsparcia dla użytkowników http://struts.apache.org/mail.html Inne pomocne sznurki http://struts.sourceforge.net/ http://www.planetstruts.org/ http://www.vitarara.org/cms/struts_2_cookbook http://www.roseindia.net/.../struts2-tutorials http://www.infoq.com/struts http://www.infoq.com/minibooks/starting-struts2

Struts 2 co, gdzie, kiedy? Struts1 release 1.0 to rok 2001 (sam pomysł narodził się gdzieś w 1999) najnowsza wersja to 1.3.8 Struts2 tak naprawdę to mezalians komuny Struts1 i ŁebRoboli (WebWork 2), a i tak cała robotę odwala Xwork, pomysł narodził się gdzieś koło 2005/2006 roku najnowsze wersja to 2.0.11.1 na wersję 2.1 wciąż nie można się doczekad Struts3 prima aprilis!!! chodź nigdy nie wiadomo ;-)

Brzydula maven2(.0.8) Tworzymy pierwszy projekt w Struts2: 1. mvn archetype:create 2. 19 [enter] 3. pl.org.lenart.wjug.example1 [enter] 4. example1 [enter] 5. 1.0-SNAPSHOT [enter] 6. pl.org.lenart.wjug.example1[enter] 7. [enter] 8. [enter] 9. Voilà możemy iśd do domu

Minimalne wymagania Servlet API 2.4 JSP API 2.0 Java 5 (dostępny port dla 1.4, ale nie polecam ;-) Min wymagane biblioteki (2.0.11): commons-logging-1.0.4.jar freemarker-2.3.8.jar ognl-2.6.11.jar struts2-core-2.0.11.jar xwork-2.0.4.jar Można rozpocząd pracę na bazie struts2-blank.war

Konfiguracja web.xml W web.xml musimy zdefiniowad filtr i mapowanie <filter> <filter-name>action2</filter-name> <filter-class> org.apache.struts2.dispatcher.filterdispatcher </filter-class> </filter> <filter-mapping> <filter-name>action2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>

Konfiguracja struts.xml <package> - podstawowa jednostka <action> - nasze akcje (ale nie fundusz) <interceptors> - przechwytywacze wykonania akcji <result-types> - co ma z tego wyniknąd <default-*> - różne domyślne rzeczy <global-*> - różne globalne rzeczy <include> pozwala rozbid konfigurację na moduły <bean> nasze implementacje podstawowych klas S 2 <constant> definiowane wartości stałych, w tym naszych własnych

<action> Konfiguracja struts.xml, cd name jak będzie widział ją świat class gdzie faktycznie jest nasz kod method co ma zostad wywołane, domyślnie execute() <result name=? type=?> - jaki będzie wynik <interceptors> - przechwytywacze tylko dla tej akcji <interceptor name=? class=?> <interceptor-stack name=?>

Konfiguracja inne pliki struts.properties kolejne miejsce na definiowanie stałych I18N - zasoby językowe dla naszych akcji, plików JSP jakiś/pakiet/<actionclassname>.properties jakiś/pakiet/package.properties pakiet/super/klasy/<superclassname>.properties <***>-validation.xml nasze zasady walidacji formularzy i wartości validators.xml jeśli napisaliśmy nasze własne walidatory, to umieszczamy je tutaj; nadpisuje również domyślny plik szkieletu (do wersji 2.0.8)

Akcje W najprostszym przypadku akcja musi posiadad metodę execute(), która zwraca String, jako nazwę rezultatu, zdefiniowanego w struts.xml W rzeczywistości, akcje rozszerza się z klasy ActionSupport, żeby nie odkrywad koła na nowo Tworzona jest osobna instancja dla każdego wywołania public class SimpleAction { public String execute() { return hello ;} }

Akcje Dodatkową funkcjonalnośd wstrzykuje się do akcji za pomocą przechwytywaczy (interceptors) i powiązanych z nimi interfejsów SessionAware, RequestAware, etc 99% akcji będzie niezależnych od HttpRequest, HttpSession, HttpResponse Na bazie powyższych interfejsów, wartości są wstrzykiwane jako obiekty java.lang.map

Rezultaty Rezultaty definiuje się w ramach konfiguracji akcji <action name="list class= SomeAction" method="dolist"> <result>/jsp/employees/list.jsp</result> </action> Domyślny rezultat to Dispatcher a domyślna wartośd to success stąd powyższy przykład działa Nowe typy rezultatów można dołączad za pomocą pluginów i rozszerzyd dany pakiet (np. tiles-default) Można również zdefiniowad je dla pakietu w sekcji <result-types> <result-type name="tiles" class="org...tilesresult" />

Dostępne typy rezultaty Dispatcher domyślny Freemarker Velocity XSL Tiles Redirect i RedirectAction Rezultaty Stream (np. do wysyłania plików lub dynamicznych obrazków) JasperReports Chain

Interceptory - używanie Klasa wywoływana przed lub po akcji / rezultacie Interceptory definiuje się pojedynczo lub jako stos wywołao i czasami kolejnośd gra rolę %-P Stosy interceptorów są zdefiniowane w strutsdefault.xml Jeśli nasz pakiet rozszerza np. struts-default to automatycznie dziedziczy też stos zdefiniowany dla tego pakietu W celu zwiększenia wydajności aplikacji, powinno się zdefiniowad własny stos tylko z tymi interceptorami, które używamy w aplikacji

Interceptory - tworzenie Chcąc stworzyd własny interceptor, należy zaimplementowad interfejs com.opensymphony.xwork.interceptor Zawiera on tylko jedną metodę String intercept(invocationcontext invocation) Obiekt InvocationContext zawiera referencję do akcji i jej otoczenia Przetwarzanie należy zakooczyd przez return invocation.invoke(); w celu wywołania kolejnych interceptorów

OGNL nowy na podwórku Object Graph Navigation Language Wszystko jest obiektem a nie Stringiem! Jeśli chcemy ewaluowad wyrażenie to musimy umieścid je w %{ }, literały w %{ sometext } Wartości są umieszczane i pobierane z ValueStack - mapa obiektów, gdzie obiekt 0 to root czyli akcja Oznacza to, że wywołanie <s:property name= employee.firstname > będzie się odnosid do action.getemployee().getfirstname(); Dostęp do innych zakresów jest możliwy za pomocą #

Struts Tags Największa bolączka przy migracji! Tagi S 2 nie są kompatybilne z S 1 (ze względu na OGNL) Podział na Tagi UI i generyczne (kontrolne i danych) <s:textfield name= employee.firstname /> <s:if test= %{employee.firstname!= null} >hurrra!</s:if> Wygląd taga zależy od zastosowanego tematu, domyślnie xhtml Można definiowad własne tematy, tworząc wygląd taga za pomocą Freemarkera lub Velocity Te same tagi można użyd w szablonach Freemarker i Velocity

Walidacja xml, adnotacje Walidacje można zdefiniowad w pliku xml o odpowiedniej nazwie jakiś/pakiet/<actionclassname>-validation.xml jakiś/pakiet/<actionclassname>-<alias>-validation.xml Walidacja można zdefiniowad za pomocą adnotacji przy setterach dla pól albo globalnie dla klasy @RequiredStringValidator(message = "Field is required!") @SkipValidation pomija walidacje przy wywołaniu metody (nie chodzi o settera!) @Validations() definiuje listę wszystkich walidacji dla danej klasy

Walidacja programowo Walidację można również przeprowadzid programowo, definiując odpowiednie metody validate() wywoływana za każdym razem, niezależnie od metody validate<methodname>() wywoływana tylko dla danej metody

Parlez-vous anglais - wielojęzycznośd Wszystkie Tagi S2 są przygotowane do pracy z wieloma językami <s:property value="gettext('some.key')" /> <s:text name="some.key" /> <s:textfield key="some.key" name="firstname"/> Podobnie w validation.xml <message>${gettext("validation.failednotice")}</message> Adnotacje wykorzystywane do walidacji @RequiredFieldValidator(message="Enter data", key="required.data")

Spring - upraszczamy Do tworzenia obiektów można użyd Springa albo Google Guice jako ostatnio pokazał szimano Wystarczy zdefiniowad stałą w struts.properties struts.objectfactory = spring Domyślnie obiekty wiązane są po nazwie Jeśli tworzymy akcje, to należy ustawid, że nie są singletonami (singleton=false lub scope=prototype) Możemy użyd Springa do tworzenia interceptorów, jednak, scope zależy jak używamy danego interceptora (stos czy pojedynczo dla akcji)

Pluginy - rozszerzamy Szkielet można łatwo rozszerzyd pisząc własne pluginy Plugin to może byd jedna klasa lub zbiór klas, które dodają nową funkcjonalnośd lub zmieniają istniejącą struts-plugin.xml umieszczamy w naszym pliku jar i w nim definiujemy np. nowy typ rezultatu albo nadpisujemy implementację wewnętrznej klasy szkieletu (np. Tiles nowy typ rezultatu, Spring nadpisuje domyślną fabrykę obiektów) Przykład struts2-spring-plugin struts2-tiles-plugin

Dostępne pluginy Spring nowa fabryka obiektów SiteMesh inne podejście do szablonów Tiles system dekompozycji strony Struts 1 ułatwia migrację JSF pozwala używad JSF, jednak z ograniczeniami JasperReports - raporty i parę innych, sprawdź -> http://cwiki.apache.org/s2plugins/home.html

Czy coś jeszcze?