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

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 jbsRMIHelloApplet

Run the Servlet ( jbspc )