Maj 18 2011
Komunikacja applet – kontroler Java Spring
Przeglądając sieć zauważyłem, że trochę osób ma problem z komunikacją applet – kontroler Java Spring (model MVC). Trudno znaleźć opis zagadnienia. Postanowiłem więc napisać kilka słów.
Założenie jest takie, aby kontroler odebrał dane, przetworzył i przekazał do widoku lub ewentualnie odpowiedział wysyłając komunikat do appletu. Oczywiście najlepiej byłoby przesyłać całe obiekty (serializacja), aby móc np. potem korzystając z JPA (mapowanie obiektowo-relacyjne) zapisać dane wygodnie do bazy. Dlatego też użyjemy strumieni obiektowych (ObjectOutputStream oraz ObjectInputStream).
Zanim jednak przejdę do rzeczy – kilka słów na temat sposobu osadzania appletu.
Po pierwsze – nabywamy ładnych nawyków, więc używamy znacznika object, nie applet.
Po drugie – jeżeli nasz applet był tworzony z wykorzystaniem dodatkowych bibliotek, np. AbsoluteLayout, należy też je dołączyć. Umieszczamy więc w pliku widoku kod:
<object type="application/x-java-applet" width="800" height="600"> <param name="classid" value="java:pakiet.Klasa.class" /> <param name="archive" value="naszApplet.jar, AbsoluteLayout.jar" /> </object>
W ten sposób nasz applet będzie wyświetlany na wybranej stronie. A co z komunikacją?
applet → kontroler
Aby wysyłać dane do kontrolera, w metodzie appletu, która ma to robić, umieszczamy kod:
URL url = new URL("http://adresSeriwsu/odebranieDanych.html"); URLConnection uc = url.openConnection(); uc.setDoInput(true); uc.setDoOutput(true); uc.setUseCaches(false); uc.setDefaultUseCaches(false); uc.setRequestProperty ("Content-Type", "application/octet-stream"); OutputStream out = uc.getOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(out); oos.writeObject("chrząszcz brzmi w trzcinie"); oos.flush(); oos.close();
Kolejno – tworzymy połączenie z odpowiednim adresem, przygotowujemy wejście i wyjście oraz upewniamy się, że nie będzie użyta wersja połączenia z pamięci podręcznej. Następnie definiujemy typ zawartości i ustawiamy strumienie. Do celów przykładu przesyłany jest obiekt String czyli ciąg znaków. Metoda kontrolera odbierająca informacje może wyglądać następująco:
@RequestMapping(value = "/odbieranieDanych", method = RequestMethod.POST) public void savindProcess(HttpServletRequest req, HttpServletResponse res) throws Exception { ServletInputStream in = req.getInputStream(); ObjectInputStream ois = new ObjectInputStream(in); String data = (String) ois.readObject(); System.out.println("oderano: "+data); }
I w ten oto sposób “chrząszcz brzmi w trzcinie” będzie widoczny z poziomu kontrolera.
kontroler → applet
Załóżmy, że chcemy, aby powyższa metoda zwracała jakieś informacje do appletu. Uzupełniamy ją więc o poniższy kod.
ServletOutputStream out = res.getOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(out); oos.writeObject("wysyłamy coś do appletu"); oos.flush(); oos.close();
Tu również przesłany jest ciąg znaków. Applet odbierze dane w następujący sposób:
InputStream in = uc.getInputStream(); ObjectInputStream ois = new ObjectInputStream(in); String data; try { data = (String) ois.readObject(); System.out.println("applet dostał: "+data); } catch (ClassNotFoundException ex) { }
I tak mamy zapewnioną komunikację pomiędzy appletem, a kontrolerem Java Spring. Łatwo zauważyć, że jest ona dość podobna do komunikacji ze zwyczajnymi servletami. Po wykonaniu takiej operacji można spokojnie przetworzyć dane i przekazać do widoku lub zapisać do bazy.
Cze 22 2014
Pliki projektu Eclipse a kontrola wersji
Czy pliki projektu Eclipse powinny być umieszczane w systemie kontroli wersji?
Zanim odpowiemy sobie na to pytanie – krótko – czym są takie pliki? Pliki projektu środowiska Eclipse zawierają informacje związane z konfiguracją samego środowiska oraz ustawieniami projektu. Tworzone są wraz z projektem, zapisywane w jego folderze. Są to m.in. .project oraz .classpath.
Istnieją różne podejścia do przechowywania tych plików w repozytorium. Jedni twierdzą, że nie powinny być w ogóle wersjonowane – każdy bowiem posiada własną konfigurację środowiska. Inni – przeciwnie – że zawsze powinny być w nim umieszczane.
Warto pamiętać, że w plikach projektu znajdują są takie informacje, jak kodowanie znaków, stosowana wersja kompilatora oraz zależności. Wypadałoby więc, żeby wszyscy członkowie zespołu posiadali te same ustawienia i mieli dane o użytych zewnętrznych bibliotekach. Jeżeli nie jest stosowany Maven lub inne narzędzie automatyzujące proces budowy projektu, a więc i znajdowania zależności, plik .classpath jest bezpośrednim źródłem informacji o nich. Bez niego konieczne jest analizowanie kodu w celu stwierdzenia dlaczego dana klasa nie jest dostępna – jakiej brakuje biblioteki?
Z drugiej strony plik .classpath często zawiera te informacje w postaci ścieżek bezwzględnych, co jest głównym argumentem przeciwko przechowaniu go w systemie kontroli wersji.
Można więc stwierdzić, że pliki projektu powinny być wersjonowane pod warunkiem, że nie zawierają ścieżek bezwzględnych.
Jak więc umieścić w nim informację o zależnościach unikając użycia ścieżek bezwzględnych? Eclipse daje możliwość zastosowania do tego celu zmiennych – Classpath Variables.
Czytaj więcej…
By Paweł Talacha • Java, Poradniki 0 • Tags: eclipse, java, repo