import java.io.*; import java.rmi.*; import java.rmi.registry.*; import javax.servlet.*; import javax.servlet.http.*; public class DaytimeClientServlet extends HttpServlet { DaytimeServer daytime; // Returns a reference to a DaytimeServer, or null if there was a problem. protected DaytimeServer getDaytimeServer() { // Set the security manager if it hasn't been done already. // Provides protection from a malicious DaytimeServer stub. if (System.getSecurityManager() == null) { System.setSecurityManager(new RMISecurityManager()); } try { Registry registry = LocateRegistry.getRegistry(getRegistryHost(), getRegistryPort()); return (DaytimeServer)registry.lookup(getRegistryName()); } catch (Exception e) { getServletContext().log(e, "Problem getting DaytimeServer reference"); return null; } } private String getRegistryName() { String name = getInitParameter("registryName"); return (name == null ? "DaytimeServlet" : name); } private String getRegistryHost() { // Return either the hostname given by "registryHost" or // if no name was given return null to imply localhost return getInitParameter("registryHost"); } private int getRegistryPort() { try { return Integer.parseInt(getInitParameter("registryPort")); } catch (NumberFormatException e) { return Registry.REGISTRY_PORT; } } public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { res.setContentType("text/plain"); PrintWriter out = res.getWriter(); // Get a daytime object if we haven't before if (daytime == null) { daytime = getDaytimeServer(); if (daytime == null) { // Couldn't get it, so report we're unavailable. throw new UnavailableException(this, "Could not locate daytime"); } } // Get and print the current time on the (possibly remote) daytime host out.println(daytime.getDate().toString()); } }