[ Pobierz całość w formacie PDF ]
.out// (zazwyczaj konsoli Javy) i zwrócenie nullw.printStackTrace();return null;}finally {// Zawsze zamkniÄ™cie poÅ‚Ä…czenia// Poniższy kod jest wykonywany niezależnie od wykonania poprzednich dziaÅ‚aÅ„if (in != null) {try { in.close(); }catch (IOException ignored) { }}}}private String pobierzDataPortObiekt() {InputStream in = null;try {// Ustanowienie poÅ‚Ä…czenia przez port z serwletemSocket port = new Socket(getCodeBase().getHost(), getSocketPort());// WyÅ›wietlenie linii "obiekt", wskazujÄ…cej chęć pobrania Data jako obiektu// zserializowanegoPrintStream wyj = new PrintStream(port.getOutputStream());wyj.println("obiekt");wyj.flush();// Stworzenie ObjectInputStream odczytujÄ…cego odpowiedźin = port.getInputStream();ObjectInputStream wynik =new ObjectInputStream(new BufferedInputStream(in));// Odczytanie obiektu i zapamiÄ™tania go jako DataObject obi = wynik.readObject();Date data = (Date)obi;// Zwrócenie Å‚aÅ„cuchowej reprezentacji otrzymanej Datareturn data.toString();}catch (Exception w) {// Jeżeli wystÄ…piÅ‚ problem, wyÅ›wietlenie w System.out// (zazwyczaj konsoli Javy) i zwrócenie nullw.printStackTrace();return null;}finally {// Zawsze zamkniÄ™cie poÅ‚Ä…czenia// Poniższy kod jest wykonywany niezależnie od wykonania poprzednich dziaÅ‚aÅ„if (in != null) {try { in.close(); }catch (IOException ignored) { }}}}W obu powyższych metodach, aplet rozpoczyna dziaÅ‚anie przez utworzenie obiektu Socket wykorzystywanego do komunikacji z serwerem.Aby go utworzyć, musi znać nazwÄ™ komputera i numer portu, na którym nasÅ‚uchuje serwlet.OkreÅ›lenie komputera jest proste — musi to być ten sam komputer, z którego zostaÅ‚ on pobrany, dostÄ™pny przy pomocy wywoÅ‚ania getCodeBase().getHost().OkreÅ›lenie portu jest trudniejsze, jako że zależy wyÅ‚Ä…cznie od serwletu, z którym Å‚Ä…czy siÄ™ aplet.Aplet ten wykorzystuje metodÄ™ getSocketPort() w celu okreÅ›lenia tego.Przedstawiona powyżej implementacja getSocketPort() zwraca wartość parametru apletu socketPort lub (jeżeli parametr ten nie jest podany) wartość zmiennej DEFAULT_PORT.Po ustanowieniu poÅ‚Ä…czenia przez port, aplet wykorzystuje nienazwany protokół w celu porozumienia siÄ™ z serwerem.Protokół ten wymaga, aby aplet wysÅ‚aÅ‚ jednÄ… liniÄ™ w celu wskazania, czy aktualny czas wysyÅ‚any w odpowiedzi miaÅ‚ formÄ™ tekstu, czy obiektu.Jeżeli linia ta zawiera sÅ‚owo obiekt, aplet otrzymuje obiekt.Jeżeli zawiera cokolwiek innego, otrzymuje zwykÅ‚y tekst.Po wysÅ‚aniu tej linii, aplet może odczytać odpowiedź we wÅ‚aÅ›ciwy sposób.Aplet i serwlet mogÄ… kontynuować porozumiewanie siÄ™ przy pomocy tego portu.Jest to jedna z głównych zalet niestosowania komunikacji HTTP.Jednak w tym przypadku, aplet otrzymaÅ‚ pożądane informacje i może po prostu zamknąć poÅ‚Ä…czenie.ZamkniÄ™cie to jest wykonywane w bloku finally.Umieszczenie zamkniÄ™cia w tym miejscu zapewnia koniec poÅ‚Ä…czenia niezależnie od tego, czy try spowoduje dowolny wyjÄ…tek, czy nie.Po dodaniu dwóch powyższych metod aplet jest niemal kompletny.Po uruchomieniu go w tym momencie, wynikiem bÄ™dzie wyÅ›wietlenie dat we wszystkich polach poza „Obiekt RMI”.Komunikacja RMIWe wczeÅ›niejszej części tego rozdziaÅ‚u powiedziano, że jednym z powodów nie wykorzystywania komunikacji RMI jest jej skomplikowanie.Chociaż jest to prawda, jest również prawdÄ…, że przy pomocy innej superklasy serwletu, kod wymagany, aby serwlet byÅ‚ dostÄ™pny przez komunikacjÄ™ RMI, może być aż Å›miesznie prosty.Po pierwsze, dokÅ‚adnie opisany zostanie proces nadawania serwletowi wÅ‚aÅ›ciwoÅ›ci obiektu zdalnego.NastÄ™pnie, po udowodnieniu prostoty tego dziaÅ‚ania wyjaÅ›niona zostanie caÅ‚a praca majÄ…ca miejsce w tle.SerwletWszystkie obiekty zdalne RMI muszÄ… wykorzystywać specyficzny interfejs, Interfejs ten wykonuje dwa dziaÅ‚ania — deklaruje, które metody obiektu zdalnego majÄ… zostać udostÄ™pnione zdalnym klientom, oraz rozszerza interfejs Remote w celu wskazania, że jest to interfejs obiektu zdalnego.W przypadku przykÅ‚adowego serwletu SerwletGodziny, można stworzyć interfejs SerwerGodziny przedstawiony w przykÅ‚adzie 10.11.PrzykÅ‚ad 10.11.Interfejs SerwerGodzinyimport java.util.Date;import java.rmi.Remote;import java.rmi.RemoteException;public interface SerwerGodziny extends Remote {public Date getDate() throws RemoteException;}Powyższy interfejs deklaruje udostÄ™pnianie przez SerwletGodziny klientom zdalnym metody getDate().ProszÄ™ zauważyć, że podpis getDate() zostaÅ‚ nieco zmieniony — wywoÅ‚uje ona teraz RemoteException.Dla każdej metody udostÄ™pnionej przez RMI musi być zadeklarowane wywoÅ‚anie wyjÄ…tku
[ Pobierz całość w formacie PDF ]
Tematy
IndexZłota Dynastia 05 Smith Karen Rose Serce ze złota
Meyer Stephenie Bella Swan 05 Midnight Sun (tłum. Madeline nieoficjalne)
Burrowes Grace Córki księcia Windham 05 Marzenie lady Jenny
§ Kobr Michael, Klupfel Volker Komisarz Kluftinger 05 Operacja Seegrund
Leon XIII 1891.05.15 encyklika Rerum novarum hiszp
Chuck Logan [Phil Broker 05] After the Rain (v5.0) (epub) id
Cussler Clive, Du Brul Jack Oregon 05 Statek smierci
Smith, EE Doc Family D'Alembert 05 Appointment at Bloodstar
Banks Maya Trylogia Bez Tchu 01 Szaleństwo zmysłów(1)
Philip Gordon, Jeremy Shapiro Allies At War, America, Europe and the Crisis Over Iraq (2004)