Basic RMI Servlet

The discussion includes four main parts and a "Run the Servlet" link:

  1. Interface
  2. Implementation
  3. Servlet
  4. Applet
  5. Run the Servlet

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 jbsRMIHelloApplet

Run the Servlet ( jbs.cs.unc.edu:8888 )