Head First JAVA: 18. Chapter - Kamil-Jankowski/Learning-JAVA GitHub Wiki

Head First JAVA: 18. Chapter

RMI

Service:

import java.rmi.*;

public interface MojaUsluga extends Remote {
    public String powiedzCzesc() throws RemoteException;
}

Implementation:

import java.rmi.*;
import java.rmi.server.*;

public class MojaUslugaImpl extends UnicastRemoteObject implements MojaUsluga {

    public MojaUslugaImpl() throws RemoteException {}

    @Override
    public String powiedzCzesc() {
        return "Serwer mowi: 'Czolem!'";
    }

    public static void main(String[] args) {
        try {
            MojaUsluga usluga = new MojaUslugaImpl();
            Naming.rebind("Zdalne_czesc", usluga);
        } catch (Exception e) {e.printStackTrace();}
    }
}

Client:

import java.rmi.Naming;

public class MojaUslugaKlient {

    public static void main(String[] args) {
        new MojaUslugaKlient().doRoboty();
    }

    public void doRoboty() {
        try {
            MojaUsluga usluga = (MojaUsluga) Naming.lookup("rmi://127.0.0.1/Zdalne_czesc");
            String s = usluga.powiedzCzesc();

            System.out.println(s);

        }catch(Exception ex){ex.printStackTrace();}
    }
}

Servlet

My servlet:

import javax.servlet.http.*;
import java.io.IOException;
import java.io.PrintWriter;

public class MojSerwletA extends HttpServlet {

    public void doGet(HttpServletRequest zadanie, HttpServletResponse odpowiedz) throws IOException{
        odpowiedz.setContentType("text/html");
        PrintWriter out = odpowiedz.getWriter();
        String komunikat = "Jeśli to czytasz, to znaczy, że serwlet działa!";

        out.println("<HTML><BODY>");
        out.println("<H1>" + komunikat + "</H1>");
        out.println("</BODY></HTML>");
        out.close();
    }
}

Testing server:

import java.io.*;
import java.net.*;
import java.util.*;

public class SerwerTestowy {

    private ArrayList strumieneWyjsciowe;

    public static void main(String[] args) {
        new SerwerTestowy().doRoboty();
    }

    private void doRoboty() {
        strumieneWyjsciowe = new ArrayList();
        try{
            ServerSocket gniazdoSerwera = new ServerSocket(5000);

            while(true){
                Socket gniazdoKlienta = gniazdoSerwera.accept();
                PrintWriter pisarz = new PrintWriter(gniazdoKlienta.getOutputStream());
                strumieneWyjsciowe.add(pisarz);

                Thread t = new Thread(new ObslugaKlientow(gniazdoKlienta));
                t.start();
                System.out.println("Mamy połączenie");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private void rozeslijDoWszystkich(String wiadomosc) {
        Iterator czytnik = strumieneWyjsciowe.iterator();
        while (czytnik.hasNext()){
            try {
                PrintWriter pisarz = (PrintWriter) czytnik.next();
                pisarz.println(wiadomosc);
                pisarz.flush();
            }catch(Exception ex){ex.printStackTrace();}
        }
    }

    public class ObslugaKlientow implements Runnable{
        private BufferedReader czytelnik;

        ObslugaKlientow(Socket gniazdoKlienta){
            try{
                InputStreamReader czytelnikStrumienia = new InputStreamReader(gniazdoKlienta.getInputStream());
                czytelnik = new BufferedReader(czytelnikStrumienia);
            } catch (IOException e) {e.printStackTrace();}
        }
        @Override
        public void run() {
            String wiadomosc;
            try{
                while((wiadomosc = czytelnik.readLine()) != null){
                    System.out.println("Odczytano wiadomosc: " + wiadomosc);
                    rozeslijDoWszystkich(wiadomosc);
                }
            }catch(IOException ex){ex.printStackTrace();}
        }
    }
}

⚠️ **GitHub.com Fallback** ⚠️