Java Michał Wójcik michal.wojcik@eti.pg.gda.pl http://mwojcik.eti.pg.gda.pl Katedra Architektury Systemów Komputerowych Wydział Elektroniki, Telekomunikacji i Informatyki Politechnika Gdańska 5 kwietnia 2014 Michał Wójcik (KASK, ETI, PG) Java 5 kwietnia 2014 1 / 32
Tematy 1 Uruchomienie 2 Obsługa wyjątków 3 Obsługa IO 4 Kolekcje 5 JDBC 6 JavaServer Faces Michał Wójcik (KASK, ETI, PG) Java 5 kwietnia 2014 2 / 32
Tematy 1 Uruchomienie 2 Obsługa wyjątków 3 Obsługa IO 4 Kolekcje 5 JDBC 6 JavaServer Faces Michał Wójcik (KASK, ETI, PG) Java 5 kwietnia 2014 3 / 32
Technologie Java Rodzaje Java Platform: Java Platform, Standard Edition (Java SE): wcześniej J2SE, aktualna wersja 8 (1.8), głównie wykorzystywana wersja 7 (1.7); Java Platform, Enterprise Edition (Java EE): wcześniej J2EE, aktualna wersja 7 (1.7), głównie wykorzystywana wersja 6 (1.6), wersja 5 ciągle używana, J2SE używana w starszych długo rozwijanych systemach (np. banki), tworzenie aplikacji serwerowych; Java Platform, Micro Edition (Java ME): wcześniej J2ME, przeznaczona na urządzenia mobilne, CLDC Connected Limited Device Configuration, CDC Connected Device Configuration. Michał Wójcik (KASK, ETI, PG) Java 5 kwietnia 2014 4 / 32
Java SE Uruchomienie aplikacji desktopowych: aplikacja spakowana jako archiwum jar, główna klasa aplikacji zgodna z konwencją, uruchomienie poleceniem: java -jar aplikcja.jar. public class Main { public s t a t i c void main ( S t r i n g [ ] a r g s ) { System. out. p r i n t l n ( " H e l l o world! " ) ; } } Michał Wójcik (KASK, ETI, PG) Java 5 kwietnia 2014 5 / 32
Java EE Uruchomienie aplikacji webowych: aplikacja spakowana jako archiwum war, strony i klasy obsługi żądań, uruchamiania na serwerze. Serwery aplikacji: GlassFish Server Open Source Edition, Oracle GlassFish Server, Oracle WebLogic Server, JBoss Application Server, Apache Geronimo, WildFly. Michał Wójcik (KASK, ETI, PG) Java 5 kwietnia 2014 6 / 32
Tematy 1 Uruchomienie 2 Obsługa wyjątków 3 Obsługa IO 4 Kolekcje 5 JDBC 6 JavaServer Faces Michał Wójcik (KASK, ETI, PG) Java 5 kwietnia 2014 7 / 32
Wyjątki Wyjątek (Exception) zdarzenie zgłaszane podczas wykonania nieoczekiwanej akcji: połączenie z nieistniejącym serwerem, działania na źle sformatowanych danych, brak zasobów, itd. Istnieją dwa rodzaje wyjątków: zgłaszane jawnie zadeklarowane w kodzie wymagają obsłużenia, niezgłaszane nie wymagają obsłużenia. Michał Wójcik (KASK, ETI, PG) Java 5 kwietnia 2014 8 / 32
Obsługa wyjątków public class Klasa { public void metoda ( int i ) throws Exception { i f ( i < 0) { throw new Excetpion ( ) ; } } } Klasa k l a s a = new Klasa ( ) ; try { k l a s a. metoda ( 2); } catch ( Exception e ) { System. out. p r i n t l n ( e. getmessage ( ) ) ; } f i n a l l y { } Michał Wójcik (KASK, ETI, PG) Java 5 kwietnia 2014 9 / 32
Tematy 1 Uruchomienie 2 Obsługa wyjątków 3 Obsługa IO 4 Kolekcje 5 JDBC 6 JavaServer Faces Michał Wójcik (KASK, ETI, PG) Java 5 kwietnia 2014 10 / 32
Strumienie Strumienie: Character Streams pisanie/czytanie znakami: Reader, Writer, FileReader i FileWriter, BufferedReader i BufferedWriter, wykorzystuje Unicode do przechowywania znaków, automatyczna translacja znaków pomiędzy Unicode a lokalnym zbiorem znaków, należy zawsze zamykać strumienie. Michał Wójcik (KASK, ETI, PG) Java 5 kwietnia 2014 11 / 32
Strumienie standardowe i konsola Standardowe strumienie: System.in (InputStream), System.out (PrintStream), System.err (PrintStream). Michał Wójcik (KASK, ETI, PG) Java 5 kwietnia 2014 12 / 32
Otwieranie i zamykanie strumieni FileReader f r = null ; try { f r = new FileReader ( " f i l e " ) ; } catch ( FileNotFoundException ex ) { } f i n a l l y { i f ( f r!= null ) { try { f r. c l o s e ( ) ; } catch ( IOException ex ) { } } } Michał Wójcik (KASK, ETI, PG) Java 5 kwietnia 2014 13 / 32
Tematy 1 Uruchomienie 2 Obsługa wyjątków 3 Obsługa IO 4 Kolekcje 5 JDBC 6 JavaServer Faces Michał Wójcik (KASK, ETI, PG) Java 5 kwietnia 2014 14 / 32
Kolekcje Kolekcja kontener, obiekt grupujący elementy. Collection Framework narzędzia służące reprezentacji i manipulacji kolekcjami: interfejsy abstrakcyjne typy reprezentujące kolekcje, implementacje konkretne implementacje interfejsów. Michał Wójcik (KASK, ETI, PG) Java 5 kwietnia 2014 15 / 32
Rodzaje kolekcji Rodzaje kolekcji (interfejsy): Collection najbardziej ogólny rodzaj kolekcji, brak konkretnej implementacji, brak ograniczeń typu powtarzalność elementów lub kolejność, Set nie zawiera dwóch lub więcej takich samych elementów, List sekwencja elementów, może zawierać takie same elementy, (kolejki priorytetowe), Map mapowanie kluczy i wartości, nie może zawierać powtórzonych kluczy, jeden klucz może wskazywać jedną wartość. Michał Wójcik (KASK, ETI, PG) Java 5 kwietnia 2014 16 / 32
Implementacje kolekcji Implementacje kolekcji: Set: HashSet brak zapewnienia sortowania, TreeSet sortowany na bieżąco, List: ArrayList zachowana kolejność dodawanych elementów, Map: HashMap brak sortowania, TreeMap sortowanie kluczy. Michał Wójcik (KASK, ETI, PG) Java 5 kwietnia 2014 17 / 32
Operacje na kolekcjach Przeglądanie kolekcji: for-each: for (Object o: collection) {...}, nie należy usuwać elementów, również dla tablic. Michał Wójcik (KASK, ETI, PG) Java 5 kwietnia 2014 18 / 32
Tematy 1 Uruchomienie 2 Obsługa wyjątków 3 Obsługa IO 4 Kolekcje 5 JDBC 6 JavaServer Faces Michał Wójcik (KASK, ETI, PG) Java 5 kwietnia 2014 19 / 32
JDBC elementy JDBC to zestaw interfejsów pozwalających na komunikację z bazami danych: Connection reprezentuje połączenie z bazą danych: pozwala stworzyć obiekty do tworzenia zapytań, po użyciu należy je zamykać! Statement służy do wykonywania statycznych zapytań: gdy skończymy go używać należy zamykać ten obiekt; PreparedStatement służy do wykonywania dynamicznych (parametryzowanych) zapytań: wygodny gdy potrzebujemy w zapytaniu użyć typów takich jak data czy string, ponieważ zapewnia automatycznie właściwe cytowanie, pozwala na szybsze wykonywanie podobnych zapytań (są one prekompilowane), gdy skończymy go używać należy zamykać ten obiekt. Michał Wójcik (KASK, ETI, PG) Java 5 kwietnia 2014 20 / 32
JDBC elementy JDBC: ResultSet służy do przeglądania wyników: może istnieć tylko jeden dla jednego obiektu Statement/PreparedStatement: kolejne zapytania z tego samego obiektu Statement powodują nadpisanie poprzednich wyników; jest zamykany automatycznie przy zamknięciu jego rodzica (Statement, PreparedStatement), można go zamknąć oddzielnie by szybciej zwolnić niepotrzebne już zasoby. Michał Wójcik (KASK, ETI, PG) Java 5 kwietnia 2014 21 / 32
JDBC sterowniki, połączenia Połączenie z bazą danych: żeby móc połączyć się z bazą Java musi mieć dostęp do odpowiedniego sterownika: odpowiedni JAR dołączony do classpath ; sposoby na uzyskanie połączenie z bazą: Class.forName("jdbc.DriverXYZ"), Connection con = DriverManager.getConnection(url, "login", "haslo"); Michał Wójcik (KASK, ETI, PG) Java 5 kwietnia 2014 22 / 32
Tematy 1 Uruchomienie 2 Obsługa wyjątków 3 Obsługa IO 4 Kolekcje 5 JDBC 6 JavaServer Faces Michał Wójcik (KASK, ETI, PG) Java 5 kwietnia 2014 23 / 32
JSF JavaServer Faces 2: jest częścią standardu Java EE od wersji 5, posiada ustandaryzowane API dla komponentów, posiada oddzielony model komponentów od algorytmów wyświetlania ich na różne sposoby, posiada model obsługi zdarzań, posiada modele dla konwersji i walidacji danych z komponentów, Michał Wójcik (KASK, ETI, PG) Java 5 kwietnia 2014 24 / 32
Aplikacja korzystająca z JSF Żeby napisać aplikację korzystającą z JSF trzeba przynajmniej: napisać beany do obsługi aplikacji, których: właściwości można mapować do komponentów, metody mogą służyć do ustalania decyzji nawigacyjnych, walidacji, nasłuchiwania zdarzeń; utworzyć strony JSP/XHTML korzystające z komponentów UI JSF: dostępne są komponenty do wyświetlania tekstu, formularzy itp. <h:inputtext... />, <h:selectmanycheckbox... />,..., komponenty JSF (beany zarządzane, konwertery, walidatory itd.) oznaczamy adnotacjami, Michał Wójcik (KASK, ETI, PG) Java 5 kwietnia 2014 25 / 32
JSF servlet FacesServlet: zajmuje się obsługą wszystkich żądań do stron JSF, zmapowany w deskryptorze web.xml. Michał Wójcik (KASK, ETI, PG) Java 5 kwietnia 2014 26 / 32
JSF JSF udostępnia 6 zakresów widzialności atrybutów aplikacji: aplikacji, sesji, widoku, żądania, żaden, własny (programisty). Michał Wójcik (KASK, ETI, PG) Java 5 kwietnia 2014 27 / 32
Konwertery, walidatory, listenery JSF udostępnia: konwertery: konwertują wartości wpisywane w formularzach na typy Javy, standardowo dostępne są konwertery do wszystkich podstawowych typów (w tym dat); walidatory: odpowiadają za kontrolę wpisywanych wartości w pola formularzy, można samemu zaimplementować walidację jako metodę w beanie lub klasę spełniającą interfejs Validator; listenery: pozwalają nasłuchiwać na pewne zdarzenie jak: kliknięcie przycisku lub linku, zmiana wartości pola itp., implementuje się je jako metodę w beanie lub klasę spełniającą odpowiedni interfejs. Michał Wójcik (KASK, ETI, PG) Java 5 kwietnia 2014 28 / 32
Język wyrażeń (expression language) Są dwa typy wyrażeń: #{wyrazenie}: do odczytu i zapisu (rvalue, lvalue), obliczane w dowolnym etapie cyklu życia strony (deferred). Można go używać: w statycznym tekście oraz w atrybucie znacznika, który na to pozwala, nie wszystkie znaczniki pozwalają na użycie każdego typu wyrażeń, wyrażenie jest automatycznie konwertowane do potrzebnego typu (String, int,...). Michał Wójcik (KASK, ETI, PG) Java 5 kwietnia 2014 29 / 32
Język wyrażeń dostęp do zmiennych Dostęp do zmiennych: #{zmienna}: kontener będzie szukał zmiennej o podanej nazwie kolejno w kontekstach: strony, żądania, sesji, aplikacji; dostęp do właściwości obiektów następuje przez:. znak kropki: #{osoba.imie}; []: #{osoba[imie]}. Michał Wójcik (KASK, ETI, PG) Java 5 kwietnia 2014 30 / 32
Język wyrażeń dostęp do zmiennych Dostęp do zmiennych: dla wyrażania #a.b (#{a[b]}): jeśli zmienna jest mapą zwróci obiekt pod kluczem b, jeśli zmienna jest listą zwraca obiekt spod indeksu b, jeśli zmienna jest beanem zwraca a.getb(); operatory: +, -, *, /, div, %, mod, and, &&, or,, not,!, ==, eq,!=, ne, <, lt, >, gt, <=, ge, >=, le, empty, A? B : C. Michał Wójcik (KASK, ETI, PG) Java 5 kwietnia 2014 31 / 32
Pomocne Źródła I [1] Java SE 7 Documentation. http://download.oracle.com/javase/7/docs/. [2] The Java Tutorials. http://download.oracle.com/javase/tutorial/index.html. [3] JDBC Tutorial. http: //docs.oracle.com/javase/tutorial/jdbc/basics/index.html. [4] The Java EE 7 Tutorial. Oracle, July 2013. http://download.oracle.com/javaee/7/tutorial/doc/. [5] Bruce Eckel. Thinking in Java. 4th edition. Michał Wójcik (KASK, ETI, PG) Java 5 kwietnia 2014 32 / 32