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 protected boolean firsttime = true; protected String host; protected int port, serverPort; protected String message; protected String rmiString; jbsRMIHelloImpl obj; public void doGet (HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { if ( firsttime ) { firsttime = false; setHost ( req ); rmiString = "//" + host + ":4444/jbsRMIObj"; try { obj = new jbsRMIHelloImpl (); Naming.rebind(rmiString, obj); message = ("jbsRMIHelloImpl bound in rmiregistry: port 4444"); } catch (Exception e) { message = ("jbsRMIHelloImpl binding err: " + e.getMessage()); e.printStackTrace(); } returnHTML ( resp ); message = "jbsRMIHelloImpl already bound"; } // 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 " + host + ":" + Integer.toString(serverPort) + "</h3>"); out.println("<h3>Applet Tag for jbsRMIHelloApplet Returned</h3>"); out.println("<h3>" + message + "</h3>"); out.println("</font></center>"); out.println("<applet code=jbsRMIHelloApplet.class codebase=http://" + host + ":" + Integer.toString(serverPort) + "/Courses/comp118/applets/jbsRMIHelloApplet width=500 height=400>"); out.println("<param name=rmiString value=" + rmiString +">"); out.println("</applet>"); out.println("</body>"); out.println("</html>"); out.flush(); out.close(); } // end try catch ( IOException except) { } // end catch } // end returnHTML public void setHost ( HttpServletRequest res ) { try { InetAddress here = InetAddress.getLocalHost (); host = here.getHostAddress ();serverPort = res.getServerPort(); serverPort = res.getServerPort(); } // end try catch (java.net.UnknownHostException e) { ;} } // end setHost } // end jbsRMIHelloServlet
Applet
import java.awt.*; import java.applet.*; import java.rmi.*; public class jbsRMIHelloApplet extends Applet { String message = ""; String rmiString; String defaultRMIString = "//jbspc.cs.unc.edu:4444/jbsRMIObj"; public void init() { try { setRMIString (); jbsRMIHelloInt obj = (jbsRMIHelloInt)Naming.lookup(rmiString); message = obj.sayHello(); } catch (Exception e) { System.out.println("jbsRMIHelloApplet exception: " + e.getMessage()); e.printStackTrace(); } } // end init public void paint(Graphics g) { g.setColor ( new Color (196, 0, 0 ) ); g.setFont ( new Font ( "Helvetica", Font.BOLD, 24 ) ); g.drawString(message, 50, 50); } private void setRMIString () { rmiString = getParameter ( "rmiString" ); if (rmiString == null) rmiString = defaultRMIString; System.out.println("rmiString: " + rmiString); } // end setRMIString } // end jbsRMIHelloAppletRun the Servlet ( jbs.cs.unc.edu:8888 )