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