do ÂściÂągnięcia > pobieranie > ebook > pdf > download

[ Pobierz całość w formacie PDF ]
.parseInt(getParameter("port")); }catch (NumberFormatException ignored) { return Registry.REGISTRY_PORT; }}private String pobierzRejestrNazwa() {String nazwa = getParameter("nazwa");return (nazwa == null ? "SerwletPogaw" : nazwa);}// Zwraca odwo³anie do zdalnej pogawêdki serwer/serwlet// Próbuje wyjœæ, je¿eli wyst¹pi problemprivate SerwerPogaw pobierzSerwerPogaw() {try {Registry rejestr =LocateRegistry.getRegistry(getCodeBase().getHost(), pobierzRejestrPort());Object obi = rejestr.lookup(pobierzRejestrNazwa());return (SerwerPogaw)obi;}catch (java.rmi.UnknownHostException w) {// Nieznany komputer rejestru, próba wyjœciaSystem.out.println("Komputer nieznany, URL: " + w.getMessage());System.exit(1);}catch (NotBoundException w) {// Odnalezienie obiektu niemo¿liwe, próba wyjœciaSystem.out.println("Nazwa niedowi¹zana: " + w.getMessage());System.exit(1);}catch (ClassCastException w) {// Obiekt to nie SerwerPogaw, próba wyjœciaSystem.out.println(pobierzRejestrNazwa() + " to nie SerwerPogaw:" +w.getMessage());System.exit(1);}catch (RemoteException w) {// Ogólny problem RMI, próba wyjœciaSystem.out.println("Wyj¹tek zdalny: " + w.getMessage());System.exit(1);}catch (Exception w) {// Inny problem, próba wyjœciaSystem.out.println("Ogólny wyj¹tek: " +w.getClass().getName() + ": " + w.getMessage());System.exit(1);}return null; // zwraca null, je¿eli exit() nie powiedzie siê}// Dodanie siebie jako klienta serwera pogawêdek// Proszê zauwa¿yæ, ¿e rejestr RMI nie jest potrzebnyprivate void rejestrujSerwerPogaw(SerwerPogaw serwer) {try {UnicastRemoteObject.exportObject(this);serwer.dodajKlient(this);}catch (RemoteException w) {// Ogólny problem RMI, próba wyjœciaSystem.out.println("Wyj¹tek zdalny: " + w.getMessage());System.exit(1);}catch (Exception w) {// Inny problem, próba wyjœciaSystem.out.println("Ogólny wyj¹tek: " +w.getClass().getName() + ": " + w.getMessage());System.exit(1);}}public void init() {// Sprawdzenie, czy aplet zosta³ pobrany bezpoœrednio z systemu plików.// Je¿eli tak, wyjaœnienie u¿ytkownikowi, ¿e musi on byæ pobrany z serwera wcelu// komunikacji z serwletami tego serweraURL kodbazy = getCodeBase();if (!"http".equals(kodbazy.getProtocol())) {System.out.println();System.out.println("*** Ups! ***");System.out.println("Ten aplet musi byæ pobrany z serwera WWW.");System.out.println("Proszê spróbowaæ ponownie, tym razem ³aduj¹c plik HTML");System.out.println("zawieraj¹cy ten serwlet jako");System.out.println("\"http://serwer:port/plik.html\".");System.out.println();System.exit(1); // Dzia³a jedynie z przegl¹dark¹ apletów// Przegl¹darki wyœwietlaj¹ b³¹d i kontynuuj¹}// Pobranie zdalnego serwera pogawêdekserwerPogaw = pobierzSerwerPogaw();// Zarejestrowanie siebie jako jednego z klientówrejestrujSerwerPogaw(serwerPogaw);// Pobranie nazwy tego u¿ytkownika z parametru apletu ustawionego przezserwlet// Mo¿na o to po prostu spytaæ u¿ytkownika, ale jest to przedstawienie formy// komunikacji serwlet->aplet.uzyt = getParameter("user");if (uzyt == null) uzyt = "anonymous";// konfiguracja interfejsu u¿ytkownika.// Na górze du¿e pole TextArea przedstawiaj¹ce ca³¹ rozmowê.// Poni¿ej opisane TextField przyjmuj¹ce wpisy tego u¿ytkownika.tekst = new TextArea();tekst.setEditable(false);etykieta = new Label("Powiedz coœ: ");wpis = new TextField();wpis.setEditable(true);setLayout(new BorderLayout());Panel panel = new Panel();panel.setLayout(new BorderLayout());add("Centrum", tekst);add("Dol", panel);panel.add("Lewo", etykieta);panel.add("Centrum", wpis);}String pobierzNastepnaWiadomosc() {String nastepnaWiadomosc = null;while (nastepnaWiadomosc == null) {try {nastepnaWiadomosc = serwerPogaw.pobierzNastepnaWiadomosc();}catch (RemoteException w) {// Wyj¹tek zdalny, zg³oszenie i odczekanie przed nastêpn¹ prób¹System.out.println("wyj¹tek zdalny:" + w.getMessage());try { Thread.sleep(1000); } catch (InterruptedException ignored) { }}}return nastepnaWiadomosc + "\n";}public void ustawNastepnaWiadomosc(String wiadomosc) {tekst.appendText(wiadomosc + "\n");}void nadajWiadomosc(String wiadomosc) {wiadomosc = uzyt + ": " + wiadomosc; // Dodanie na pocz¹tku nazwy klientatry {serwerPogaw.nadajWiadomosc(wiadomosc);}catch (RemoteException w) {// Wyj¹tek zdalny zg³oszenie i zaprzestanie nadawaniaSystem.out.println("Wyjatek zdalny: " + w.getMessage());}catch (Exception w) {// Inny wyj¹tek, zg³oszenie i zaprzestanie nadawaniaSystem.out.println("Ogólny wyj¹tek: " +w.getClass().getName() + ": " + w.getMessage());}}public boolean obslugaWyjatek(Event wyjatek) {switch (wyjatek.id) {case Event.ACTION_EVENT:if (wyjatek.target == wpis) {nadajWiadomosc(wpis.getText());wpis.setText("");return true;}}return false;}}Implementacje pobierzNastepnaWiadomosc() i nadajWiadomosc() s¹ najprostsze zmo¿liwych.Musz¹ one jedynie wywo³aæ metody zdalnego serwletu o tych samychnazwach.Lecz ich prostota ma swoj¹ cenê — bardziej skomplikowany kodkonfiguracji.Konkretnie, metoda init() musi teraz wywo³aæ stosunkowo d³ug¹(ale zrozumia³¹ w tym momencie) pobierzSerwerPogaw() w celu pobrania odwo³aniado zdalnego serwera pogawêdek.Po dok³adniejszym przyjrzeniu siê apletowi ApletPogawRMI mo¿na dostrzec, ¿ew³aœciwie nie wykorzystuje on swojej metody pobierzNastepnaWiadomosc().Zamiasttego, prosi serwlet o wywo³anie metody pobierzNastepnaWiadomosc() za ka¿dymrazem, kiedy nadana zostaje nowa wiadomoœæ.ApletPogawRMI wykonuje to ¿¹danie wswojej metodzie init(), kiedy wywo³uje rejestrujSerwerPogaw(SerwerPogaw).Metoda ta eksportuje aplet jako zdalny obiekt, po czym wywo³uje metodê serwletuaddClient() przekazuj¹c jej odwo³anie do siebie.Nastêpnie metoda serwletunadajWiadomosc() wysy³a wywo³anie zwrotne do apletu za ka¿dym razem, kiedypojawia siê nowa wiadomoœæ.Podczas stosowania wywo³añ zwrotnych na w³asn¹ rêkê, nale¿y pamiêtaæ oopisanych wczeœniej podstawach.Nale¿y uruchomiæ kompilator RMI rmic na zdalnymaplecie w celu utworzenia jego klas koñcówki i szkieletu.Nale¿y równie¿upewniæ siê, ¿e serwer posiada pliki ApletPogawRMI.class i KlientPogaw.classgdzieœ w swojej œcie¿ce klas [ Pobierz caÅ‚ość w formacie PDF ]

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