The discussion includes four main parts and a "Run the Servlet" link:
Interface
public interface jbsRMIHelloInt extends java.rmi.Remote { String sayHello() throws java.rmi.RemoteException; }
Implementation
import java.rmi.*; import java.rmi.server.UnicastRemoteObject; public class jbsRMIHelloImpl extends UnicastRemoteObject implements jbsRMIHelloInt { public jbsRMIHelloImpl () throws java.rmi.RemoteException { super (); } public String sayHello () throws java.rmi.RemoteException { return ("Hello, World, from RMI Servlet!"); } // end sayHello } // end jbsRMIHelloImpl
Servlet
import java.net.*; import java.io.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; import java.rmi.*; public class jbsRMIHelloServlet extends HttpServlet { //***** RMI Servlet //***** Expects rmiregistry on port: 4444 public boolean firsttime = true; String host; int port; protected String DEFAULT_HOST = "jbspc.cs.unc.edu"; protected int DEFAULT_RMI_PORT = 4444; protected final static String DEFAULT_RMI = "//jbspc.cs.unc.edu:4444/jbsRMIHelloImpl"; jbsRMIHelloImpl obj; public void doGet (HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { if ( firsttime ) { firsttime = false; try { obj = new jbsRMIHelloImpl (); Naming.rebind(DEFAULT_RMI, obj); System.out.println("jbsRMIHelloImpl bound in rmiregistry: port 4444"); } catch (Exception e) { System.out.println("jbsRMIHelloImpl err: " + e.getMessage()); e.printStackTrace(); } returnHTML ( resp ); } // end firsttime else { returnHTML ( resp ); } // end else } // end doGet public void returnHTML ( HttpServletResponse resp ) { ServletOutputStream out; try { resp.setContentType("text/html"); out = resp.getOutputStream(); out.println("<html>"); out.println("<head><title>jbsServerThreadedCO</title></head>"); out.println("<body>"); out.println("<center><font color=AA0000>"); out.println("<h3>jbsRMIHelloServlet Running on jbspc.cs.unc.edu:8080</h3>"); out.println("<h3>Applet Tag for jbsRMIHelloApplet Returned</h3>"); out.println("</font></center>"); out.println("<applet code=jbsRMIHelloApplet.class codebase=http://jbspc.cs.unc.edu:8080/Courses/wwwp-s98/applets/jbsRMIHelloApplet width=400 height=400>"); out.println("</applet>"); out.println("</body>"); out.println("</html>"); out.flush(); out.close(); } // end try catch ( IOException except) { } // end catch } // end returnHTML } // end jbsRMIHelloServlet
Applet
import java.awt.*; import java.applet.*; import java.rmi.*; public class jbsRMIHelloApplet extends Applet { String message = ""; public void init() { try { jbsRMIHelloInt obj = (jbsRMIHelloInt)Naming.lookup("//jbspc.cs.unc.edu:4444/jbsRMIHelloImpl"); message = obj.sayHello(); } catch (Exception e) { System.out.println("jbsRMIHelloApplet exception: " + e.getMessage()); e.printStackTrace(); } } // end init public void paint(Graphics g) { g.drawString(message, 50, 50); } } // end jbsRMIHelloAppletRun the Servlet ( jbspc )