X


[ 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 ]

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • blondiii.htw.pl


  • Drogi użytkowniku!

    W trosce o komfort korzystania z naszego serwisu chcemy dostarczać Ci coraz lepsze usługi. By móc to robić prosimy, abyś wyraził zgodę na dopasowanie treści marketingowych do Twoich zachowań w serwisie. Zgoda ta pozwoli nam częściowo finansować rozwój świadczonych usług.

    Pamiętaj, że dbamy o Twoją prywatność. Nie zwiększamy zakresu naszych uprawnień bez Twojej zgody. Zadbamy również o bezpieczeństwo Twoich danych. Wyrażoną zgodę możesz cofnąć w każdej chwili.

     Tak, zgadzam siÄ™ na nadanie mi "cookie" i korzystanie z danych przez Administratora Serwisu i jego partnerów w celu dopasowania treÅ›ci do moich potrzeb. PrzeczytaÅ‚em(am) PolitykÄ™ prywatnoÅ›ci. Rozumiem jÄ… i akceptujÄ™.

     Tak, zgadzam siÄ™ na przetwarzanie moich danych osobowych przez Administratora Serwisu i jego partnerów w celu personalizowania wyÅ›wietlanych mi reklam i dostosowania do mnie prezentowanych treÅ›ci marketingowych. PrzeczytaÅ‚em(am) PolitykÄ™ prywatnoÅ›ci. Rozumiem jÄ… i akceptujÄ™.

    Wyrażenie powyższych zgód jest dobrowolne i możesz je w dowolnym momencie wycofać poprzez opcję: "Twoje zgody", dostępnej w prawym, dolnym rogu strony lub poprzez usunięcie "cookies" w swojej przeglądarce dla powyżej strony, z tym, że wycofanie zgody nie będzie miało wpływu na zgodność z prawem przetwarzania na podstawie zgody, przed jej wycofaniem.