Head First JAVA: 18. Chapter - Kamil-Jankowski/Learning-JAVA GitHub Wiki
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();}
}
}
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();}
}
}
}