Zaawansowane aplikacje WWW - laboratorium



Podobne dokumenty
Aplikacje internetowe i rozproszone - laboratorium

Zaawansowane aplikacje WWW - laboratorium

Wykorzystywanie parsera DOM w programach Java i PL/SQL

Zaawansowane aplikacje internetowe - laboratorium Architektura CORBA.

Katalog książek cz. 2

Zaawansowane aplikacje internetowe - laboratorium Architektura CORBA.

Projektowanie aplikacji internetowych laboratorium

Aplikacje WWW - laboratorium

Języki i metody programowania Java Lab1 Zofia Kruczkiewicz

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.

Programowanie Obiektowe GUI

Klasy i obiekty cz II

Aplikacje WWW - laboratorium

Języki i metody programowania Java Lab2 podejście obiektowe

Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl

Aplikacje internetowe i rozproszone - laboratorium

Metody Metody, parametry, zwracanie wartości

Ćwiczenie 1. Kolejki IBM Message Queue (MQ)

D:\DYDAKTYKA\ZAI_BIS\_Ćwiczenia_wzorce\04\04_poprawiony.doc 2009-lis-23, 17:44

2) W wyświetlonym oknie należy zaznaczyć chęć utworzenia nowej aplikacji (wygląd okna może się różnić od powyższego); kliknąć OK

Zaawansowane aplikacje internetowe

Programowanie w Javie

LINQ TO XML. Autor ćwiczenia: Marcin Wolicki

Wprowadzenie do laboratorium. Zasady obowiązujące na zajęciach. Wprowadzenie do narzędzi wykorzystywanych podczas laboratorium.

Git, Bitbucket, IntelliJ IDEA

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

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().

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

dr inż. Piotr Czapiewski Tworzenie aplikacji w języku Java Laboratorium 1

Podstawy i języki programowania

Aplikacje RMI Lab4

Java pierwszy program w Eclipse «Grzegorz Góralski strona własna

Db4o obiektowa baza danych wersja.net

Wykład 4: Klasy i Metody

Aplikacje WWW - laboratorium

PWSG Ćwiczenia 12. Wszystkie ukończone zadania należy wysłać na adres: lub

akademia androida Składowanie danych część VI

Zaawansowane aplikacje internetowe laboratorium

Aplikacje WWW - laboratorium

Kontenery i komponenty graficzne

WPROWADZENIE DO JĘZYKA JAVA

Java Programowanie Obiektowe Ćwiczenie 1- wprowadzenie

Systemy Rozproszone - Ćwiczenie 6

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

Programowanie obiektowe

Programowanie obiektowe zastosowanie języka Java SE

Instrukcja implementacji sterownika wirtualnego portu szeregowego dla systemu Android. Opracowanie: Elzab Soft sp. z o.o.

Ćwiczenia 9 - Swing - część 1

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

Algorytmy z powrotami. Algorytm minimax

Katedra Architektury Systemów Komputerowych Wydział Elektroniki, Telekomunikacji i Informatyki Politechniki Gdańskiej

Bezpieczne uruchamianie apletów wg

1. Czynności przygotowujące aplikację działającą na platformie Java SE Biblioteka5 (należy ją pobrać z załącznika z p.1)

Java Platform Micro Edition

Zaawansowane aplikacje internetowe - laboratorium

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

Wykład 7: Pakiety i Interfejsy

Tworzenie projektu zawierającego aplet w środowisku NetBeans. lab1. Dr inż. Zofia Kruczkiewicz Programowanie aplikacji internetowych

Programowanie w języku Java. Bazy danych SQLite w Javie

JDK można pobrać ze strony

Architektury Usług Internetowych. Laboratorium 2. Usługi sieciowe

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

Metody dostępu do danych

Ekspert radzi. mechanizm w enova, umożliwiający wskazanie domyślnej drukarki dla danego stanowiska i wydruku. Strona 1 z 8. Ekspert radzi.

JAVA. Platforma JSE: Środowiska programistyczne dla języka Java. Wstęp do programowania w języku obiektowym. Opracował: Andrzej Nowak

Testowanie II. Celem zajęć jest zapoznanie studentów z oceną jakości testów przy wykorzystaniu metryk pokrycia kodu testami (ang. code coverage).

SWING c.d. przydatne narzędzia: JFileChooser, JOptionPane. drag'n drop, menu kontekstowe.

Laboratorium 8 Diagramy aktywności

Jak wykonać eksport danych do SIO z aplikacji Kadry VULCAN?

Diagram stanów Laboratorium 9

Programowanie w Javie Lista nr 1. Wybieramy kategorię Java, a wśród Projektów Java Application i [NEXT]

Tworzenie i wykorzystanie usług

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

Płace VULCAN. Jak wykonać eksport danych do SIO z aplikacji Płace VULCAN?

Podstawy XML-a. Zaawansowane techniki programowania

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

Java jako język programowania

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Programowanie Obiektowe Ćwiczenie 4

Laboratorium z przedmiotu: Inżynieria Oprogramowania INP002017_ Laboratorium 11 Testy akceptacyjne z wykorzystaniem narzędzia FitNesse

Wyjątki. Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut.

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

Polimorfizm, metody wirtualne i klasy abstrakcyjne

ZSBD ćwiczenie 4. Obiektowe systemy zarządzania bazą danych. Przygotowanie środowiska pracy. Wymagania: ZSBD ćwiczenie 4

1. Co można powiedzieć o poniższym kodzie (zakładając, że zaimportowano wszystkie niezbędne klasy)?

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 7

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

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

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Programowanie zespołowe

2. Tablice. Tablice jednowymiarowe - wektory. Algorytmy i Struktury Danych

5.2. Pierwsze kroki z bazami danych

Zaawansowane aplikacje internetowe - laboratorium

Podstawy obiektowości

Politechnika Gdańska Katedra Optoelektroniki i Systemów Elektronicznych

- Narzędzie Windows Forms. - Przykładowe aplikacje. Wyższa Metody Szkoła programowania Techniczno Ekonomiczna 1 w Świdnicy

Fragmenty są wspierane od Androida 1.6

Pierwsze kroki. Algorytmy, niektóre zasady programowania, kompilacja, pierwszy program i jego struktura

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

Transkrypt:

Zaawansowane aplikacje WWW - laboratorium Przetwarzanie XML (część 2) Celem ćwiczenia jest przygotowanie aplikacji, która umożliwi odczyt i przetwarzanie pliku z zawartością XML. Aplikacja, napisana w języku Java, będzie korzystać z parsera DOM oraz języka zapytań XPath. Do wykonania ćwiczenia wykorzystane zostanie zintegrowane środowisko programistyczne Eclipse SDK 3.1 (do pobrania z http://www.eclipse.org). Wymagane jest środowisko J2SE 1.5. Poniższy schemat reprezentuje strukturę drzewa DOM, która odpowiada dokumentowi przechowywanemu w pliku, który będzie źródłem XML dla budowanej aplikacji. korzeń węzeł elementu węzeł atrybutu węzeł tekstowy ID=10 procesorx 450 <part> <computer_parts> <name> <price> <quantity> <poznan> <warszawa> 35 24 <?xml version="1.0" encoding="utf-8"?> <computer_parts> <part ID="10"> <name>procesorx</name> <price>450</price> <quantity> <poznan>35</poznan> <warszawa>24</warszawa> </quantity> </part> <part ID="25"> <name>mysz</name> <price>65</price> <quantity> <poznan>5</poznan> <warszawa>16</warszawa> </quantity> </part>... </computer_parts> 1. Jeśli ukończyła(e)ś zadanie z poprzedniego laboratorium, masz gotowy program, który umożliwia utworzenie i zapisanie pliku XML. W przeciwnym wypadku możesz założyć nowy plik, np. dane.xml i wypełnić go poniższą zawartością. <?xml version = '1.0' encoding = 'UTF-8'?> <computer_parts><part ID="10"><name>procesorX</name><price>450</price><quantity><poznan>4</poznan><warszawa>7< ID="25"><name>mysz</name><price>65</price><quantity><poznan>24</poznan><warszawa>56</war ID="40"><name>klawiatura</name><price>12</price><quantity><poznan>12</poznan><warszawa>8 ID="50"><name>monitorLCD</name><price>960</price><quantity><poznan>5</poznan><warszawa>3 ID="60"><name>monitorCRT</name><price>360</price><quantity><poznan>1</poznan><warszawa>6 2. Uruchom środowisko Eclipse. Załóż nowy projekt, np. o nazwie xmllab2. Sposób postępowania został opisany w krokach 1 5 poprzedniego laboratorium. 3. Utwórz klasę ShopBrowser w sposób, jaki pokazano w krokach 8, 9 poprzedniego laboratorium. Nowa klasa powinna posiadać metodę main. 4. Dodaj statyczne pole klasy typu Document, w którym przechowywany będzie odczytany dokument XML. Przykładową nazwą może być xmldoc. Nie zapomnij o zaimportowaniu odpowiednich pakietów. import org.w3c.dom.*;

public class ShopBrowser private static Document m_xmldoc; 5. Podstawowym zadaniem aplikacji jest wczytanie istniejącego dokumentu XML i utworzenie odpowiadającego mu drzewa DOM. Jednym ze sposobów rozwiązania tego problemu jest wykorzystanie presera DOM. Klasy obiektów potrzebnych do parsowania pliku znajdują się w javax.xml.parser. Napisz metodę dla klasy ShowBrowser, która dla zadanego przez parametr pliku, dokona transformacji tego dokumentu do drzewa DOM. Poniższy kod realizuje postawione zdanie. private static boolean readdocument(string r_filename) DocumentBuilderFactory domfactory = DocumentBuilderFactory.newInstance(); try DocumentBuilder builder = domfactory.newdocumentbuilder(); m_xmldoc = builder.parse("file:" + r_filename); return true; catch (ParserConfigurationException px) System.out.println(px.toString()); catch (Exception iox) System.out.println(iox.toString()); return false; 6. Dopisz wywołanie metody readdocument(string) w głównej metodzie klasy (metoda main). Nazwa pliku powinna być przekazywana z linii poleceń jako pierwszy argument. Kod sprawdzający dodatkowo poprawność wykonania operacji odczytu dokumentu XML znajduję się poniżej. public static void main(string[] args) if (readdocument(args[0])) System.out.println("File OK."); else System.out.println("Problem reading XML file."); System.exit(0); 7. Umieść plik XML z danymi w głównym katalogu projektu. 8. Aplikacja jest gotowa do pierwszego uruchomienia. Zauważ, że wymagane jest przekazanie parametru przy wywołaniu programu. W środowisku Eclipse zadanie to można zrealizować tworząc odpowiednią konfigurację do uruchomienia programu. Z głównego menu wybierz Run Run... 9. W oknie menadżera konfiguracji w panelu Configurations zaznacz Java Application i kliknij przycisk New.

10. Przejdź do zakładki Arguments i w polu Program arguments wpisz nazwę pliku z danymi XML. 11. Uruchom program za pomocą przycisku Run. Możesz także powtarzać uruchomienia z tymi samymi parametrami za pomocą ikony w pasku narzędziowym lub wybierając z głównego menu Run-> Run Last Lunched. Efekt działania programu widoczny jest w zakładce konsoli. 12. Kolejnym krokiem jest odczyt zawartości, skonstruowanego na podstawie pliku, drzewa DOM. Można to zrobić poruszając się po tym drzewie, tak jak zostało to pokazane w zadaniu z poprzedniego laboratorium. Inną możliwością jest zastosowanie wyrażeń XPath do wyszukiwania pożądanych węzłów. W celu użycia wyrażeń XPath z biblioteki JAXP należy utworzyć odpowiedni obiekt korzystając z fabryki XPath. Ponieważ wyrażenia będą używane wielokrotnie w ramach aplikacji, warto utworzyć osobną klasę ułatwiającą korzystanie z tych wyrażeń. Utwórz klasę XPathEvaluator.

13. Uzupełnij klasę XPathEvaluator tak, aby odpowiadała poniższemu przykładowi. package myxmlpackage; import javax.xml.xpath.*; import org.w3c.dom.document; import org.w3c.dom.nodelist; public class XPathEvaluator XPath m_xpath; public XPathEvaluator() XPathFactory factory = XPathFactory.newInstance(); m_xpath = factory.newxpath(); public NodeList selectnodes(document r_xmldoc, String r_expr) try XPathExpression expr = m_xpath.compile(r_expr); return (NodeList) expr.evaluate(r_xmldoc, XPathConstants.NODESET); catch (XPathExpressionException xpe) System.out.println(xpe.toString()); return null; 14. W klasie ShopBrowser dodaj pole klasy przechowujące obiekt klasy XPathEvaluator. Dodaj do metody main polecenie utworzenia tego obiektu. public class ShopBrowser private static XPathEvaluator m_xpe; public static void main(string[] args) m_xpe = new XPathEvaluator();

15. Zaimplementuj metodę printoverview(), która wyświetli na ekranie liczbę różnych części komputerowych oraz sumaryczną liczbę sztuk wszystkich części. Wykorzystaj klasę XPathEvaluator do znalezienia odpowiednich węzłów. Poniżej znajduje się jedna z możliwych implementacji tej metody. W rozwiązaniu zastosowano dwa wyrażenia XPath. Pierwsze z nich to //part, które znajduje wszystkie węzły part. Drugie wyrażenie ma postać //part/quantity/*/text(). Biorąc pod uwagę znaczenie informacji w źródłowym pliku XML, możne je odczytać w następujący sposób: znajdź wszystkie wartości opisujące stan magazynu dla dowolnego miasta, dla dowolnego podzespołu komputerowego. Znając te wartości można je zsumować uzyskując łączny stan zapasów w magazynach. public static void printoverview() String result = "\n"; NodeList resultnodes = m_xpe.selectnodes(m_xmldoc, "//part"); if (resultnodes!= null) result += "Number of parts: " + resultnodes.getlength() + "\n"; resultnodes = m_xpe.selectnodes(m_xmldoc, "//part/quantity/*/text()"); int counter = 0; for (int i = 0; i < resultnodes.getlength(); i++) counter += Integer.parseInt(resultNodes.item(i).getNodeValue()); result += "Total number of items: " + counter + "\n"; System.out.println(result); 16. Dodaj wywołanie metody printoverview() na końcu metody main. Uruchom program i sprawdź efekt jego wykonania.

17. Następnym krokiem będzie implementacja metody wyszukującej podzespoły o zadanych parametrach, którymi będą: maksymalna cena podzespołu i minimalna ilość sztuk tego podzespołu w mieście Poznań. Stwórz implementację metody (w klasie ShopBrowser), np. o nazwie searchparts1, która będzie wykorzystywała tylko metody do poruszania się po drzewie oferowane przez DOM API. Przykładowa implementacja znajduje się poniżej. public static void searchparts1(string r_maxprice, String r_minquantity) Element rootnode = (Element) m_xmldoc.getdocumentelement(); NodeList partnodes = rootnode.getelementsbytagname("part"); for (int i = 0; i < partnodes.getlength(); i++) Element partelement = (Element) partnodes.item(i); Node pricenode = partelement.getelementsbytagname("price").item(0); int price = Integer.parseInt(priceNode.getFirstChild().getNodeValue()); if (price <= Integer.parseInt(r_maxPrice)) Element quantityelement = (Element) partelement.getelementsbytagname("quantity").item(0); Node citynode = quantityelement.getelementsbytagname("poznan").item(0); int q = Integer.parseInt(cityNode.getFirstChild().getNodeValue()); if (q >= Integer.parseInt(r_minQuantity)) Node namenode = partelement.getelementsbytagname("name").item(0); System.out.println(nameNode.getFirstChild().getNodeValue()); 18. Zaimplementuj metodę searchparts2, która będzie wykonywała te same czynności jak metoda searchparts1, ale z wykorzystaniem języka XPath. Przykładowa implementacja tej metody znajduje się poniżej. Wykorzystano w niej wyrażenie XPath w postaci //part[price<=x]/quantity[poznan>=y], gdzie x i y to parametry. public static void searchparts2(string r_maxprice, String r_minquantity) String expr = "//part[price<=" + r_maxprice + "]/quantity[poznan>=" + r_minquantity + "]"; NodeList resultnodes = m_xpe.selectnodes(m_xmldoc, expr); if (resultnodes!= null) for (int i = 0; i < resultnodes.getlength(); i++) Element partelement = (Element)resultNodes.item(i).getParentNode(); Node name = partelement.getelementsbytagname("name").item(0); System.out.println(name.getFirstChild().getNodeValue());

19. Dodaj do metody main wywołania obu funkcji. Dobierz odpowiednie parametry na podstawie zawartości pliku XML tak, aby uzyskać sensowne wyniki. Ostatecznie metoda main powinna mieć zawartość zbliżoną do następującej. public static void main(string[] args) if (readdocument(args[0])) System.out.println("File OK."); else System.out.println("Problem reading XML file."); System.exit(0); m_xpe = new XPathEvaluator(); System.out.println("-----------------------"); printoverview(); System.out.println("-----------------------"); searchparts1("600", "4"); System.out.println("-----------------------"); searchparts2("600", "4"); 20. Uruchom aplikację i sprawdź efekt jej działania.